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 TPT / zero-delay-feedback (ZDF) filter with four simultaneous outputs and stable self-oscillation. type_id: svf.

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

Inputs

PortSignalRangeDescription
inAudio±5VAudio input
cutoffUnipolar CV0-10VCutoff frequency (20 Hz–20 kHz, exponential)
resUnipolar CV0-10VResonance (0–1)
fmBipolar CV±5VLinear FM added to cutoff
keytrackV/Oct±5VKeyboard tracking pitch
keytrack_amtUnipolar CV0-10VKeyboard tracking amount (0–1)

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

Resonance sets the ZDF damping factor k = 2 − 2·res: res = 0 gives k = 2 (Q ≈ 0.5), and res → 1 drives k → 0 (near-infinite Q). Integrator states are soft-clipped, so high resonance self-oscillates as a slow-decay sine ring at the cutoff frequency rather than blowing up.

ResonanceCharacter
0.0Flat response
0.5Slight peak
0.9Prominent peak
1.0Self-oscillation (slow-decay ring)

DiodeLadderFilter

Classic 24dB/octave (4-pole) TB-303/Moog-style ladder filter with diode saturation. type_id: diode_ladder.

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

Inputs

PortSignalRangeDescription
inAudio±5VAudio input
cutoffUnipolar CV0-10VCutoff frequency (20 Hz–20 kHz, exponential)
resUnipolar CV0-10VResonance (0–1; feedback k = res·4)
fmBipolar CV±5VLinear FM added to cutoff
keytrackV/Oct±5VKeyboard tracking pitch
keytrack_amtUnipolar CV0-10VKeyboard tracking amount (0–1)
driveUnipolar CV0-10VInput drive (gain 1×–4×)

Outputs

PortSignalDescription
outAudio24 dB/oct main output
pole1Audio6 dB/oct tap
pole2Audio12 dB/oct tap
pole3Audio18 dB/oct tap

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

ParametricEq

Three-band equalizer — low shelf, parametric mid (with Q), high shelf — using cached biquads. Each band spans ±12 dB. type_id: parametric_eq.

let eq = patch.add("eq", ParametricEq::new(44100.0));

Inputs

PortSignalRangeDescription
inAudio±5VAudio input
low_gainBipolar CV±5VLow-shelf gain (±12 dB)
low_freqUnipolar CV0-10VLow-shelf frequency (50–500 Hz)
mid_gainBipolar CV±5VMid peaking gain (±12 dB)
mid_freqUnipolar CV0-10VMid frequency (200 Hz–8 kHz)
mid_qUnipolar CV0-10VMid Q (0.5–10)
high_gainBipolar CV±5VHigh-shelf gain (±12 dB)
high_freqUnipolar CV0-10VHigh-shelf frequency (2–12 kHz)

Outputs

PortSignalDescription
outAudioEqualized output

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_("keytrack"))?;
// Set the amount (0-1) via the `keytrack_amt` input; 1.0 = 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