audioJS

@audio/reverb-freeverb

Status calibrated

npm1.0.5licenseMIT

Freeverb — Schroeder-Moorer 8-comb + 4-allpass reverb, Jezar public-domain tuning, stereo spread

Overview

Install
Updated
Family
reverb, 7 packages under it
Tags
shape
import freeverb from '@audio/reverb-freeverb'

8 parallel LP-damped feedback combs into 4 series allpass diffusers per channel, Jezar's public-domain tuning (44.1 kHz delay constants, scaled to fs). Stereo input runs the right channel through spread-offset (23-sample) delay lines for width — pass [left, right] and the two channels decorrelate on their own; mono input runs a single channel. Strictly stereo, not N-channel: only data[0]/data[1] are read and written — a third channel in the array is silently left untouched.

freeverb(data, { room: 0.7, damp: 0.4, mix: 0.5, fs: 44100 })
freeverb([left, right], { room: 0.9, mix: 0.4 })  // stereo — decorrelated spread
Param Default
room 0.5 0..1 — feedback amount (tail length)
damp 0.5 0..1 — high-frequency loss in the comb feedback path
mix 0.33 0..1 — wet/dry blend
fs 44100 sample rate; delay lengths scale to it

Mutates data in place and returns it — the return value is the same array/pair you passed in, not a copy. mix: 0 is an exact passthrough (room/damp never run when nothing is mixed in). A fresh call allocates fresh comb/allpass state, so there's no state to carry across calls — reprocess the whole buffer each time.

The /audio factory keeps per-channel state between blocks. Its tail(ctx) returns zero for a known dry mix: 0, otherwise six seconds, including an unknown/automated mix. A host planning a whole edit must not infer permanent bypass from an automation curve's initial zero.

Use when: general-purpose room/hall reverb, the "default" choice among this family.
Not for: metallic plate character (use dattorro) or a colorless, uniform-T60 tail (use fdn).


Part of the @audio/reverb family.

MIT © audiojs