Sixty filter classes, from a one-pole smoother to full virtual-analogue ladder models. This page is a map: which family to reach for, and what each one is actually good at.
1. Using a filter
Every filter is a UGen that takes an input signal and returns a modified one, so the chuck operator is all you need:
"A sawtooth through a Moog-style low-pass filter"
voice := SawOsc new => MoogVcf new.
dsp := voice stereo asDsp.
dsp init.
dsp start.
dsp displayUI.
dsp stop.
Because a filter's cutoff is an ordinary setter, it accepts a number, another UGen or a symbol — which is how filter envelopes and auto-wah effects are built. See Envelopes & Modulation §4.3.
1.1 The shared setters
Filter controls come from the PhFilterSetter trait, so they are consistent
across the family. Several are synonyms, present because different FAUST modules name the
same thing differently:
| Setter | Meaning |
|---|---|
| freq: / frequency: / fr: | Corner or centre frequency, in hertz |
| cutoff: / cutoffFreq: | Cutoff frequency — the same idea, different naming |
| q: | Quality factor: resonance sharpness |
| res: | Resonance, where the module expresses it as an amount rather than a Q |
| gain: | Output gain, or band gain on the EQ sections |
| aN: | Filter coefficient, on the primitive sections |
traceAllParams after init, and read off the names it actually
exposes — see Parameters & Control §3.
2. Virtual analogue: the MKO family
MKOFilter and its eleven subclasses are digital models of famous analogue filter
circuits — the "MKO" being Moog, Korg and Oberheim. These are the filters to reach for when
you want character rather than neutrality: they distort pleasantly when driven, and their
resonance behaves the way players expect.
| Class | Models | Character |
|---|---|---|
| MoogVcf | Moog transistor ladder | The classic warm low pass; the default choice |
| MoogLadder | Moog ladder, four pole | 24 dB/octave, strong resonance |
| MoogHalfLadder | Moog ladder, two pole | 12 dB/octave, gentler slope |
| DiodeLadder | Diode ladder (TB-303 lineage) | Acidic, squelchy at high resonance |
| Korg35LPF | Korg MS-10/MS-20 low pass | Aggressive, screams when resonant |
| Korg35HPF | Korg MS-10/MS-20 high pass | Thin and biting |
| Oberheim | Oberheim SEM, multimode | Smooth, all outputs at once |
| OberheimLPF | SEM low pass | Creamy, less resonant bite than Moog |
| OberheimHPF | SEM high pass | Clean high pass |
| OberheimBPF | SEM band pass | Vocal, useful for formant-like sweeps |
| OberheimBSF | SEM band stop | Notch; phaser-like when swept |
"An acid line wants the diode ladder and a lot of resonance"
acid := SawOsc new => (DiodeLadder new cutoff: 600; q: 0.9).
q: values can push a signal
well past full scale even when the input was quiet. Lower the input, or put a limiter after
the filter — see Effects, Reverbs & Dynamics.
3. State-variable filters
PhStateVariableFilter and its five subclasses are clean, well-behaved and
efficient. Where the MKO family gives colour, these give control: predictable slopes, stable
behaviour under fast modulation, and every response from the same topology.
| Class | Response |
|---|---|
| PhSvfLp | Low pass |
| PhSvfHp | High pass |
| PhSvfBp | Band pass |
| PhSvfNotch | Notch / band reject |
| PhSvfPeak | Peaking |
4. Resonators
ResonatorFilter and its subclasses are tuned, narrow filters — closer to a
struck bar than to a tone control. At high resonance they ring at their centre frequency,
which makes them the basis of modal synthesis.
| Class | Response |
|---|---|
| PhResonLp | Resonant low pass |
| PhResonHp | Resonant high pass |
| PhResonBp | Resonant band pass — the classic ringing filter |
The closely related PhModeFilter — filed under physical models rather than
filters — is a resonator parameterised by decay time (t60:) instead of Q, which
is far more musical when you are modelling a physical object. See
Synthesis §4.
5. Butterworth low and high pass
ButterworthLPHP provides Lowpass and HighPass: flat in
the passband, no resonance, no colour. These are the filters you use when you want to
remove something rather than shape it — cleaning up rumble below an instrument, or
taking hiss off the top.
"Remove everything below 80 Hz before it reaches the mix"
cleaned := source => (HighPass new freq: 80).
6. Shelves and parametric EQ
Equalisation sections boost or cut a region without removing it entirely — the tool for balance rather than for sound design.
| Class | Use |
|---|---|
| PhLowShelf | Boost or cut everything below a corner frequency |
| PhHighShelf | Boost or cut everything above a corner frequency |
| PhPeakEq | Parametric peaking band |
| PhPeakEqCq | Constant-Q peaking band — bandwidth stays proportional as you sweep |
| PhPeakEqRm | Peaking band specified by frequency limits rather than Q |
PhPeakEqCq keeps the bandwidth proportional to the frequency, so
a sweep sounds even across the spectrum.
7. Comb and allpass filters
CombFilters and its eleven subclasses delay a signal and mix it back with
itself, producing a comb-shaped response — regularly spaced peaks and notches. They are the
building blocks of reverbs, flangers, choruses and Karplus–Strong strings.
| Class | Type |
|---|---|
| Ff_Comb, FfCombFilter, Ff_FComb | Feed-forward comb — notches, no ringing |
| Fb_Comb, FbCombFilter, Fb_FComb | Feedback comb — resonant peaks, rings |
| FfbCombFilter | Combined feed-forward and feedback |
| Allpass_Comb | Allpass comb — flat magnitude, altered phase |
| Allpass_FComb, Allpass_FComb1a, Allpass_FComb5 | Fractional-delay allpass variants |
The setters come from PhCombFilterSetter: del: and
intDel: for delay length, b0:, b: and
bM: for the coefficients.
8. One-pole, one-zero and building blocks
Beneath the named filters are the primitive sections, useful when you are building a filter rather than using one:
| Class | Role |
|---|---|
| PhPole | One-pole section — the simplest low pass |
| PhZero | One-zero section |
| PhOneZero | One-zero with a settable coefficient |
| PhIIR | General infinite impulse response filter |
| PhLpTau, PhLpT19, PhLpT60 | Low pass specified by time constant rather than frequency |
| PhLptN | Nth-order low pass |
| PhAvgRect, PhAvgTau, PhAvgT19, PhAvgT60 | Averaging filters — envelope following and level detection |
Tau, T19 and T60 variants are specified by how
long they take to settle rather than by a corner frequency. That is the natural way to think
about a smoother or an envelope follower, and it is why the same naming appears on the
compressors.
9. Utility filters
| Class | Role |
|---|---|
| DcBlocker, DcBlockerAt, PhDcBlockerAt | Remove DC offset — worth adding after any waveshaper or asymmetric process |
| Integrator, PhIntegrator | Integrate a signal over time |
DcBlocker at the end of the chain costs
almost nothing and prevents the problem.
10. Choosing a filter
| You want | Reach for |
|---|---|
| A classic synth sweep | MoogVcf, or DiodeLadder for acid |
| Fast modulation without artefacts | The PhSvf family |
| To remove rumble or hiss | HighPass, Lowpass |
| To rebalance a mix | PhPeakEqCq, PhLowShelf, PhHighShelf |
| Something that rings like an object | PhResonBp, PhModeFilter |
| Flanging, chorus, reverb ingredients | The comb and allpass family |
| Level detection or smoothing | PhAvgT60, PhLpT60, smoo |
12. Troubleshooting
The filter distorts as soon as I raise resonance
Resonant gain is pushing the signal past full scale. Lower the input level — §2.
cutoff: is not understood by my filter
That module names it differently. Try freq: or fr:, and confirm
with traceAllParams — §1.1.
Sweeping the cutoff produces zipper noise
The control is stepping. Add smoo to the control signal — see
Envelopes §5.
A fast envelope on the cutoff makes the filter squeal or blow up
Some analogue models are unstable under very fast modulation. Move to the state-variable family — §3.
My patch thumps when it starts, and the meters sit off-centre
DC offset. Add a DcBlocker at the end of the chain — §9.
The comb filter does nothing audible
If it is an allpass, that is expected — allpass filters change phase, not magnitude. §7.