921a driver

moog921a · modulation

921A Oscillator Driver (moogafakkin System 55/35 clone — categorized under Ports -> moogafakkin). A CONTROL-VOLTAGE PROCESSOR, NOT a sound source: it generates the two control voltages on a bus that drive N slaved 921B oscillators — a frequency CV (freq_bus, V/oct, encoding pitch) and a pulse-width CV (width_bus, 0..1). The FREQUENCY pot is mapped onto V/oct by a two-position frequency-RANGE switch — SEMITONE (a tight 2-octave fine compass) or OCTAVE (a wide 12-octave coarse compass). Summing FREQ + WIDTH CONTROL INPUTS add onto the buses per-sample (freq_cv is a V/oct pitch cable that sums 1:1 onto freq_bus; width_cv sums onto width_bus). NO audio inputs and NO audio outputs — the outputs are CV cables that feed a 921B's freq_bus / width_bus. DSP is own-code: pure CV math (exponential frequency mapping + width passthrough), 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). Ships together with the 921B (the 921A is meaningless without a slaved 921B).

A clean-room recreation of the Moog 921A Oscillator Driver — the master half of the System 55/35 two-part oscillator. It is NOT a sound source: it makes no audio of its own. Instead it generates the two CONTROL VOLTAGES — a 1V/oct pitch bus and a pulse-width bus — that drive one or more slaved 921B oscillators, so a whole bank of 921Bs tracks one set of FREQUENCY/RANGE/WIDTH knobs (and one pitch CV) in perfect unison. Mental model: it is the pitch+width 'brain' you patch into every 921B's FREQ BUS and WIDTH BUS so they play together; tune here, hear it on the 921Bs. THE FREQUENCY DIAL IS DIMENSIONLESS AND THE RANGE SWITCH IS ITS SCALE: the pot runs -1..+1 and the switch decides whether that span is ONE octave (SEMI) or SIX (OCT), so the same dial position is two different pitches. At +0.50 a slaved 921B sitting at its own defaults sings 370.00 Hz (F#4) in SEMI and 2093.01 Hz (C7) in OCT — a factor of 5.66 from a two-state switch — while the whole dial reaches 130.81..523.25 Hz in SEMI and 4.09 Hz..16.74 kHz in OCT. At the shipped FREQUENCY of 0 both positions are 0 V and the switch does nothing at all, which is why the faceplate prints the compass rather than the switch position. The FREQ CONTROL INPUT is summed AFTER that multiply, so a cable is 1V/oct in BOTH positions while the pot is one octave or six: the jack and the knob beside it have different authorities, six to one. The faceplate's `bus` and `span` readouts are those two facts; `duty` is what a slaved 921B's rectangular tap actually renders from the width bus.

the faceplate

921a driverfreq_cvpitchwidth_cvcvfreq_buscvwidth_buscvaudiocvgatepitch
2 inputs · 2 outputs · 3 params

inputs

idcablewhat it does
freq_cvpitch1V/oct pitch CV summed onto the FREQ knob (and the RANGE compass) per sample, then sent out on the freq bus — patch a keyboard or sequencer here to play every slaved 921B at once.
V/oct pitch CV; modulates frequency (summed directly (the destination DSP scales it))
width_cvcvPulse-width CV summed onto the WIDTH knob per sample and passed through to the width bus, so an LFO here animates the pulse width of every 921B driven by this module simultaneously (ganged PWM). At the shipped WIDTH of 0.5 a full-scale +/-1 modulator drives the sum past both ends of the 0..1 clamp, and the bottom of its swing lands on the 921B's 'no cable' normal rather than on a narrow pulse — so a full-scale LFO here is NOT a monotonic duty sweep. See issue #1791.
control voltage (CV); modulates width (summed directly (the destination DSP scales it))

outputs

idcablewhat it does
freq_buscvThe 1V/oct frequency control voltage. Patch it into each 921B's FREQ BUS input so they all follow this module's pitch (knob + freq_cv).
control voltage (CV)
width_buscvThe 0..1 pulse-width control voltage. Patch it into each 921B's WIDTH BUS input so their rectangular outputs share one width (knob + width_cv, clamped to 0..1). Note that a 921B reads any value at or below 0.02 on this cable as 'nothing patched' and substitutes a 50% square, so the bottom of the range does not reach a narrow pulse — see the WIDTH control note and issue #1791.
control voltage (CV)

params

idlabelrangedefaultcurve
frequencyFreq-1..10linear
freqRangeRange1..21discrete
widthWidth0..10.5linear

controls

controlwhat it does
RangeRANGE switch: 1 = SEMITONE (the FREQUENCY pot spans a narrow ~2-octave window for fine tuning) / 2 = OCTAVE (the pot spans a wide ~12-octave compass for big sweeps). It is a SCALE for the FREQUENCY pot and does nothing on its own — at the shipped FREQUENCY of 0 both positions put 0 V on the bus, so flipping it on a freshly spawned module is bit-exactly inert. It does NOT scale the FREQ CONTROL INPUT, which is summed after the multiply and stays 1V/oct in both positions.
FreqThe FREQUENCY pot, a normalized -1..1 that the RANGE switch maps onto the pitch bus — the coarse tuning for every 921B this driver feeds. It carries no unit of its own: the volts it puts on the bus are this number times the RANGE compass (1 octave in SEMI, 6 in OCT), so +0.50 is +0.5 V or +3.0 V depending on the switch. The faceplate's `bus` readout is that product; the dial alone cannot print it.
WidthPulse width sent on the width bus, driving the rectangular output of every 921B that reads this bus (the sine, triangle and saw taps are untouched by it). WHAT A SLAVED 921B DOES WITH IT IS NOT A STRAIGHT 0..1: it treats any bus value at or below 0.02 as 'no cable' and substitutes a 50% square, then clamps the rest to a 2%..98% duty. So the declared MINIMUM of this knob produces the MIDPOINT result — measured 49.85% duty at the rect tap, the same as leaving the cable unpatched — the bottom of the travel is a flat plateau ending in a jump to 2%, and everything above 0.98 is dead. See issue #1791; the faceplate's `duty` readout prints the real answer and says `norm` when the bus is being ignored.

source

moog921a.ts on GitHub.

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