@maruaudio/dsp/reverbs/stereo-dattorro wraps @maru/reverbs-dattorro for an effect slot: a bounded integer-frame pre-delay in front of the one coupled true-stereo network, and normalized diffusion, damping and decay controls. At init it sets the core's dryWet and volume fields to 1; the outer dry/wet law belongs to the caller (the multi-effect).
Parameters
| Setter | Range the setter enforces | Default |
|---|---|---|
setStereoDattorroPredelay | 0 to 150 ms, floored to frames; NaN or −∞ → 0, +∞ → 150 | 0 (direct) |
setStereoDattorroDiffusion | 0 to 1; core diffussion1 = 0.7 × n, diffussion2 = 0.7 + 0.3 × n | Core defaults (0, 0.7) |
setStereoDattorroDamping | 0 to 1, the source's loss control (1 is most damping) | 0.625 |
setStereoDattorroDecayRate | 0 to STEREO_DATTORRO_MAX_DECAY_RATE (0.95), normalized, not seconds | 0.7 |
Lifecycle
initStereoDattorroNode(rate) allocates the core and two 150 ms pre-delay rings → setters → stereoDattorroNodeTick(state, left, right, output) → resetStereoDattorroNode, an immediate clear outside realtime. Live replacement uses clearStereoDattorroNodeStep, at most 256 stores per call until it returns stereoDattorroClearStoreCount(state), then finalizeStereoDattorroNodeClear (27 scalar stores). Ticks allocate nothing.
When to use it
A plate reverb slot in a multi-effect chain where pre-delay is set in milliseconds and decay and damping are normalized controls.
Limits
- At zero pre-delay the core is fed directly with no hidden sample of delay; the rings keep recording while bypassed, so a later pre-delay reads recent input, not a stale burst.
- The core's
diffussion1field sets its output blend, so the output is not wet only: the input reaches it at10^(−6/20) × (1 − (1 + diffussion1)/2), about 0.25 at the default diffusion and 0.075 at diffusion 1. - Delay taps in the core do not scale with the sample rate.