attenumix

attenumix · utilities

The simple mixer — a 4-channel attenuating mixer with per-channel direct outs and a master gain. Each channel's level is knob + CV summed and clamped to 0..1 (attenuators only attenuate, never boost), giving a per-channel direct out; all four sum into a master (0..2) with a tanh soft-clip so pushing the master past unity stays musical. Compared to VEILS (same quad-VCA-plus-mix topology) ATTENUMIX has no per-channel boost and no linear/exponential toggle — it is the no-surprises "the mixer" where every knob does exactly what it says. CV inputs are passthrough-by-design so a ±1 V LFO at knob=0 sweeps a channel's full open range.

The simple, no-surprises mixer: four channels, each with its own attenuator knob (0..1) and a CV input that sums into that knob, plus a per-channel direct out and one summed MIX output. Per channel out = in · clamp(knob + cv, 0, 1) — the attenuators only ATTENUATE, they never boost or invert (a negative knob+CV mutes, not phase-flips). The four channels sum and pass through a MASTER gain, then a tanh soft-clip: out = tanh(sum · master). Master goes up to ×2, so pushing past unity drives the sum into the tanh for warm saturation instead of a hard digital clip. Compared with VEILS (same quad-VCA-plus-mix topology) ATTENUMIX is the toggle-free 'just the mixer' version — the boost lives on the master, not per channel. There is a DSP worklet for the per-sample math. EACH CHANNEL TAKES AUDIO OR CV: the four channel inputs accept audio, CV, pitch and gate cables, and each per-channel DIRECT OUT emits the cable type of its own channel input — so an attenuated control voltage stays a control voltage on the way out and patches straight into a CV jack, with the attenuator actually scaling it. Patch the channel input FIRST: an empty channel has no signal to take its type from, so its direct out still reads as audio and a CV-only input will refuse it until something is feeding that channel. The MIX output is the exception and stays AUDIO whatever the channels carry: it sums four channels that may be different classes of signal and then soft-clips them through tanh, so the summed result is not a faithful voltage. Mix control voltages on the direct outs, not on the mix bus.

the faceplate

attenumixin1audioin2audioin3audioin4audiocv1cvcv2cvcv3cvcv4cvout1audioout2audioout3audioout4audiomixaudioaudiocvgatepitch
8 inputs · 5 outputs · 5 params

inputs

idcablewhat it does
in1audioChannel 1 signal input — audio, or a CV / pitch / gate cable. Scaled by clamp(Att1 + CV1, 0, 1) into both the channel-1 direct out and the summed mix.
audio signal; also accepts: control voltage (CV), V/oct pitch CV, gate / trigger
in2audioChannel 2 signal input — audio or the CV family. Scaled by clamp(Att2 + CV2, 0, 1).
audio signal; also accepts: control voltage (CV), V/oct pitch CV, gate / trigger
in3audioChannel 3 signal input — audio or the CV family. Scaled by clamp(Att3 + CV3, 0, 1).
audio signal; also accepts: control voltage (CV), V/oct pitch CV, gate / trigger
in4audioChannel 4 signal input — audio or the CV family. Scaled by clamp(Att4 + CV4, 0, 1).
audio signal; also accepts: control voltage (CV), V/oct pitch CV, gate / trigger
cv1cvCV that sums into the channel-1 attenuator (knob + CV, clamped 0..1). Passed through raw (no scaling), so a ±1 LFO at knob=0 already sweeps the channel full range — the negative half is rejected by the clamp, the positive half fully opens the channel.
control voltage (CV)
cv2cvCV summed into the channel-2 attenuator (raw, knob + CV clamped 0..1).
control voltage (CV)
cv3cvCV summed into the channel-3 attenuator (raw, knob + CV clamped 0..1).
control voltage (CV)
cv4cvCV summed into the channel-4 attenuator (raw, knob + CV clamped 0..1).
control voltage (CV)

outputs

idcablewhat it does
out1audioChannel 1 direct out — the post-attenuator signal (in1 · att1) BEFORE the summing bus and master, for splitting a channel off on its own. Exactly linear and DC-coupled, and type-transparent: it emits the cable type patched into IN 1, so a CV in makes this a CV out that patches into any CV input. With nothing patched into IN 1 it falls back to audio and a CV-only input will refuse it — patch the channel first. This, not the mix bus, is the module's CV path.
audio signal; type mirrors whatever is patched into in1
out2audioChannel 2 direct out (in2 · att2), pre-mix. Emits the cable type patched into IN 2.
audio signal; type mirrors whatever is patched into in2
out3audioChannel 3 direct out (in3 · att3), pre-mix. Emits the cable type patched into IN 3.
audio signal; type mirrors whatever is patched into in3
out4audioChannel 4 direct out (in4 · att4), pre-mix. Emits the cable type patched into IN 4.
audio signal; type mirrors whatever is patched into in4
mixaudioThe summing bus: tanh((out1 + out2 + out3 + out4) · master). The four attenuated channels summed, scaled by the MASTER knob, then soft-clipped — driving master above 1 recruits the tanh for warm saturation. Always an AUDIO output, whatever the channels carry: it mixes four inputs that may be different classes of signal, and the tanh bends whatever comes out of it (even at unity a ±0.4 CV leaves as ±0.38), so it cannot honestly claim to be a control voltage. Sum control voltages on the direct outs instead.
audio signal

params

idlabelrangedefaultcurve
att1Att10..10linear
att2Att20..10linear
att3Att30..10linear
att4Att40..10linear
masterMaster0..21linear

controls

controlwhat it does
Att1Channel 1 attenuator, linear 0..1 (default 0 = muted). Sets the channel's level; sums with CV1 and is clamped to 0..1, so it only ever cuts — there is no boost or polarity flip here.
Att2Channel 2 attenuator, linear 0..1 (default 0 = muted). Sums with CV2, clamped 0..1.
Att3Channel 3 attenuator, linear 0..1 (default 0 = muted). Sums with CV3, clamped 0..1.
Att4Channel 4 attenuator, linear 0..1 (default 0 = muted). Sums with CV4, clamped 0..1.
MasterOutput gain on the summed bus, linear 0..2 (default 1.0 = unity). Below 1 trims the whole mix down; above 1 boosts the sum INTO the tanh soft-clip for warm saturation rather than a hard clip. Applies only to the MIX output, not the per-channel direct outs.

source

attenumix.ts on GitHub.

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