sidecar
sidecar · processorsStereo 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). It is CV-shaping ONLY: measured on the shipping DSP, the audio output is bit-identical at 0, 0.5, 1 and 2, so this is the one control on the module that cannot change what you hear. ENV is `(reduction / 24 dB) × MAG` and is NOT clamped, so it passes 1.0 whenever the reduction passes 24 dB — at the DEFAULT setting of 1, not only above it (measured 1.70 at MAG 1 with a deep duck). ENV INV is 1 − ENV and goes negative in the same states. Patch them where overshoot is tolerated. At MAG 0 both outputs are constants (ENV 0, ENV INV 1). The MAG CV input adds to this. |
| Input Lvl | Input gain on the SIDECHAIN signal (0 to 200%, default 100%): boost a quiet pad into the mix or trim a loud one. At 0 the sidechain path is bit-exactly silent and MAKEUP has no authority at all — it and MAKEUP are the SAME dimension in different units (see MAKEUP), so the sidechain's real gain is this knob in dB PLUS makeup. 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 | Extra gain in dB on the DUCKED SIDECHAIN (0 to 24, default 0). ⚠ It is NOT an output gain: measured with the sidechain unpatched, the output is bit-identical at 0, 12 and 24 dB, because the MAIN passthrough never passes through it. It multiplies the same signal INPUT LVL does — 20·log10(INPUT LVL) + MAKEUP is the sidechain's total gain, and the two knobs are exactly interchangeable (INPUT LVL 2 / MAKEUP 0 renders bit-identically to INPUT LVL 1 / MAKEUP 6.02). Unlike INPUT LVL it takes no CV. |
| Ratio | How hard the sidechain is pushed down once over threshold (1:1 to 20:1, default 4): higher ratios duck more aggressively. The dial is very non-linear in its own top half — at a full-scale mono trigger and the default threshold the reduction runs 0 / -12.0 / -18.0 / -21.0 / -22.8 dB at 1 / 2 / 4 / 8 / 20, so the last two thirds of the travel buy under 2 dB. What a given setting is worth also depends on the THRESHOLD, which is why the faceplate prints the reduction rather than the ratio. |
| 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. |
| Sidecar curve {n} | THE TRANSFER CURVE — the faceplate's picture of the gain computer, and the thing about this module that no number can say. It plots how much the sidechain is pushed down (down the axis, 0 to -48 dB) against the MAIN peak level that is doing the pushing (across the axis, -60 to 0 dBFS — the number on your meter, not the detector's). Two vertical ticks mark the two halves of this module's central confusion: the dashed one is where the THRESHOLD dial's own number lands once the `|L|+|R|` detector sum is taken off it, and the solid one is where ducking actually begins, another half-knee to the left. The dial reads -18 dB at the shipped defaults and the bend is at -27. The slope to the right of the bend is the RATIO, which is where you can see that its top two thirds buy under 2 dB. Point anywhere on the plot to move the read cursor: the caption under it reports the reduction, the sidechain's resulting output gain and the ENV output AT THAT LEVEL, which is the same set of answers the readout row gives for a full-scale main. It is read-only — nothing on it edits the patch — and the cursor is yours alone: it is not shared with the rackspace and not saved with the patch. |
| Threshold | Where the gain computer's knee is centred (-60 to 0 dB, default -18): lower it to duck on quieter hits, raise it so only loud transients pump the sidechain. ⚠ It is NOT the MAIN level at which ducking starts, for two reasons the dial cannot show. The detector is a stereo-linked sum of rectifiers (|L| + |R|), so a mono trigger normalled to both channels reads 6.02 dB above its own peak; and the soft KNEE opens half its width BELOW this value. At the shipped defaults ducking begins at a main peak of -27.0 dBFS. The faceplate's ONSET readout prints that number; the THR CV input adds to this one. ⚠ AND THE TOP OF THE DIAL DOES NOT MEAN 'ONLY DUCK ON PEAKS'. Because those two offsets are subtracted rather than added, the onset can never be closer to full scale than -6.02 dBFS — at ANY setting of this knob and the KNEE, including 0 dB with a hard knee. Wind THRESHOLD to the top and a mono main is still ducked from -6 dBFS upward; there is no setting that leaves a hot mono trigger alone. The faceplate's transfer curve shows it as a tick that never reaches the right-hand edge of the plot. |
source
sidecar.ts on GitHub.