stereovca
stereovca · utilities · schema v1Stereo 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). At 0 an unpatched strength (0 V) mutes the channel; turn offset 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. |
source
stereovca.ts on GitHub.