( ~bufA = Buffer.read(s, "/home/lcoogan/snd/ardour/cantorial loops/export/malavksy_shomea_00.wav"); ~bufB = Buffer.read(s, "/home/lcoogan/snd/ardour/cantorial loops/export/malavksy_shomea_01.wav"); ) { PlayBuf.ar(1, ~bufA, BufRateScale.kr(~bufA), doneAction: 2) }.play; ~bufA.play; ( SynthDef(\spectralDiff, { var sigA, sigB, chain, chainA, chainB, diff, out; sigA = PlayBuf.ar(1, ~bufA, BufRateScale(~bufA)); sigB = PlayBuf.ar(1, ~bufB, BufRateScale(~bufB)); chainA = FFT(LocalBuf(2048), sigA); chainB = FFT(LocalBuf(2028), sigB); chain = PV_Add(chainA, chainB); out = IFFT(chain); Out.ar(0, out.dup * 20); }).play; ) ( SynthDef(\testFFT, { var sig, chain, out; sig = PlayBuf.ar(1, ~bufA, BufRateScale.kr(~bufA), doneAction: 2); chainA = FFT(LocalBuf(2048), sig); chain out = IFFT(chain); // No spectral processing, just pass-through Out.ar(0, out.dup); }).play; ) ( SynthDef(\specMorph, { | morphAmt = 0.5 | // morph between 0 and 1 var a, b, fftA, fftB, morphed, out; // Playback (mono) a = PlayBuf.ar(1, ~bufA, BufRateScale.kr(~bufA), loop: 0); b = PlayBuf.ar(1, ~bufB, BufRateScale.kr(~bufB), loop: 0); // FFT fftA = FFT(LocalBuf(2048), a); fftB = FFT(LocalBuf(2048), b); morphed = PV_Mul(fftA, fftB, morphAmt); morphed = PV_Morph(morphed, fftA); morphed = PV_MagBelow(morphed, 800); // Resynthesize out = IFFT(morphed); // out = FreeVerb.ar(out, room:1); // out = Compander.ar(out, control:0.0, thresh: 0.01, slopBelow:0.2, slopAbove:1.0, clampTime:0.1, relaxTime:0.3); // out = RHPF.ar(out, 1000, 0.3); out = Fold.ar(out, -20, 20); Out.ar(0, out.dup * 0.1); }).play; )