2006-01-01から1年間の記事一覧

Tableは、なぜSndThreadと関係しないのか

Xヶ所村「習作ですがPythonでシンセ」を読んでいて、いくつか注意したいところがある。それはSndTableのところである、他にもあるけど。SndTableはTableを継承したものでありコンストラクタした時点で入力したSndWaveから音声データをテーブルに読み込んでい…

少ない配列で複雑な配列を

例えばオシレータに任意で周波数の配列をあたえたいとする。ここではEnvTableを使用する。EnvTableはとても大きな配列であると考える、一方で12個ぐらいの配列をfloatArrayで作る。この小さいほうの配列を大きな方の配列に張りつける。もちろん間がスカスカ…

楽器をスイッチ

ノイズをローパスフィルタに通している状態、今、ローパス・フィルタからハイパス・フィルタにスイッチしたい。この場合、変数に新たにハイパスフィルタを代入してもうまくない、落ちたり、グリッチが起きるだろう。楽器の上位のクラスであるSndObjを上手に…

ユーザ定義の波形テーブル

(4/23 コードの7行目を修正) 以前からUsrDefTable()がうまく扱えなかった。サインの波形を生成するテーブルにHarmTable(1024, 1, SINE)が使えるのだが、例えばランダムな波形を生成したければHarmTable()では無理です。そこでUsrDefTable()を使えばいいと考…

楽器を繋げる

複雑な音をつくりあげるには様々な楽器を繋ぎ合わせなければならない。ではWAVETABLEとAMを繋いでみましょう。 rtsetparams(44100, 2) load("WAVETABLE") load("AM") bus_config("WAVETABLE", "aux 0 out") //WAVETABLEの出力先aux 0 bus_config("AM", "aux …

音声ファイルの書き出し

リアルタイムに音を再生するだけでなく録音してみる。とても簡単で1行追加するだけ。 rtsetparams(44100, 2) rtoutput("filename") //ファイルが書き出される load("WAVETABLE") waveform = maketable("wave", 1000, "sine") WAVETABLE(0, 3, 440, 20000, 0…

maketableで正弦波

makegenは楽器ごとにエンベロープや波形なのか調べないといけなくて大変そうだと感じていたのだが、これを解決すべくmaketableが用意されている。よってmaketableを使ってココの正弦波の例を書きなおしてみる。 rtsetparams(44100, 2) load("WAVETABLE") wav…

makegenの第一引数

正弦波を鳴らす例でmakegenの最初の引数が1の時、2の時の説明をしました。しかし振幅変調の楽器AMINSTの例でmakegenの第一引数が3や4の場合があることを知る。さらに読むと楽器によってmakegenの第一引数はことなる働きをすると。マニュアルのAMINSTには以下…

デバイス名の取得の怪

デバイスIDから入出力デバイスの名前を取得する関数はInputDeviceNameとOutputDeviceNameですが、引数がちょっと変だ。 sndobj.InputDeviceName(0, "hoge") #2つ目の引数に何か文字列が必要だこれによりデバイスIDが0の入力デバイス名が取得できる。が、コメ…

デバイス一覧

PySndObjのマニュアルは無いみたい、よってSndObjのマニュアルを参考にしているのだけれども。そのマニュアルに書いている利用可能なデバイスを一覧表示する関数DeviceListは使えません。PySndObjでは import sndobj sndobj.ListDevices()これで入力と出力の…

コメントアウト

コメントアウトのいくつか。 /*ここコメント /*ここもコメント*/ //もひとつコメント多分こんなもの

正弦波

