stereovca
stereovca · utilitiesStereo VCA + ring modulator. Per-channel multiply: out_l = in_l * (strength_l + offset) * level; out_r = in_r * (strength_r + offset) * level. The same math behaves as VCA gain control when strength is slow (CV / LFO / envelope) and as ring modulation when strength is audio-rate — no mode toggle, the perceptual difference emerges from signal content. INDEPENDENT normalling: if in_r is unpatched it copies in_l (mono → stereo); if strength_r is unpatched it copies strength_l (one strength drives both VCAs). The two halves normal independently, so true-stereo audio + mono strength works, as does mono audio + per-side strength. Audio carriers (in_l/in_r) declare cable type `audio`; strength inputs declare `cv` (raw bipolar carrier consumed in the multiply with no scaling — listed in PASSTHROUGH_BY_DESIGN) so any cv source (LFO, ADSR, sequencer step CV) lands without a cross-type cast.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
in_l | audio | Left audio carrier — the signal the left channel multiplies by its strength. For ring modulation patch an audio oscillator here. audio signal |
in_r | audio | Right audio carrier. If you leave this unpatched it is normalled to IN L, so a single mono source fans out to both output channels (mono-to-stereo). audio signal |
strength_l | cv | Left multiplier / modulator (raw bipolar CV, consumed with no scaling). A slow signal makes the channel behave as a VCA (volume control); an audio-rate signal makes it a ring modulator. At strength +1 (and offset 0) the channel passes at unity; at 0 it mutes; negative values invert. control voltage (CV) |
strength_r | cv | Right multiplier / modulator. If unpatched it is normalled to STRENGTH L, so one CV or LFO controls both VCAs at once; patch it for independent left/right modulation. control voltage (CV) |
outputs
| id | cable | what it does |
|---|---|---|
out_l | audio | Left result: in_l × (strength_l + offset) × level. Audio (or ring-mod) out for the left channel. audio signal |
out_r | audio | Right result: in_r × (strength_r + offset) × level, honoring the IN R and STRENGTH R normalling above. audio signal |
params
| id | label | range | default | curve |
|---|---|---|---|---|
level | Level | 0..1 | 1 | linear |
offset | Offset | -1..1 | 0 | linear |
controls
| control | what it does |
|---|---|
| Level | Master output gain applied after the per-channel multiply (0 to 1, default unity) — a final trim on both channels at once without touching the modulation depth. |
| Offset | A bipolar DC term added to each strength signal before multiplying (-1 to +1, default 0). It sets the QUIESCENT FLOOR — the gain the channel has with nothing patched into STRENGTH — and the dial is marked with that floor's three named waypoints: MUTE at the centre, UNITY at +1, and INV at -1 (also unity, with the polarity flipped, so the two ends differ in phase and not in level). The shipped default is the centre, so a freshly patched stereovca with no modulator is SILENT until you move this control or send it some strength; turn it up toward +1 to lift the floor so the channel stays open at unity even with no modulator, and a strength signal then only ducks it — handy for 'always on with optional duck' patches. With a cable in STRENGTH the gain is (strength + offset) x level, so the marks name where this dial sits rather than how loud the module is. |
source
stereovca.ts on GitHub.