921 vco
moog921Vco · sources921 voltage-controlled oscillator (first module of the moogafakkin System 55/35 clone — categorized under Ports -> moogafakkin). Faithful to the original 921: ONE oscillator core presents FOUR simultaneous waveform jacks — sine, triangle, sawtooth, and rectangular with variable pulse width — all phase-coherent off the shared core. Pitch input is exponential 1V/oct (0V = C4); a dedicated LINEAR frequency-control input (lin_fm, scaled by the Lin FM depth) adds +/-Hz rather than octaves — it is one-sided in practice, because the core clamps at a positive 0.01 Hz floor, so a large negative excursion parks the oscillator instead of driving it through zero. A sync input drives the three-position SOFT / OFF / HARD sync switch for classic sync timbres. RANGE sets the coarse octave (+/-5 oct) and FREQ the fine tune (+/-12 st): together those two dials span 12 octaves, 4.09 Hz to 16.74 kHz, and both read 0 at the factory settings where it sings C4. WIDTH sets the rectangular duty cycle (with audio-rate width_cv) and is a pure timbre control — the tap level does not change across its span; LEVEL is the output gain on all four taps. The four jacks are NOT level-matched: at one LEVEL setting they sit within 4.8 dB of each other, rectangular loudest and sawtooth quietest. DSP is own-code: a clean-room polyBLEP/polyBLAMP band-limited oscillator (not a port of any moogafakkin schematic or copyleft source - permissive only). Beige moogafakkin faceplate (the intrinsic always-on look shared by the moogafakkin module family).
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
pitch | pitch | 1V/oct exponential pitch CV: 0 V plays C4 and every +1.0 raises the oscillator one octave. Patch a keyboard, sequencer, or the 921A driver bus here to play it; it sums on top of the RANGE + FREQ knobs. V/oct pitch CV |
lin_fm | audio | Audio-rate LINEAR frequency modulation input — adds to the frequency in Hz (not exponentially), so the modulation depth stays constant in pitch terms across the keyboard rather than widening with pitch. Its depth is set by the LIN FM knob, and at the shipped depth of 0 this jack is bit-exactly silent: patching it changes nothing at all until you raise LIN FM. At full depth a full-scale input is worth ±2000 Hz. Patch another oscillator here for clangorous FM/bell timbres. audio signal |
sync | audio | External sync source: each rising edge restarts the oscillator's phase to lock it to the incoming signal, per the SYNC switch — patch a second oscillator here and sweep this one's pitch for the classic hard-sync sweep. At the shipped SYNC setting of OFF this jack is bit-exactly silent, so it does nothing until you move the switch. audio signal |
width_cv | cv | Pulse-width CV: summed onto the WIDTH knob per sample so an LFO here animates the rectangular output's duty cycle (pulse-width modulation). It only affects the rectangular tap; the sine/triangle/saw stay fixed. control voltage (CV); modulates width (summed directly (the destination DSP scales it)) |
octave | cv | CV that displaces the RANGE knob in octaves (coarse pitch); a bipolar LFO/envelope here transposes the oscillator by whole octaves around the knob setting. control voltage (CV); modulates octave (additive offset — ±1 CV sweeps the full range, centered on the knob) |
tune | cv | CV that displaces the FREQ fine knob in semitones; use it for subtle vibrato or fine detune layered on top of the 1V/oct pitch. control voltage (CV); modulates tune (additive offset — ±1 CV sweeps the full range, centered on the knob) |
linFmAmount | cv | CV that displaces the LIN FM depth knob, so you can modulate how much linear FM the lin_fm input applies (e.g. open the FM with an envelope for a percussive attack). control voltage (CV); modulates linFmAmount (additive offset — ±1 CV sweeps the full range, centered on the knob) |
level | cv | CV that displaces the output LEVEL, acting as a built-in VCA on every waveform tap — patch an envelope here to shape the oscillator's amplitude without an external VCA. control voltage (CV); modulates level (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
sine | audio | The pure sine tap — the fundamental with no harmonics. Same pitch as the other three taps, but NOT the same level: measured at one LEVEL setting the four jacks sit −0.044 dB (rectangular), −3.011 dB (sine), −4.771 dB (triangle) and −4.834 dB (sawtooth), so swapping which tap you patch is worth up to 4.8 dB and you may need to re-trim downstream. audio signal |
triangle | audio | The triangle tap — a soft, hollow tone with only odd harmonics rolling off steeply (mellower than the saw). The quietest tap but one: about 4.7 dB below the rectangular jack at the same LEVEL. audio signal |
sawtooth | audio | The band-limited sawtooth tap — the brightest, fullest waveform (all harmonics), the staple for subtractive bass and leads. It is the QUIETEST of the four jacks, about 4.8 dB below the rectangular one at the same LEVEL. audio signal |
rectangular | audio | The rectangular / pulse tap — its duty cycle is set by the WIDTH knob (and width_cv); a 50% square is hollow, off-square pulses get nasal and thin, and sweeping the width is pulse-width modulation. It is the LOUDEST of the four jacks, and its level does not change with WIDTH — a 2% sliver and a 50% square measure the same RMS, so WIDTH is a pure timbre control. audio signal |
params
| id | label | range | default | curve |
|---|---|---|---|---|
octave | Range | -5..5oct | 0 | linear |
tune | Freq | -12..12st | 0 | linear |
width | Width | 0.02..0.98 | 0.5 | linear |
linFmAmount | Lin FM | -1..1 | 0 | linear |
sync | Sync | -1..1 | 0 | discrete |
level | Level | 0..2 | 1 | linear |
controls
| control | what it does |
|---|---|
| Level | Output gain on every waveform tap, 0 to 2 (1 = unity). Acts as the oscillator's own VCA; the level CV input adds on top. |
| Lin FM | How much the LINEAR FM input bends the pitch, ±1 — at the shipped 0 the lin_fm jack is bit-exactly silent; raise it for FM/bell timbres. Full depth is worth ±2000 Hz against a full-scale input. Negative depths do not invert through zero: the core clamps at a positive 0.01 Hz floor, so a large negative excursion parks the oscillator instead. |
| Range | Coarse pitch in whole octaves (RANGE), -5 to +5 around the patched 1V/oct pitch. Together with FREQ it spans 12 octaves — 4.09 Hz to 16.74 kHz — and neither dial prints that: both read 0 at the factory settings, where the oscillator sings C4. The octave CV input adds on top of this. |
| Sync | SYNC mode switch, a three-position centre-off switch rather than a dial: SOFT, OFF (shipped) and HARD. HARD resets the phase to 0 on every rising edge of the sync input. SOFT resets it only when the phase is already past the half-cycle — which is a conditional version of the same reset, not a gentler differently-shaped one, and on many slave pitches it converges to exactly what HARD produces (#1883). At OFF the sync jack is bit-exactly silent. The DSP compares against ±0.5, so there is nothing between the three detents. |
| Freq | Fine pitch trim in semitones (FREQ), ±12 (one octave each way) for tuning the oscillator against others or detuning for thickness. It ADDS to RANGE, so the two together reach a full octave beyond either one alone. |
| Width | Duty cycle of the rectangular tap, 2% to 98% (0.5 = a 50% square). Only the rectangular output responds; sweep it (or modulate with width_cv) for pulse-width modulation. It is a pure timbre control — the tap's level does not change across the whole span. NOTE the width_cv jack carries more authority than the knob's span can absorb (a ±1 swing against a 0.96-wide range, 2.08x), so a full-scale LFO there spends about 68% of every cycle pinned at 2% or 98% rather than sweeping; attenuate it for smooth PWM. |
source
moog921-vco.ts on GitHub.