Build with this node

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

Ask Studio

@maruaudio/dsp/reverbs/borrowed-hall-fdn is an eight-line algorithmic hall over caller-owned ("borrowed") storage: two prepared stereo rings, each partitioned into four disjoint lines. It is an original design following standard FDN theory, not a measured hall. Each line reads at its delay, passes a one-pole damping filter and a per-line loss 10^(−3 × delayFrames / (rate × decay)), and the eight are mixed by a normalized Sylvester (Hadamard) butterfly. Diffusion blends the direct and mixed feedback. Inputs enter at ±0.25 per line; the outputs are ±0.25 sums of the eight reads.

Parameters

configureBorrowedHallFdn(state, size, decaySeconds, dampingHz, diffusion) uses clampFiniteWithFallback (@maru/math-range):

ArgumentRangeFallback and init
size1 to 3 × the 31, 37, 41, 43, 47, 53, 61, 71 ms delays1.5
decaySeconds0.5 to 15 s nominal T603
dampingHz500 to 16,000 Hz, at most 0.45 × rate8000
diffusion0.25 to 11

Lifecycle

initBorrowedHallFdn(rate) (8 to 192 kHz, fallback 48 kHz) plus two prepared initFractionalFeedbackDelayNode rings outside the callback → configureBorrowedHallFdn → borrowedHallFdnTick(state, leftRing, rightRing, left, right), reading outLeft and outRight → resetBorrowedHallFdn and clearing both rings. The DSP node keeps its own shared position across the eight lines, not the rings' write cursors. Ticks allocate nothing.

When to use it

A long stereo hall tail in a chain that owns its delay rings and dry/wet.

Limits

  • Wet only. A ring quarter shorter than ceil(0.213 × rate) + 1 frames is refused: both outputs are 0 and nothing is written. Do not share the rings.
  • Decay is a nominal broadband target; damping and lower diffusion shorten the measured decay. Scaled delays are not guaranteed mutually prime.
  • Size changes need the caller's dry, clear and fade transition; the other controls keep the tail. Input is clamped to ±16 (non-finite → 0).

Algorithm properties and proofs

No Lean 4 proof is mapped to this node.

Explore proofs alongside performance

Dependencies

Dependents

Used by