filter
filter · filtersMulti-mode resonant VCF — three 2-pole (12 dB/oct) Faust sections running in parallel with a MODE switch picking one: 0 = LOWPASS, 1 = HIGHPASS, 2 = BANDPASS (that order, not LP/BP/HP). CUTOFF 20 Hz-20 kHz log; RES 0..0.99 mapped to Q = res x 20 + 0.7, so maximum resonance peaks ~26 dB over a unity passband — it rings hard but never self-oscillates. Two CV jacks, each with its own attenuverter knob: cutoff CV is exponential (+/-1 = +/-5 octaves around the knob at full depth, clamped to the 20 Hz-20 kHz window), res CV is additive on the 0..0.99 scale. Both CV values pass the DSP's ~7 Hz one-pole smoother, so this is an envelope/LFO modulation input, not an audio-rate FM input.
the faceplate
3 inputs · 1 outputs · 5 params
inputs
| id | cable | what it does |
|---|---|---|
audio | audio | The signal to be filtered — typically an oscillator, a drum voice, or a submix. It is fed to all three filter sections in parallel; you hear whichever one the mode control selects. audio signal |
cutoff | cv | Cutoff CV. The value is scaled (and, at negative settings, inverted) by the Cutoff CV knob, then applied EXPONENTIALLY by the DSP: a full-scale +1 at depth +1 lifts the corner five octaves above the knob, −1 drops it five octaves below, and the result is clamped to the 20 Hz–20 kHz window (so from the 1000 Hz default the upward reach is really about 4.3 octaves before it hits the ceiling). Set depth to 0.2 for a one-octave envelope sweep. The mapping lives in the Faust source, so no external scaling stage is needed — but note the value is smoothed by a ~7 Hz one-pole, which is what keeps stepped sequencer CV click-free and what makes this a modulation input rather than an FM input. control voltage (CV); modulates cutoff (summed directly (the destination DSP scales it)) |
res | cv | Resonance CV. Scaled (and optionally inverted) by the Res CV knob, then ADDED to the resonance value on its own 0..0.99 scale and clamped there — so a positive CV opens the peak up and a negative one closes it back toward flat, and no amount of CV can push past the 0.99 maximum. Like the cutoff path it is smoothed at ~7 Hz, so it tracks envelopes and LFOs, not audio. control voltage (CV) |
outputs
| id | cable | what it does |
|---|---|---|
audio | audio | The filtered signal for the selected mode. The passband sits at unity gain, so a low-resonance lowpass is roughly level with the input while a high-resonance setting adds a peak of up to about 26 dB at the corner — watch the level going into the next stage. Bandpass is the exception: its whole output scales with Q, so at low resonance it is both broad and quiet, and it gets louder and narrower as you turn resonance up. audio signal |
params
| id | label | range | default | curve |
|---|---|---|---|---|
cutoff | Cutoff | 20..20000Hz | 1000 | log |
resonance | Res | 0..0.99 | 0.1 | linear |
mode | Mode | 0..2 | 0 | discrete |
cutoff_cv_amt | Cutoff CV | -1..1 | 1 | linear |
res_cv_amt | Res CV | -1..1 | 1 | linear |
controls
| control | what it does |
|---|---|
| Cutoff | The corner (lowpass/highpass) or centre (bandpass) frequency, 20 Hz to 20 kHz on a log taper so the musically-useful range spreads evenly across the travel. This is the knob you sweep; everything else on the module exists to shape what that sweep does. |
| Cutoff CV | Attenuverter for the cutoff CV jack: how far, and in which direction, a patched modulator throws the sweep. At +1 a full-scale CV covers the whole ±5-octave range; at 0.2 it is about ±1 octave; at 0 the jack is muted; negative values invert the modulator, so a rising envelope closes the filter instead of opening it. This is the trim you reach for straight after patching an envelope in — without it a plain 0..1 envelope asks for five octaves and simply pins the cutoff at the ceiling. |
| Mode | The filter character, a three-position switch: 0 = LOWPASS (keeps lows, rolls off above cutoff at 12 dB/octave — the default subtractive-synthesis voice), 1 = HIGHPASS (keeps highs, thins out bass and rumble; it is built as input-minus-lowpass, so its deep stopband tapers at 6 dB/octave rather than 12), 2 = BANDPASS (keeps only the region around cutoff, 6 dB/octave skirts on both sides — a narrow, nasal, telephone-ish slice that tightens as resonance rises). All three sections run continuously and the switch just picks one, so a change lands instantly with no crossfade. |
| Res CV | Attenuverter for the res CV jack, same idea on the resonance scale: +1 lets a full-scale CV cover the entire 0..0.99 range, smaller values give a subtler swell, 0 mutes the jack, and negative values invert so a rising modulator damps the peak instead of sharpening it. Pair a slow LFO here with a little cutoff modulation for the classic sweeping-formant motion. |
| Res | Emphasis at the cutoff frequency, 0 to 0.99, mapped internally to Q = res × 20 + 0.7. At 0 the response is the plain gentle 12 dB/octave slope; turning it up narrows and lifts the peak at the corner to about +26 dB at maximum, which is where the classic vocal/formant quality and the squelchy sweep come from. Two things worth knowing: the passband does NOT drop as you raise it (unlike a ladder filter), so high resonance is a real level increase into the next stage; and this design does not self-oscillate — at maximum it rings hard but always needs an input signal. |
source
filter.ts on GitHub.