PV_SpectralEnahnce a harmonic enhancer
PV_SpectralEnhance(buffer, numPartials, ratio, strength)
buffer - the FFT buffer to filter
numPartials - the number of partials above each bin to add magnitude to
ratio - the ratio between the original partial and the partials above to add harmonic content to (should
be greater the 1... usually 2 or greater).
strength - a multiplier for each successive partial.
How numPartials, ratio and strength are used.
if you have a bin (e.g., bin 10) with magnitude of 1, magnitude will be added to numPartial bins above that bin according to the ratio. If numPartial is 4 and the ratio is 2, magnitude will be added to bins 20, 30, 40 and 50. If strength is 0.1, bin 20 will get an additional 0.1 * the original magnitude (0.1), bin 30 will get (0.1 / 2), bin 40 will get (0.1 / 3) and bin 50 (0.1 / 4). Strength can be any positive number.
Examples:
s.boot;
z = Buffer.read(s, "sounds/a11wlk01.wav")
(
x = SynthDef(\specEnhance, {arg ratio = 2;
var a, chain, out;
a = LocalBuf.new(2048);
// Sin tone
// chain = FFT(a, SinOsc.ar(440), 0.5);
// sf playback
// chain = FFT(a, PlayBuf.ar(1, z, loop: 1));
// something a little more complext
chain = FFT(a, SinOsc.ar(440 + SinOsc.ar(1760, 0.23, 2059), 0, 0.2));
// MouseX controls strength
chain = PV_SpectralEnhance(chain, 8, ratio, MouseX.kr(0, 0.99));
out = IFFT(chain);
Out.ar(0, out.dup);
}).play(s)
)
x.set(\ratio, 2.1)
x.set(\ratio, 3.1)
x.set(\ratio, 0.98)
x.free;
z.free;