A UGen that writes a complex input signal into an FFT buffer. The input is a
sequence of interleaved magnitudes and phases. It is written to an FFT buffer
ready for transforming it back into time-domain audio using IFFT.
// harmonic sound with changing overtone intensities
// create simple undulating magnitudes
val m0 = FSinOsc.kr(Seq.fill(100)(ExpRand(0.1, 1))) * 0.5 + 0.5
// give them a "rolloff" to make the sound less unpleasant
val m1 = m0 * Seq.tabulate(100)(_.linlin(0, 99, 1.0, 0.01).squared)
// turn the bins on and off at different rates
val mags = m1 * LFPulse.kr(Seq.fill(100)(2 pow IRand(-3, 5)))
// ignore phase
val phases: GE = Seq.fill(100)(0)
// We need to create an FFT chain to feed our data in to.
// The easiest way is to do an FFT on some signal which we then ignore!
val buf = FFT(LocalBuf(512), DC.ar(0))
// now we can do the packing
val chain = PackFFT(buf, 512, Zip(mags, phases), 0, 99, 1)
val sig = IFFT.ar(chain)