sidecar
sidecar · processors · schema v1Stereo sidechain compressor — Giannoulis-Massberg-Reiss 2012 JAES topology (cross-checked against Faust's co.compressor_stereo). Stereo audio in, dedicated SC L/R inputs (with normalling fallback: both unpatched → self-detect on the audio pair, the typical "use this as a plain stereo comp" default). The SC detector path runs a one-pole HPF (sc_hpf 20..1000 Hz, default 20 = effectively off) for kick-immune bus compression, then |sL|+|sR| stereo-link rectifier → log2 → 3-region soft-knee gain computer → asymmetric one-pole smoother (attack 0.1..200 ms log, release 1..2000 ms log) → linear gain via 2^(gainDb/6.0205). Stereo-link is always on in v1 so transients never shift the image under compression. Two ENV outputs expose the reduction envelope for cross-patch ducking: env_out = (-gainDb / 24) * envMag (NO clamp — at envMag>1 the output can overshoot 1.0, by spec), and env_inv_out = 1 - env_out (the canonical "patch this into a VCA strength to make it close when the comp fires"). Threshold (-60..0 dB) and envMag (0..2) are CV-modulatable; ratio, attack, release, knee, makeup, and sc_hpf are knob-only. Per-sample param smoothing kills clicks on rapid threshold / envMag changes. The 6.0205 factor (= 20·log10(2)) is the GMR-canonical log2↔dB bridge that lets the smoother run cleanly in the dB domain.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
audio_l_in | audio | Left MAIN / trigger input — the signal whose transients drive the ducking (e.g. a kick). It also passes through to the output untouched. Unpatched: silent. audio signal; L/R stereo pair with audio_r_in — L-only auto-duplicates to R |
audio_r_in | audio | Right MAIN / trigger input. If unpatched it is normalled to MAIN L, so a mono trigger drives both detector channels. audio signal; L/R stereo pair with audio_l_in |
sc_l_in | audio | Left SIDECHAIN input — the signal that gets ducked and summed to the output (e.g. a pad). If the whole SC pair is unpatched, nothing is ducked and only the MAIN passes through. audio signal; L/R stereo pair with sc_r_in — L-only auto-duplicates to R |
sc_r_in | audio | Right SIDECHAIN input. If unpatched it is normalled to SC L (mono sidechain to both output channels). audio signal; L/R stereo pair with sc_l_in |
threshold_cv | cv | CV that adds to the THRESHOLD knob — modulate how loud the main must get before ducking begins. control voltage (CV); modulates threshold (additive offset — ±1 CV sweeps the full range, centered on the knob) |
env_mag_cv | cv | CV that adds to the ENV MAG knob — scale how far the ENV / ENV INV outputs swing for a given amount of gain reduction. control voltage (CV); modulates envMag (additive offset — ±1 CV sweeps the full range, centered on the knob) |
input_level_cv | cv | CV that adds to the INPUT LVL knob — modulate the sidechain's input gain (how loud the ducked signal sits in the output). control voltage (CV); modulates inputLevel (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
audio_l_out | audio | Left output: the MAIN left passthrough plus the ducked left sidechain. audio signal; L/R stereo pair with audio_r_out |
audio_r_out | audio | Right output: the MAIN right passthrough plus the ducked right sidechain. audio signal; L/R stereo pair with audio_l_out |
env_out | cv | The ducking envelope as CV (rises as gain reduction increases). It is NOT hard-clamped: with ENV MAG above 1 it can exceed 1.0 — patch it where overshoot is tolerated. Use it to drive another VCA's strength so it ducks in time with this one. control voltage (CV) |
env_inv_out | cv | The inverted ducking envelope (1 − ENV), also un-clamped (can go negative when ENV exceeds 1). Patch it into a downstream VCA's strength to make that VCA CLOSE while this ducker is reducing. control voltage (CV) |
params
| id | label | range | default | curve |
|---|---|---|---|---|
threshold | Threshold | -60..0dB | -18 | linear |
ratio | Ratio | 1..20 | 4 | log |
attack | Attack | 0.1..200ms | 10 | log |
release | Release | 1..2000ms | 100 | log |
knee | Knee | 0..24dB | 6 | linear |
envMag | Env Mag | 0..2 | 1 | linear |
inputLevel | Input Lvl | 0..2% | 1 | linear |
makeup | Makeup | 0..24dB | 0 | linear |
sc_hpf | SC HPF | 20..1000Hz | 20 | log |
controls
| control | what it does |
|---|---|
| Attack | How fast the duck clamps down after the main fires (0.1 to 200 ms, log, default 10): short for a snappy pump, longer for a gentler dip. |
| Env Mag | Scales how far the ENV / ENV INV CV outputs swing for a given gain reduction (0 to 2, default 1). At 1 a 24 dB reduction reaches ENV 1.0; above 1 the env overshoots past 1.0. Display/CV-shaping only — does not change the audio ducking. The MAG CV input adds to this. |
| Input Lvl | Input gain on the SIDECHAIN signal before ducking (0 to 200%, default 100%): boost a quiet pad into the mix or trim a loud one. The LVL CV input adds to this. |
| Knee | The soft-knee width around the threshold in dB (0 to 24, default 6): a wider knee eases ducking in gradually instead of switching hard at the threshold. |
| Makeup | A fixed output gain in dB added after ducking (0 to 24, default 0) to bring the overall level back up. |
| Ratio | How hard the sidechain is pushed down once over threshold (1:1 to 20:1, default 4): higher ratios duck more aggressively. |
| Release | How fast the sidechain springs back up after the main passes (1 to 2000 ms, log, default 100): this sets the 'breath' / pumping speed. |
| SC HPF | A high-pass on the DETECTOR signal only (20 to 1000 Hz, log, default 20 = effectively off): raise it so the detector keys on the main's punch rather than its low end, preventing bass from over-triggering the duck. It does not filter the audio you hear. |
| Threshold | The main level (in dB) above which ducking kicks in (-60 to 0 dB, default -18): lower it to duck on quieter hits, raise it so only loud transients pump the sidechain. The THR CV input adds to this. |
source
sidecar.ts on GitHub.