Filtering

The basic idea of subtractive synthesis is similar to making coffee: something goes through a filter to remove unwanted components from the final product.

////////////////////////////////////////////////////////////////////////////////////////////////////

The .dumpClassSubtree message

Get a list of ugen filters in SuperCollider 3, by sending the .dumpClassSubtree message to the Filter class, as in

Filter.dumpClassSubtree;

(Object.dumpClassSubtree prints all SuperCollider classes)

////////////////////////////////////////////////////////////////////////////////////////////////////

The list of Filters, as of 19.5.04, includes

[

DetectSilence

Formlet

Ringz

SOS

FOS

Slew

Median

LPZ2

[ BRZ2 BPZ2 HPZ2 ]

Slope

LPZ1

[ HPZ1 ]

MidEQ

BPF

[ BRF ]

LPF

[ HPF ]

RLPF

[ RHPF ]

LeakDC

Lag

[ Ramp Lag3 Lag2 ]

Decay2

Decay

Integrator

TwoPole

[ APF TwoZero ]

OnePole

[ OneZero ]

Resonz

]

Look in Help/UGens/Filters in the SuperCollider help system to see filter help files and numerous examples.

////////////////////////////////////////////////////////////////////////////////////////////////////

Use LPF, a low-pass filter to subtract high-frequency content from an input source.

(

SynthDef("subtractive", {

Out.ar(

0,

LPF.ar(

Pulse.ar(440, 0.5, 0.1), // the source to be filtered

Line.kr(8000, 660, 6) // control the filter frequency with a line

)

)

}).load(s);

)

Synth("subtractive")

////////////////////////////////////////////////////////////////////////////////////////////////////

RLPF, a resonant low-pass filter, removes high-frequency content and emphasizes the cutoff frequency.

(

SynthDef("passLowFreqs2", {

Out.ar(

0,

RLPF.ar(

Saw.ar([220, 221] + LFNoise0.kr(1, 100, 200), 0.2),

[LFNoise0.kr(4, 600, 2400), LFNoise0.kr(3, 600, 2400)],

0.1

)

)

}).load(s);

)

Synth("passLowFreqs2")

////////////////////////////////////////////////////////////////////////////////////////////////////

Resonz is a very, very, very strong filter. Use it to emphasize a frequency band.

Transform noise into pitch with a sharp cutoff.

(

SynthDef("noiseToPitch", { arg out = 0, mul = 1;

Out.ar(

out,

Resonz.ar(

WhiteNoise.ar(mul),

LFNoise0.kr(4, 110, 660),

[0.005, 0.005]

)

)

}).load(s);

)

(

// activate left and right channels

Synth("noiseToPitch", [\out, 0, \mul, 1]);

Synth("noiseToPitch", [\out, 1, \mul, 1]);

)

////////////////////////////////////////////////////////////////////////////////////////////////////

go to 11_Compound_synthesis