Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Filters

Filters shape the harmonic content of sound by attenuating certain frequencies while passing others.

SVF (State-Variable Filter)

A versatile 12dB/octave filter with multiple simultaneous outputs.

let vcf = patch.add("vcf", Svf::new(44100.0));

Inputs

PortSignalRangeDescription
inAudio±5VAudio input
cutoffUnipolar CV0-10VCutoff frequency
resonanceUnipolar CV0-10VResonance/Q (0-1)
fmBipolar CV±5VFrequency modulation
trackingV/Oct±10VKeyboard tracking

Outputs

PortSignalDescription
lpAudioLowpass (removes highs)
bpAudioBandpass (passes band)
hpAudioHighpass (removes lows)
notchAudioNotch (removes band)

Transfer Functions

Lowpass: $$H_{LP}(s) = \frac{\omega_c^2}{s^2 + \frac{\omega_c}{Q}s + \omega_c^2}$$

Highpass: $$H_{HP}(s) = \frac{s^2}{s^2 + \frac{\omega_c}{Q}s + \omega_c^2}$$

Bandpass: $$H_{BP}(s) = \frac{\frac{\omega_c}{Q}s}{s^2 + \frac{\omega_c}{Q}s + \omega_c^2}$$

Cutoff Mapping

CVFrequency
0V20 Hz
5V~630 Hz
10V20,000 Hz

Resonance Behavior

ResonanceCharacter
0.0Flat response
0.5Slight peak
0.9Prominent peak
0.95+Self-oscillation

At high resonance, the filter produces a sine wave at the cutoff frequency.


DiodeLadderFilter

Classic 24dB/octave ladder filter with diode saturation modeling.

let ladder = patch.add("filter", DiodeLadderFilter::new(44100.0));

Inputs

PortSignalDescription
inAudioAudio input
cutoffUnipolar CVCutoff frequency
resonanceUnipolar CVResonance (0-1)
driveUnipolar CVSaturation amount

Output

PortSignalDescription
outAudioFiltered output

Characteristics

  • 24dB/octave slope (4-pole)
  • Diode saturation per stage
  • Warm, slightly dirty character
  • Resonance with bass loss (like original Moog)

The Ladder Topology

flowchart LR
    IN[Input] --> S1[Stage 1<br/>-6dB/oct]
    S1 --> S2[Stage 2<br/>-6dB/oct]
    S2 --> S3[Stage 3<br/>-6dB/oct]
    S3 --> S4[Stage 4<br/>-6dB/oct]
    S4 --> OUT[Output<br/>-24dB/oct]
    S4 -->|Resonance| IN

Filter Modulation Techniques

Envelope → Filter

Classic brightness sweep:

patch.connect(env.out("env"), vcf.in_("cutoff"))?;
// Fast decay = plucky, slow decay = pad

LFO → Filter

Rhythmic movement:

patch.connect(lfo.out("sin"), vcf.in_("fm"))?;

Keyboard Tracking

Higher notes = higher cutoff:

patch.connect(pitch.out("out"), vcf.in_("tracking"))?;
// 100% tracking: cutoff follows pitch

Audio-Rate FM

Metallic/vocal effects:

// Use oscillator as modulation source
patch.connect(vco2.out("sin"), vcf.in_("fm"))?;

Response Curves

dB
 0 ├──────────────┐
   │               ╲
-6 ├                ╲
   │                 ╲ LP
-12├                  ╲
   │                   ╲
-24├                    ╲
   └────────────────────────
           fc          Frequency

Common Settings

SoundCutoffResonanceNotes
Warm bassLowLowFull body
Acid squelchSweptHighTB-303 style
Vocal formantMidHighVowel-like
Bright leadHighMediumCutting
UnderwaterVery lowLowMuffled