PV_MagMulAdd simple scaling of FFT magnitudes

chain = PV_MagMulAdd(chain, mul, add)

Applies the following simple linear transformation to every magnitude in the FFT:

mag = mag * mul + add

This is probably not a very useful audio effect in itself, but may be a component of other analysis or transformation processes...

chain - fft chain.

s.boot;

(

b = Buffer.alloc(s,2048,1);

c = Buffer.read(s,"sounds/a11wlk01.wav");

d = Buffer.alloc(s,2048,1);

)

// Here, mouse left/right controls "mul", so simply amplifies;

// up/down is "add", so kind of artificially raises the noise floor.

(

SynthDef("help-pvmagmuladd", { arg out=0, bufnum=0, soundBufnum=2;

var in, chain;

in = PlayBuf.ar(1, soundBufnum, BufRateScale.kr(soundBufnum), loop: 1);

chain = FFT(bufnum, in);

chain = PV_MagMulAdd(chain, MouseX.kr(0,2), MouseY.kr(0,1));

Out.ar(out, 0.3 * IFFT(chain));

}).play(s,[\out, 0, \bufnum, b, \soundBufnum, c]);

)