PV_Max maximum magnitude
PV_Max(bufferA, bufferB)
Output copies bins with the maximum magnitude of the two inputs.
bufferA - fft buffer A.
bufferB - fft buffer B.
See also FFT Overview.
s.boot;
(
{
var inA, chainA, inB, chainB, chain ;
inA = Saw.ar(LFNoise1.kr(2).exprange(10, 1000));
inB = Pulse.ar(LFNoise1.kr(2).exprange(10, 1000));
chainA = FFT(LocalBuf(2048), inA);
chainB = FFT(LocalBuf(2048), inB);
chain = PV_Max(chainA, chainB);
0.1 * IFFT(chain).dup;
}.play
);
// 2-channel version:
(
{
var inA, chainA, inB, chainB, chain ;
inA = Saw.ar(LFNoise1.kr(2).exprange(10, 1000)); // same saw through different pulses
inB = Pulse.ar(LFNoise1.kr(2.dup).exprange(10, 1000));
chainA = FFT(LocalBuf(2048.dup), inA);
chainB = FFT(LocalBuf(2048.dup), inB);
chain = PV_Max(chainA, chainB);
0.1 * IFFT(chain);
}.play
);
(
SynthDef(\help_max, { arg out=0, soundBufnum1=0, soundBufnum2 = 0;
var inA, chainA, inB, chainB, chain ;
inA = PlayBuf.ar(1, soundBufnum1, BufRateScale.kr(soundBufnum1), loop: 1);
inB = PlayBuf.ar(1, soundBufnum2, BufRateScale.kr(soundBufnum2), loop: 1);
chainA = FFT(LocalBuf(2048), inA);
chainB = FFT(LocalBuf(2048), inB);
chain = PV_Max(chainA, chainB);
Out.ar(out, 0.5 * IFFT(chain).dup);
}).store;
);
(
q = q ? (); // use global dictionary
q[\bufferA] = Buffer.read(s,"sounds/a11wlk01.wav");
CocoaDialog.getPaths({ arg paths; // get a second soundfile;
paths.do({ arg p;
q[\bufferB] = Buffer.read(s, p);
Synth(\help_max, [\out, 0, \soundBufnum1, q[\bufferA], \soundBufnum2, q[\bufferB]]);
})
},{
"cancelled".postln;
});
)
q[\bufferA].free;
q[\bufferB].free;