ファイル再生

PlayBuf

もうひとつ憶えといたらよさそうなのがファイル再生関連のUGen。
なのだが、これを使うには最初にファイルの読み込みをしなければならんらしい。事前にこれやれと。

Buffer.read(s, "hoge.wav", bufnum:10); // バッファ10番に読み込む

bufnumというパラメータでバッファ番号を当ててますが、たぶん番号は何でもいい。
早速鳴らしてみます。

SynthDef("hoge", {
var
o = PlayBuf.ar(1, 10); // バッファ10番を再生
Out.ar(0, Pan2.ar(o, 0));
}).play;

PlayBufはこの手のやつでは最も単純で、主に端から鳴らすだけ。

SynthDef("hoge", {
var
t = Impulse.ar(5); // トリガ
o = PlayBuf.ar(1, 10, trigger:t);
Out.ar(0, Pan2.ar(o, 0));
}).play;

トリガしてやることもできる。

SynthDef("hoge", {
var
o = PlayBuf.ar(1, 10, loop:1); // ループあり
Out.ar(0, Pan2.ar(o, 0));
}).play;

ループも可能。というかサンプラーみたいな感じ。

SynthDef("hoge", {
var
r = 4.0.rand-2; // いろんな速度
o = PlayBuf.ar(1, 10, rate:r, loop:1);
Out.ar(0, Pan2.ar(o, 0));
}).play;

実行するたびにいろんな速度で鳴ります。負の速度はいわゆる逆再生。
この速度とかのパラメータって、再生中はいじれないのか?

BufRd

もう少し面白おかしくしたい。

SynthDef("hoge", {
var len;
len = BufFrames.ir(10);		// バッファのフレーム数
p = Phasor.ar(0, 1, 0, len);		// 0からlenまで漸次増
o = BufRd.ar(1, 10, p);		// バッファ10番を読み取り
Out.ar(0, Pan2.ar(o, 0));
}).play;

いろいろできるぶん、少し設定が込み入ってます。
まずこれはほっとけば鳴るのではなく、波形でバッファを読む必要がある。テープの上をヘッドが動くイメージか。
この場合Phasorを使うのがおすすめらしい。Phasorというのは一直線に数が増えていくような波形。
他のオシレータみたいに周波数を与えるのではなく、サンプルごとの増加分と上限を与えてやるという不思議な感じ。

SynthDef("hoge", {
var len;
len = BufFrames.ir(10);
p = Phasor.ar(0, 1, 0, len);
q = LFNoise0.ar(10)*len; // ランダム
o = BufRd.ar(1, 10, p+q);
Out.ar(0, Pan2.ar(o, 0));
}).play;

間に低周波ノイズをかまして読み取り位置がランダムにぶっ飛ぶようにしてます。わけがわかりませんね。

SynthDef("hoge", {
var len;
len = BufFrames.ir(10);
p = LFNoise2.ar(10, len/10); // なめらかランダム
o = BufRd.ar(1, 10, p);
Out.ar(0, Pan2.ar(o, 0));
}).play;

LFNoise2ですと乱数の間がなめらかにつながり、するとなんだかスクラッチみたく聴こえてきます。面白いですね。
このように、読み取り波形をあれこれすることであれこれできるみたいですねえ。
再生関連は他にもありますけど、とりあえずこんなもんで。