« 5月11日:音響合成 | メイン | 6月1日: OSCによるネットワーク上でのコミュニケーション »
レスリー・スタックによる、IOパッチを利用することで、サウンドファイルの入出力(録音・再生の処理)を容易に付加することが可能です
Bufferオブジェクトに様々なメッセージを送って、HDD上のファイルをメモリに展開したり、メモリに展開されたオーディオデータをHDDに保存することが可能です。
SuperCollider3で、サンプリングされたデータを扱う方法についてみてみましょう。
まず、サウンドファイル(Wav, AIFF, AUなど)をメモリに読み込みます。Bufferオブジェクトを使用します。 Bufferオブジェクトのreadメソッドで、サウンドファイル全体がメモリのバッファに読み込まれます。
( // サウンドファイル全体をメモリに格納 s = Server.local; b = Buffer.read(s,"sounds/a11wlk01.wav"); )
メモリ内のサウンドを再生するにはPlayBufオブジェクトを使用します。
//バッファの再生
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
Out.ar(out,
PlayBuf.ar(1,bufnum, BufRateScale.kr(bufnum))
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
//ループをオンに
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
Out.ar(out,
PlayBuf.ar(1,bufnum,BufRateScale.kr(bufnum),loop: 1.0)
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
//インパスル信号で再生をトリガー
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
var trig;
trig = Impulse.kr(2.0);
Out.ar(out,
PlayBuf.ar(1,b.bufnum,BufRateScale.kr(bufnum),trig,0,0)
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
//それぞれのインパスル信号で全体をトリガー
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
var trig;
trig = Impulse.kr(XLine.kr(0.1,100,30));
Out.ar(out,
PlayBuf.ar(1,b.bufnum,BufRateScale.kr(bufnum),trig,5000,0)
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
// トリガの間隔と再生の開始点をマウスで指定
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
var trig;
trig = Impulse.kr(MouseY.kr(0.5,200,1));
Out.ar(out,
PlayBuf.ar(1,b.bufnum,BufRateScale.kr(bufnum),
trig,MouseX.kr(0,BufFrames.kr(bufnum)),1)
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
// 再生ピッチを徐々に増加させていく
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
var rate;
rate = XLine.kr(0.1,100,60);
Out.ar(out,
PlayBuf.ar(1, bufnum, rate, 1.0,0.0, 1.0)
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
// サイン波で再生ヘッドをコントロール
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
var rate;
rate = FSinOsc.kr(XLine.kr(0.2,8,30), 0, 3, 0.6);
Out.ar(out,
PlayBuf.ar(1,bufnum,BufRateScale.kr(bufnum)*rate,1,0,1)
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
// サウンドの中をジグザグに再生
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
var rate;
rate = LFNoise2.kr(XLine.kr(1,20,60), 2);
Out.ar(out,
PlayBuf.ar(1,bufnum,BufRateScale.kr(bufnum)*rate,1,0,1)
)
}).play(s,[¥out, 0, ¥bufnum, b.bufnum]);
(
s = Server.local;
s.boot;
b = Buffer.read(s,"sounds/a11wlk01.wav");
)
// Phase Shift 1
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
Out.ar(out,
[PlayBuf.ar(1,bufnum, BufRateScale.kr(bufnum),loop: 1.0),
PlayBuf.ar(1,bufnum, BufRateScale.kr(bufnum)*1.01,loop: 1.0)]
)
}).play;
// Phase Shift 2
SynthDef("help-PlayBuf",{ arg out=0,bufnum=0;
var trig1, trig2;
trig1 = Impulse.kr(1.0);
trig2 = Impulse.kr(1.01);
Out.ar(out,
[PlayBuf.ar(1,b.bufnum,BufRateScale.kr(bufnum),trig1,0,0),
PlayBuf.ar(1,b.bufnum,BufRateScale.kr(bufnum),trig2,0,0)]
)
}).play;
投稿者 Atsushi Tadokoro : May 17, 2004 12:02 PM