@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
| Setter | Range the setter enforces | Default |
|---|---|---|
setStereoRoomFdnSize | 0 to 1; line delays 0.35 to 1 × 29, 37, 43, 53 ms | 0.5 |
setStereoRoomFdnDecayTime | 0.05 to 30 s T60 | 2.5 s |
setStereoRoomFdnDamping | 0 to 1 loop one-pole | 0.25 |
setStereoRoomFdnDiffusion | 0 (independent lines) to 1 (full Hadamard) | 1 |
setStereoRoomFdnModulationRateHz | 0 to 2 Hz | 0.15 Hz |
setStereoRoomFdnModulationDepthFrames | 0 to 16 frames peak | 0 (off) |
setStereoRoomFdnPredelay | 0 to 150 ms, floored to frames | 0 (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.