昨日は文字列を出力しただけなので、音をと。基本はやはり正弦波、サインウェーブをと。 rtsetparams(44100, 2) /*サンプリングレートとチャンネル数*/ load("WAVETABLE") /*楽器を読みこむ*/ makegen(2, 10, 1000, 1) /*サイン波*/ WAVETABLE(0, 10, 8000, …

画面に出力

RTcmixをはじめてみようかと、、、。不定期にちょっとづつ。 print("hello") a = "jun" b = 2006 printf("miu%s%d",a,b)以上をfile.scoとでも保存します。次に以下のように実行すると $CMIX <file.sco -------> RTcmix 4.0.0 (CMIX) <-------- hello miujun2006出力されます。</file.sco>

スライダで再生速度を変える。

昨日の日記をふまえて、読み込んだ音声ファイルの再生速度を動的に変えてみる。その際GUIのスライダを作り、それによりコントロールする。GUIはwxPythonを使います。 from sndobj import * import wx class SndSpeed: def __init__(self, name="loop.wav" ):…

ファイルサイズの取得

以前、説明したファイル読み込みのクラスであるSndWaveは、上位クラスのSndFIOを継承しています。であるからSndFIOのメソッドのGetDataFrames()でファイルサイズを取得できます。使い方は file = SndWave("loop.wav", READ) size = file.GetDataFrames()こん…

クラス

自ら楽器を定義してみましょう。楽器といっても笛やギターやフィルタなど様々ですが、それぞれ独自の振る舞いがあります、そしてその振る舞いを定義するのがクラスです。トレモロというオブジェクトは多分PySndObjにはありませんので作ってみます、Ringとい…

GUIその2(ボタン入力)

Linuxの音楽環境のセットアップと夏風邪で前回の日記からちょい間があきました。しかし少しづつ地味に続けていきます。今日はGUIのボタンを作ってそれを1度押すと正弦波が鳴り、もう1度押すと鳴り止む、それの繰り返し。 import wx from sndobj import * tab…

GUIその1(キー入力)

PySndObjそのものにはGUIを持ちえていません。そこでwxPythonを使ってパソコンキーボードのpを押せば正弦波が鳴る、sを押せば鳴り止む、最後にqを押せば終了する。以上を作ってみる。wxPythonの入門には以下のページを参考にしました。 import wx from sndob…

MIDI入力

MIDIキーボードなどのデバイスからOscili()の周波数を変えてみましょう。 from sndobj import * import time MidiDeviceList() #利用可能なMIDIデバイスを表示します port = int(raw_input("Enter MIDI port:")) #入力待ち midi = SndMidiIn(port) note = Mi…

スレッドを使わない

昨日の日記の修正に時間を使ったので今日はサクッと。基本的にPythonで対話的に音を作れるのが嬉しいPySndObjなのでSndThreadというスレッドを使うのが1番ですが、使わない方法もあります。 from sndobj import * import time tab = HarmTable(256, 3, 4) os…

オーディオレートとコントロールレートとベクトルの大きさ

大幅に書き換えました。(2007 4/13) 昨日の日記で取り上げたローパスフィルタは引数が省略されていました。多くの(すべてではない)SndObjにおいて最後2つの引数はvector sizeとサンプリングレートです。 まずvector size(ベクトルの大きさ)ですが、これはコ…

フィルタ

PySndObjにはたくさんのフィルタがありますが、基本のローパスフィルタを使ってみる。カットオフ周波数が定数のLowPass()ではなく、オシレータなどでコントロールできるButtLP()を、例によって4つ目の引数以上は省略。 ButtLP(fr, SndObj, SndObj) #3つ目の…

エンベロープ

例として1つ取り上げます。残念ながらちょっと物足りない感じではありますが、そのうち、もうちょっといい方法が思いつくかもしれません。 エンベロープはADSRを使います。以下は8つ目の引数以上は省略しています。 ADSR(att, maxamp, dec, sus, rel, dur, S…

ファイル書き込み

正弦波をpyo.wavに書き込む。昨日の日記、SndWaveをファイル書き込みに使用します。再生しながらファイルに書き込む方法は今調査中。 from sndobj import * import time tab = HarmTable() osc = Oscili(tab, 440, 3000) write = SndWave("pyo.wav", OVERWRI…

ファイルの読み込み

何通りかの方法が考えられるんですが、PySndObjにはSndObjクラスの下にSndReadがあり、SndIOクラスの下にはSndWaveなどがあって、多くの入出力がSndObjをあつかうので、SndWaveは1度SndInに突っ込んでからになってします。ちょっと面倒くさいのでSndReadから…

周波数変調

正弦波の次はその周波数変調。調べたところ2通りあるようで、その1つはOsciliの4番目の引数に周波数をコントロールするためにサウンドオブジェクトを代入できる、下のコードではmodですね。 from sndobj import * import time tab = HarmTable() mod = Oscil…

PySndObjはじめました。

ChucKも続けていきますがちょっと休憩。グループで書く日記もあるようなのでそちらのほうに移していこうかと。次はNyquistかCommonLispMusicなどの関数型の音響言語を勉強しようと思っていたんですが、なんかノイジーパイソンって事で。 さてPySndObjですが…

スレッドのイベント

以下のようなイベントというものがよくわからなかった。音楽的にMIDIキーボードやパソコンキーボードの入力待ちとごっちゃになっていて理解できていなかったのです。 Event e;このイベントはキーボードがどうだとかではなく、スレッドで効果的に使用できます…

maybe

以前はloop(6){}だったそうですが、以下のようにrepeat(回数)に変更。if(maybe)はちょっとおもしろく、実行するとわかりますが、もしかするとyes出力します、ユニーク。もしかすると他の言語とかにもあるかもしれませんね。SuperColliderには裏か表かcoinっ…

引用符のエスケープ処理できない。

Chuckでは直接に文字列を出力するとき引用符(")で囲みますが、その中に引用符を書き込むとエラーになります。 <<<"miu"jun">>>; #=>line(1).char(9): syntax errorそこでエスケープ処理を探したんですが今のところサポートしていないそうです。チッ。ちなみ…