SuperCollider CLASSES (extension)

PV_SpectralEnhance
ExtensionExtension

A harmonic enhancer

Description

Class Methods

*new (buffer, numPartials: 8, ratio: 2, strength: 0.1)

Arguments:

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.

NOTE: 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.

Inherited class methods

Instance Methods

Inherited instance methods

Examples

s.boot;

z = Buffer.read(s, Platform.resourceDir +/+ "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;