( SynthDef(\voiceEvolving, { arg out=0, bufnum, amp=0.5, windowSize=1024; var in, chain, sig; var smearAmt, shiftAmt, wipeTrig; in = PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum), loop: 1); // FFT processing chain = FFT(LocalBuf(windowSize), in); // Slowly changing modulation sources smearAmt = LFNoise1.kr(0.1).range(5, 50); // how smeared the spectrum is shiftAmt = LFNoise1.kr(0.07).range(-30, 30); // shifting bins in pitch space wipeTrig = Dust.kr(0.3); // occasional spectral dropouts // PV mutations chain = PV_MagSmear(chain, smearAmt); chain = PV_BinShift(chain, shiftAmt); chain = PV_RandWipe(chain, wipeTrig); sig = IFFT(chain) * amp; // Optional: gentle filtering sig = LPF.ar(sig, 1000); Out.ar(out, sig.dup); }).add; ) Synth(\voiceEvolving, [\bufnum, b, \amp, 0.4]);