FFT Fast Fourier Transform


The fast fourier transform analyzes the frequency content of a signal. See also [FFT Overview].


FFT(buffer, input)

FFT uses a local buffer for holding the buffered audio. The window size corresponds to the buffer size. The overlap is 2.



s = Server.local.boot; 


b = Buffer.alloc(s,2048,1);


(

SynthDef("help-noopFFT", { arg out=0,bufnum=0;

var in, chain;

in = WhiteNoise.ar(0.01);

chain = FFT(bufnum, in);

chain.inspect; // its an FFT

Out.ar(out, 

IFFT(chain) // inverse FFT

);

}).play(s,[\out,0,\bufnum,b.bufnum]);

)


(

SynthDef("help-sineFFT", { arg out=0,bufnum=0;

var in, chain;

in = SinOsc.ar(SinOsc.kr(SinOsc.kr(0.08,0,6,6.2).squared, 0, 100,800));

chain = FFT(bufnum, in);

Out.ar(out, IFFT(chain));

}).play(s,[\out,0,\bufnum,b.bufnum]);

)


(

SynthDef("help-magAbove", { arg out=0,bufnum=0;

var in, chain;

in = SinOsc.ar(SinOsc.kr(SinOsc.kr(0.08,0,6,6.2).squared, 0, 100,800));

//in = WhiteNoise.ar(0.2);

chain = FFT(bufnum, in);

chain = PV_MagAbove(chain, 310); 

Out.ar(out, 0.5 * IFFT(chain));

}).play(s,[\out,0,\bufnum,b.bufnum]);

)


(

SynthDef("help-brick", { arg out=0,bufnum=0;

var in, chain;

in = {WhiteNoise.ar(0.2)}.dup;

chain = FFT(bufnum, in);

chain = PV_BrickWall(chain, SinOsc.kr(0.1)); 

Out.ar(out, IFFT(chain));

}).play(s,[\out,0,\bufnum,b.bufnum]);

)


(

SynthDef("help-randcomb", { arg out=0,bufnum=0;

var in, chain;

in = {WhiteNoise.ar(0.8)}.dup;

chain = FFT(bufnum, in);

chain = PV_RandComb(chain, 0.95, Impulse.kr(0.4)); 

Out.ar(out, IFFT(chain));

}).play(s,[\out,0,\bufnum,b.bufnum]);

)


(

SynthDef("help-rectcomb", { arg out=0,bufnum=0;

var in, chain;

in = {WhiteNoise.ar(0.2)}.dup;

chain = FFT(bufnum, in);

chain = PV_RectComb(chain, 8, LFTri.kr(0.097,0,0.4,0.5), 

LFTri.kr(0.24,0,-0.5,0.5)); 

Out.ar(out, IFFT(chain));

}).play(s,[\out,0,\bufnum,b.bufnum]);

)


(

SynthDef("help-magFreeze", { arg out=0,bufnum=0;

var in, chain;

in = SinOsc.ar(LFNoise1.kr(5.2,250,400));

chain = FFT(bufnum, in);

// moves in and out of freeze

chain = PV_MagFreeze(chain, SinOsc.kr(0.2) ); 

Out.ar(out, 0.5 * IFFT(chain));

}).play(s,[\out,0,\bufnum,b.bufnum]);

)