Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Dynamics

Dynamics processors shape a signal’s level over time: compressing peaks, limiting brick-wall ceilings, gating noise, and ducking one signal under another.

The EnvelopeFollower (an amplitude detector) is documented under Envelopes & Modulators.

Compressor

Feed-forward compressor with dB-domain gain computation, makeup gain, and an internally normalled external sidechain. type_id: compressor.

let comp = patch.add("comp", Compressor::new(44100.0));

Inputs

PortSignalRangeDescription
inAudio±5VAudio input
thresholdUnipolar CV0-10VThreshold (×5 V), default 0.5
ratioUnipolar CV0-10VRatio (1:1 – 20:1), default 0.5
attackUnipolar CV0-10VAttack time, default 0.2
releaseUnipolar CV0-10VRelease time, default 0.3
makeupUnipolar CV0-10VMakeup gain (1×–4×), default 0.0
sidechainAudio±5VExternal key; normalled to in when unpatched

Outputs

PortSignalDescription
outAudioCompressed output
grUnipolar CVGain-reduction CV

Limiter

True brick-wall limiter with soft (renormalized tanh) or hard knee, plus an internally normalled sidechain key. type_id: limiter.

let lim = patch.add("lim", Limiter::new(44100.0));

Inputs

PortSignalRangeDescription
inAudio±5VAudio input
thresholdUnipolar CV0-10VCeiling (×5 V), default 0.8
releaseUnipolar CV0-10VRelease time, default 0.3
softGate0/5VSoft (tanh) knee vs hard limiting; default on
sidechainAudio±5VExternal key; normalled to in when unpatched

Outputs

PortSignalDescription
outAudioLimited output (hard-clamped to ±threshold)
grUnipolar CVGain reduction

The output is always hard-clamped to ±threshold, so peaks never exceed the ceiling regardless of knee shape.


Noise Gate

Downward noise gate with hysteresis, a hold time, and an anti-click fade, plus an internally normalled sidechain key. type_id: noise_gate.

let gate = patch.add("gate", NoiseGate::new(44100.0));

Inputs

PortSignalRangeDescription
inAudio±5VAudio input
thresholdUnipolar CV0-10VOpen threshold (×5 V; close = 0.7×), default 0.1
attackUnipolar CV0-10VDetector attack, default 0.1
releaseUnipolar CV0-10VDetector release, default 0.3
rangeUnipolar CV0-10VMaximum attenuation depth, default 1.0
sidechainAudio±5VExternal key; normalled to in when unpatched

Outputs

PortSignalDescription
outAudioGated output
gateGateGate state (high when open)

Ducker

Dedicated sidechain ducking: the key input attenuates the main signal by up to amount. Knob values combine with CV through ModulatedParam. type_id: ducker.

let duck = patch.add("duck", Ducker::new(44100.0));
patch.connect(kick.out("out"), duck.in_("key"))?; // kick ducks the pad
patch.connect(pad.out("out"), duck.in_("in"))?;

Inputs

PortSignalRangeDescription
inAudio±5VMain signal
keyAudio±5VSidechain key that drives the ducking
amountBipolar CV±5VDuck depth CV (summed with the knob)
thresholdBipolar CV±5VThreshold CV (summed with the knob)
attackUnipolar CV0-10VEnvelope attack, default 0.1
releaseUnipolar CV0-10VEnvelope release, default 0.3

Outputs

PortSignalDescription
outAudioDucked output
grUnipolar CVGain reduction

Unlike the compressor/limiter/gate sidechains (which are normalled to the main input), the Ducker’s key is a dedicated, always-separate input. Knob values are also settable in code with set_amount, amount, set_threshold, threshold.