Convolution real-time convolver
Convolution.ar(in, kernel, framesize, mul, add)
Strict convolution of two continuously changing inputs. Also see [Convolution2] for a cheaper CPU cost alternative for the case of a fixed kernel which can be changed with a trigger message.
//see ch18 http://www.dspguide.com/ch18.htm Steven W Smith
in - processing target
kernel - processing kernel.
framesize- size of FFT frame, must be a power of two
(
{ var input, kernel;
input= SoundIn.ar(0);
kernel= Mix.ar(LFSaw.ar([300,500,800,1000]*MouseX.kr(1.0,2.0),0,0.25));
//must have power of two framesize
Out.ar(0,Convolution.ar(input,kernel, 1024, 0.5));
}.play;
)
(
//must have power of two framesize- FFT size will be sorted by Convolution to be double this
//maximum is currently a=8192 for FFT of size 16384
a=2048;
s = Server.local;
//kernel buffer
g = Buffer.alloc(s,a,1);
)
(
//random impulse response
g.set(0,1.0);
100.do({arg i; g.setn(a.rand, 1.0.rand)});
{ var input, kernel;
input= SoundIn.ar(0);
kernel= PlayBuf.ar(1,g,BufRateScale.kr(g),1,0,1);
Out.ar(0,Convolution.ar(input,kernel,a, 0.5));
}.play;
)