Build with this node

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

Ask Studio

@maruaudio/dsp/reverbs/stereo-room-fdn is a wet-only stereo room reverb: one four-line feedback-delay network coupled every sample by a normalized 4×4 Hadamard matrix. The input enters as mid and side at 0.25, so mono excitation still gives decorrelated outputs. Each line feedback is 10^(−3 × delaySeconds / T60), capped at 0.999, so Size does not change the decay. A one-pole damps each loop. It is an original Maru implementation. An optional Modulated FDN profile moves the four fractional reads with phase-spread sine LFOs (@maru/modulation-lfo).

Parameters

SetterRange the setter enforcesDefault
setStereoRoomFdnSize0 to 1; line delays 0.35 to 1 × 29, 37, 43, 53 ms0.5
setStereoRoomFdnDecayTime0.05 to 30 s T602.5 s
setStereoRoomFdnDamping0 to 1 loop one-pole0.25
setStereoRoomFdnDiffusion0 (independent lines) to 1 (full Hadamard)1
setStereoRoomFdnModulationRateHz0 to 2 Hz0.15 Hz
setStereoRoomFdnModulationDepthFrames0 to 16 frames peak0 (off)
setStereoRoomFdnPredelay0 to 150 ms, floored to frames0 (direct)

NaN and −∞ clamp to the minimum, +∞ to the maximum.

Lifecycle

initStereoRoomFdnNode(rate) allocates every line and pre-delay ring (a non-finite or non-positive rate uses 48 kHz) → prepareStereoRoomFdnNode adopts a rate inside that capacity, re-derives delays and clears history, returning false for an invalid rate or too little capacity → setters → stereoRoomFdnNodeTick(state, left, right, output) → resetStereoRoomFdnNode outside realtime. clearStereoRoomFdnNodeStep (at most 256 stores) and finalizeStereoRoomFdnNodeClear (23 scalar stores) clear it live.

When to use it

A room-sized stereo tail whose decay time is set in seconds and whose size can be automated without clearing the tail.

Limits

  • Size changes slew each fractional read by at most 0.25 frame per sample.
  • At depth 0 and diffusion 1 the tick takes the original arithmetic path.
  • Prepare never resizes: allocate at the highest rate it will run at.

Algorithm properties and proofs

No Lean 4 proof is mapped to this node.

Explore proofs alongside performance

Parameters

ParameterTypeSetter
Stereo room fdn size stereoRoomFdnSize

Sets a room scale without touching buffer capacity. Tick slews the four fractional read heads, preserving the tail rather than requiring a clear.

floatsetStereoRoomFdnSize
Seconds seconds

Sets a physical -60 dB decay time; feedback remains derived per active line.

floatsetStereoRoomFdnDecayTime
Stereo room fdn damping stereoRoomFdnDamping

Higher normalized damping darkens the feedback loops.

floatsetStereoRoomFdnDamping
Hertz hertz

Set the shared slow read-motion rate. Depth remains zero until enabled separately.

floatsetStereoRoomFdnModulationRateHz
Frames frames

Set the peak read excursion in frames. Zero is the exact legacy tick path.

floatsetStereoRoomFdnModulationDepthFrames
Amount amount

Set cross-line feedback density. One uses the original normalized Hadamard coupling; zero leaves the four feedback paths independent. The convex orthogonal mix remains non-amplifying before the existing feedback gains.

floatsetStereoRoomFdnDiffusion
Milliseconds milliseconds

Integer-frame input pre-delay. A zero value is direct while both rings remain live.

floatsetStereoRoomFdnPredelay

Dependencies

Dependents

Used by