@maruaudio/dsp/reverbs/schroeder is a mono algorithmic reverb with the Freeverb topology: four parallel damped feedback combs into two serial Schroeder allpasses. The input enters at 0.2, the comb outputs sum at 0.25 and the allpasses use feedback 0.5. Comb lengths are 1557, 1617, 1491 and 1422 frames and allpass lengths 225 and 556, scaled from 44.1 kHz. Each comb's damping filter is y = delayed × (1 − d) + y₋₁ × d, and every stored sample is rounded to f32. The output is x × (1 − mix) + wet × mix.
Parameters
| Setter | Mapping as coded | Default |
|---|---|---|
setReverbRoomSize | Feedback 0.72 + clamp(size, 0, 1) × 0.22 (0.72 to 0.94) | 0.72 |
setReverbDamping | Damping 0.05 + clamp(d, 0, 1) × 0.45 (0.05 to 0.5) | 0.05 |
setReverbMix | 0 to 1 | 0.35 |
Lifecycle
initReverbNode(rate) allocates every line → prepareReverbNodeSampleRate re-derives lengths inside those lines, keeping history → setters → reverbNodeTick → resetReverbNode, which clears the whole tail and keeps parameters. Size the state for the highest rate it will be prepared at; a longer length is clamped to the allocation. For live replacement, clearReverbNodeStep(state, cursor, budget) clears at most 256 stores per call until it returns reverbNodeStoreCount(state), then finalizeReverbNodeClear resets indices and filters. Ticks allocate nothing.
When to use it
A small, fixed-cost room or plate-like tail on a mono voice or send, or the core of @maru/reverbs-stereo-schroeder.
Limits
- Mono sample tick; the output is a double, not rounded to f32.
- Feedback stays below unity (at most 0.94).
- Parameter changes apply at once with no smoothing.
- The clamps are the kernel node's conditional clamp, not the
math/rangepolicy.