And What About Functions and Sound?

単純なサイン派を再生するコード

{ SinOsc.ar( 440, 0, 0.5 ) }.play;

これでローカルサーバから音が出る。


明示的にサーバを指定していない時は、グローバル変数 s で指定しているサーバを使う。
s にはデフォルトでローカルサーバが格納されているから、このコードでローカルサーバから音がでるということだと思われる。


サンプルコードで SinOsc はクラスで、クラスメソッド ar (audio rate) を呼び出している。


ar メソッドの引数は、frequency, phase, mul で 周波数、位相、振幅 という感じ。
mul は multiply という事で、frequency と phase の波形に対して乗算する。
サンプルでは省略されているが、四番目の引数に add ってのもあるみたい。こっちは加算。


位相はラジアンで指定する。
振幅は値かシグナルで指定する。シグナルで使うのは、

{ SinOsc.ar( 440, 0,
        SinOsc.kr( 0.5, 0, 0.2, 0.7 )
    ) }.play;

という感じ。この場合は音量が周期的に変わる。


kr (control rate) と ar と同じように使えるが、

{ SinOsc.kr( 440, 0, 0.5 ) }.play;

だと、音は出ない。


でも、以下のコードだと同じ音がでていると思う。

{ SinOsc.ar( 440, 0,
        SinOsc.kr( 0.5, 0, 0.2 )
    ) }.play;

{ SinOsc.ar( 440, 0,
        SinOsc.ar( 0.5, 0, 0.2 )
    ) }.play;

違いが良く分からないが、用途が違うってのは何となくわかる。


こういう、オーディオ信号やコントロール信号を生成するオブジェクトは UGens(unit generator)というらしい。
なんて読むやろか?ユージェン?いつか恥ずかしい思いをするかもしれない。


あと、標準のエディタがちょっと使いにくいな。 Emacs とかで編集できたらいいんやけど..