rsc3/doc-schelp/HelpSource/Classes/FFTTrigger.schelp

46 lines
1.2 KiB
Text
Raw Normal View History

2022-08-24 13:53:18 +00:00
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;
::