46 lines
1.2 KiB
Text
46 lines
1.2 KiB
Text
|
class:: FFTTrigger
|
||
|
summary:: Outputs the necessary signal for FFT chains, without doing an FFT on a signal
|
||
|
categories:: UGens>FFT
|
||
|
|
||
|
classmethods::
|
||
|
private:: categories
|
||
|
|
||
|
method:: new
|
||
|
argument:: buffer
|
||
|
a buffer to condition for FFT use
|
||
|
argument:: hop
|
||
|
the hop size for timing triggers (defaults to 0.5)
|
||
|
argument:: polar
|
||
|
a flag. If 0.0, the buffer will be prepared for complex data, if > 0.0, polar data is set up.
|
||
|
|
||
|
examples::
|
||
|
code::
|
||
|
(
|
||
|
s.waitForBoot({
|
||
|
b = Buffer.alloc(s, 512);
|
||
|
});
|
||
|
)
|
||
|
// Reminder: This isn't the intended typical usage! It's OK to do this though.
|
||
|
(
|
||
|
x = {
|
||
|
var mags, phases, chain, sig;
|
||
|
// Create simple undulating magnitudes
|
||
|
mags = {FSinOsc.kr(ExpRand(0.1, 1)).range(0, 1)}.dup(100);
|
||
|
// Then give them a "rolloff" to make the sound less unpleasant
|
||
|
mags = mags * ((1, 0.99 .. 0.01).squared);
|
||
|
// Let's turn the bins on and off at different rates, I'm *sure* that'll sound interesting
|
||
|
mags = mags * {LFPulse.kr(2 ** IRand(-3, 5)).range(0, 1)}.dup(100);
|
||
|
// Let's ignore phase for now
|
||
|
phases = 0.dup(100);
|
||
|
chain = FFTTrigger(b, 0.5);
|
||
|
// Now we can do the packing
|
||
|
chain = PackFFT(chain, 512, [mags, phases].flop.flatten, 0, 99, 1);
|
||
|
sig = IFFT(chain);
|
||
|
Out.ar(0, sig.dup);
|
||
|
}.play(s);
|
||
|
)
|
||
|
x.free;
|
||
|
b.free;
|
||
|
::
|
||
|
|