@maruaudio/dsp/reverbs/dattorro is a bounded port of Synthlet's Dattorro plate, generated from Faust re.dattorro_rev. The network input is (L + R)/2: an input band-limit, four diffusion allpasses and a two-branch tank with decay diffusion, damping and decay, read out to two channels. It keeps the source's equations, defaults and fixed taps (142 to 4453 samples) in twelve Float32Array lines, 32,128 values in all.
Parameters
setDattorroNodeParameters(state, parameters) stores nine fields unclamped. The names are the source's; the tick uses them as follows.
| Field | Role in the tick | Default |
|---|---|---|
lpFilter | Output gain, 10^(lpFilter/20) | −6 |
diffussion1 | Output blend: x × (1 − (1+d)/2) + wet × (1+d)/2 | 0 |
diffussion2 | Input one-pole bandwidth | 0.7 |
feedback1, feedback2 | Coefficients of the first and second input allpass pairs | 0.625 |
decayRate | Tank decay multiplier | 0.7 |
damping | Tank damping one-pole | 0.625 |
dryWet | Decay-diffusion allpass coefficient | 0.625 |
volume | Second tank allpass coefficient | 0.625 |
Each field is smoothed by a one-pole (coefficient 44.1 / sampleRate) from 0, so the output ramps in after init.
Lifecycle
initDattorroNode(rate) allocates the lines → setDattorroNodeParameters → dattorroNodeTick(state, left, right, output) → resetDattorroNode, a full clear outside realtime. Live replacement uses clearDattorroNodeStep(state, cursor, budget), at most 256 stores per call until it returns 32,128, then finalizeDattorroNodeClear (24 scalar stores). Ticks allocate nothing.
When to use it
A dense stereo plate tail on a send or bus, or the core of @maru/reverbs-stereo-dattorro.
Limits
- Stereo in and out, one frame per tick. At the default
diffussion1the output is half input, half network. Delay taps do not scale with the rate.