904a vcf

moog904a · filters

904A 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).

A clean-room recreation of the Moog 904A Voltage Controlled Low Pass Filter — the iconic 24 dB/octave transistor-ladder LPF at the heart of the Moog sound. It rolls off everything above the cutoff at a steep four-pole slope, warming and darkening the signal. The CUTOFF knob sets the corner, the RANGE switch shifts that corner in two-octave steps, and REGENERATION is the resonance (internal feedback): turn it up to emphasise the band right at the cutoff, and near maximum the filter self-oscillates into a clean sine — a playable voltage-controlled oscillator in its own right. A summing 1 V/octave control input sweeps the cutoff (patch an envelope or LFO here for the classic filter sweep) and a second CV input modulates the regeneration. The ladder core is the textbook zero-delay-feedback algorithm with a tanh per loop for the analog drive, not a port of any Moog schematic.

the faceplate

904a vcfaudioaudiocutoff_cvcvreso_cvcvaudioaudioaudiocvgatepitch
3 inputs · 1 outputs · 3 params

inputs

idcablewhat it does
audioaudioThe signal to be filtered — the audio fed into the ladder.
audio signal
cutoff_cvcvSumming 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_cvcvCONTROL 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

idcablewhat it does
audioaudioThe 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

idlabelrangedefaultcurve
cutoffCutoff20..20000Hz1000log
rangeRange1..32discrete
regenerationRegen0..10linear

controls

controlwhat it does
CutoffThe 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.
RangeRANGE 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.
RegenREGENERATION — 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.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo