Build with this node

Start with a prompt in Studio, or copy it into your own coding agent.

Ask Studio

@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.

FieldRole in the tickDefault
lpFilterOutput gain, 10^(lpFilter/20)−6
diffussion1Output blend: x × (1 − (1+d)/2) + wet × (1+d)/20
diffussion2Input one-pole bandwidth0.7
feedback1, feedback2Coefficients of the first and second input allpass pairs0.625
decayRateTank decay multiplier0.7
dampingTank damping one-pole0.625
dryWetDecay-diffusion allpass coefficient0.625
volumeSecond tank allpass coefficient0.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 diffussion1 the output is half input, half network. Delay taps do not scale with the rate.

Algorithm properties and proofs

No Lean 4 proof is mapped to this node.

Explore proofs alongside performance

Dependencies

None: this node imports no other node.

Dependents

Used by