904a vcf
moog904a · filters904A Voltage Controlled Low Pass Filter (slice 2 of the moogafakkin System 55/35 clone — categorized under Ports -> moogafakkin). The classic moogafakkin transistor-LADDER low-pass filter, 24 dB/oct. Cutoff is set by the FIXED CONTROL VOLTAGE (Cutoff) pot, shifted in 2-octave steps by the RANGE switch (1/2/3 = x1/x4/x16), and swept by the summing 1V/oct CONTROL INPUT (cutoff_cv — each volt = one octave, summed per-sample). REGENERATION is the variable Q / internal feedback: at low settings it is a clean low-pass; turned toward max it sharpens into a strong resonant peak and SELF-OSCILLATES into a clean sine VC oscillator at the cutoff frequency (reso_cv modulates it). Signature moogafakkin growl comes from a tanh saturation per ladder stage that also self-limits the resonance so it stays bounded. DSP is own-code, CLEAN-ROOM: a TPT/Zavalishin zero-delay-feedback ladder (stable under audio-rate cutoff modulation) re-derived from the unpatented textbook algorithm plus the Huovilainen tanh-per-loop technique — NOT a port of the LGPLv3 Huovilainen code, the CC-BY-SA musicdsp model, or any moogafakkin schematic (permissive only). The shared moog-ladder-dsp lib it is built on is reused by the 904B (HPF) + 904C (coupler) in later slices. Beige moogafakkin faceplate (the intrinsic always-on look shared by the moogafakkin module family).
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
audio | audio | The signal to be filtered — the audio fed into the ladder. audio signal |
cutoff_cv | cv | Summing 1 V/octave CONTROL INPUT to the cutoff (audio-rate). It adds exponentially onto the CUTOFF knob inside the worklet, so this is the jack for the classic filter sweep — an envelope opens/closes the corner, an LFO wobbles it, a pitch CV makes the cutoff track played notes. ⚠ WHICH QUANTITY tracks 1 V/octave matters here, because the answer differs: as a FILTER it does, measured +0.998 / +1.999 / +3.002 octaves at +1 / +2 / +3 V (the residual is the measurement's own resolution — doubling the knob instead of the jack reproduces it exactly). But once REGENERATION has pushed the filter into SELF-OSCILLATION, the pitch of the sine it emits does NOT: the same +1 / +2 / +3 V move it +0.981 / +1.946 / +2.880 octaves, so it drifts progressively flat and is about a fifth of a semitone short by three volts (#1913, filed for owner ears — the audio is deliberately unchanged). Use it as a filter sweep and it is exact; play it as an oscillator and it will not stay in tune with the rest of the rack. control voltage (CV); modulates cutoff (summed directly (the destination DSP scales it)) |
reso_cv | cv | CONTROL INPUT to REGENERATION (audio-rate, summed per-sample). Modulate the resonance — e.g. an envelope that pushes the filter toward self-oscillation on each note for a chirp or zap. control voltage (CV); modulates regeneration (summed directly (the destination DSP scales it)) |
outputs
| id | cable | what it does |
|---|---|---|
audio | audio | The 24 dB/octave low-passed output. With REGENERATION near maximum and nothing patched in, it emits a clean self-oscillating sine at the cutoff frequency. audio signal |
params
| id | label | range | default | curve |
|---|---|---|---|---|
cutoff | Cutoff | 20..20000Hz | 1000 | log |
range | Range | 1..3 | 2 | discrete |
regeneration | Regen | 0..1 | 0 | linear |
controls
| control | what it does |
|---|---|
| Cutoff | The FIXED CONTROL VOLTAGE pot — where the filter is placed, on a 20 Hz to 20 kHz log taper. Everything above it is attenuated at the four-pole slope; lower it to darken, raise it to open up. CV adds on top of this setting. Defaults to 1 kHz. ⚠ The number on this dial is NOT the frequency the ladder receives: the RANGE switch multiplies it first (×1 / ×4 / ×16), so at the factory settings a dial reading 1 kHz places the filter at 4 kHz. The faceplate prints the delivered figure next to the dial for exactly this reason. |
| Range | RANGE switch (1 / 2 / 3) — shifts the whole cutoff sweep in two-octave steps (×1 / ×4 / ×16), so you can place the CUTOFF pot's travel in the bass, mids, or highs. Defaults to position 2 (the middle range). ⚠ The multiplier is applied BEFORE the 20 kHz ceiling, so the higher positions spend part of the dial pinned against it: at position 2 every CUTOFF setting above 5 kHz is the same filter, and at position 3 everything above 1.25 kHz is — the top 20 % and 40 % of the dial's travel respectively. The delivered-frequency readout stops climbing there, which is the visible sign that further turning is doing nothing. |
| Regen | REGENERATION — the resonance / internal feedback (variable Q). At 0 the filter is flat; turning it up emphasises a peak at the cutoff; past about 0.665 the filter self-oscillates and rings as a sine VCO even with nothing patched in. Defaults to 0 (no resonance). That crossing is a change of KIND rather than of degree — measured on the shipping filter, an unpatched 904A peaks at 4.9e-7 just below it and 1.7e-1 just above — so the faceplate names which side you are on rather than restating the dial. |
source
moog904a.ts on GitHub.