今日
夕方にSuperColliderの授業のため,授業準備.
今日はクロスシンセシスなのだが,相変わらずSuperColliderでの記述が簡単すぎて泣けてくる.
リアルタイムで入力を取りながら,クロスシンセシスをかけるのを,SynthDefを使って記述した例.
////// リアルタイム録音とCrossSynthesis 直接playではなくSynthDefにまとめてみる ( f = Buffer.alloc(s, 44100 * 1.0, 1); // ノコギリ波を録音するバッファ 1秒分 g = Buffer.alloc(s, 44100 * 1.0, 1); // マイクインプットを録音するバッファ 1秒分 h = Buffer.alloc(s, 1024, 1); //FFT用のバッファその1 i = Buffer.alloc(s, 1024, 1); //FFT用のバッファその2 SynthDef(\sawBuf, {arg out=0, bufNum=0; // ノコギリ波を録音する var inSnd; inSnd = Saw.ar(440); RecordBuf.ar(inSnd, bufNum); }).play(s, [\out, 0, \bufNum, f.bufnum]); SynthDef(\recordBuf,{ arg out=0, bufNum=0; // マイクインプットをバッファに録音するSynthDef var inSnd; inSnd = AudioIn.ar(1); RecordBuf.ar(inSnd, bufNum); }).play(s, [\out, 0, \bufNum, g.bufnum]); ) ( SynthDef(\sawVocorder, { arg out=0, bufNum1=0, bufNum2=1, fftBufNum1=2, fftBufNum2=3; var inSnd1, chain1, inSnd2, chain2, outSnd, multChain; inSnd1 = PlayBuf.ar(1, bufNum1, BufRateScale.kr(bufNum1), loop: 1); inSnd2 = PlayBuf.ar(1, bufNum2, BufRateScale.kr(bufNum2), loop: 1); chain1 = FFT(fftBufNum1, inSnd1); chain2 = FFT(fftBufNum2, inSnd2); multChain = PV_Mul(chain1, chain2); outSnd = IFFT(multChain); Out.ar([0, 1], outSnd); }).play(s, [\out, 0, \bufNum1, f.bufnum, \bufNum2, g.bufnum, \fftBufNum1, h.bufnum, \fftBufNum2, i.bufnum]); ) ( f.free; g.free; h.free; i.free; )