Skip to content

Reverb

FDN reverb (madronalib), classic Schroeder/Moorer reverbs (fxdsp), and STK reverbs/effects.

Usage examples

FDN reverb with presets

from nanodsp.effects import reverb
from nanodsp.buffer import AudioBuffer

buf = AudioBuffer.from_file("input.wav")

# Hall reverb with 30% wet mix
hall = reverb.reverb(buf, preset="hall", mix=0.3)

# Room with short decay
room = reverb.reverb(buf, preset="room", decay=0.3, mix=0.2)

# Plate reverb (bright and dense)
plate = reverb.reverb(buf, preset="plate", mix=0.4)

# Cathedral with pre-delay
cathedral = reverb.reverb(
    buf, preset="cathedral", decay=0.9, damping=0.3, pre_delay_ms=40.0, mix=0.5
)

# Chamber (intimate)
chamber = reverb.reverb(buf, preset="chamber", mix=0.25)

Available presets: room, hall, plate, chamber, cathedral

Classic reverbs

# Schroeder reverb (4 combs + 2 allpasses)
schroeder = reverb.schroeder_reverb(buf, feedback=0.7, diffusion=0.5)

# With LFO modulation to reduce metallic ringing
mod_schroeder = reverb.schroeder_reverb(buf, feedback=0.7, mod_depth=0.1)

# Moorer reverb (adds early reflections network)
moorer = reverb.moorer_reverb(buf, feedback=0.7, diffusion=0.7, mod_depth=0.1)

STK reverbs

# Freeverb (Jezar's algorithm)
freeverb = reverb.stk_reverb(buf, algorithm="freeverb", room_size=0.7, mix=0.3)

# JCRev (John Chowning)
jcrev = reverb.stk_reverb(buf, algorithm="jcrev", t60=2.0, mix=0.3)

# NRev (CCRMA)
nrev = reverb.stk_reverb(buf, algorithm="nrev", t60=1.5, mix=0.4)

# PRCRev (Perry Cook)
prcrev = reverb.stk_reverb(buf, algorithm="prcrev", t60=1.0, mix=0.3)

STK chorus and echo

# Chorus effect
chorused = reverb.stk_chorus(buf, mod_depth=0.05, mod_freq=0.25, mix=0.5)

# Echo / delay
echoed = reverb.stk_echo(buf, delay_ms=250.0, mix=0.5)

API reference

reverb

Reverb algorithms -- FDN, Schroeder, Moorer, STK reverbs, STK chorus/echo.

reverb

reverb(
    buf: AudioBuffer,
    preset: Literal[
        "room", "hall", "plate", "chamber", "cathedral"
    ] = "hall",
    mix: float = 0.3,
    decay: float = 0.8,
    damping: float = 0.5,
    pre_delay_ms: float = 0.0,
) -> AudioBuffer

FDN reverb with presets.

PARAMETER DESCRIPTION
preset

One of 'room', 'hall', 'plate', 'chamber', 'cathedral'.

TYPE: str DEFAULT: 'hall'

mix

Wet/dry blend, 0.0--1.0 (0.0 = fully dry, 1.0 = fully wet).

TYPE: float DEFAULT: 0.3

decay

Feedback gain per delay line, 0.0--<1.0 (values >= 1.0 are unstable).

TYPE: float DEFAULT: 0.8

damping

Lowpass filtering in feedback, 0.0--1.0 (0.0 = bright, 1.0 = dark).

TYPE: float DEFAULT: 0.5

pre_delay_ms

Pre-delay in milliseconds before reverb onset, >= 0.

TYPE: float DEFAULT: 0.0

schroeder_reverb

schroeder_reverb(
    buf: AudioBuffer,
    feedback: float = 0.7,
    diffusion: float = 0.5,
    mod_depth: float = 0.0,
) -> AudioBuffer

Schroeder reverberator (4 parallel combs + 2 series allpasses).

PARAMETER DESCRIPTION
feedback

Comb filter feedback, 0.0--<1.0. Higher = longer tail.

TYPE: float DEFAULT: 0.7

diffusion

Allpass diffusion, 0.0--1.0. Higher = smoother.

TYPE: float DEFAULT: 0.5

mod_depth

LFO modulation depth, >= 0. 0.0 = no modulation.

TYPE: float DEFAULT: 0.0

moorer_reverb

moorer_reverb(
    buf: AudioBuffer,
    feedback: float = 0.7,
    diffusion: float = 0.7,
    mod_depth: float = 0.1,
) -> AudioBuffer

Moorer reverberator (early reflections + 4 combs + 2 allpasses).

PARAMETER DESCRIPTION
feedback

Comb filter feedback, 0.0--<1.0. Higher = longer tail.

TYPE: float DEFAULT: 0.7

diffusion

Allpass diffusion, 0.0--1.0. Higher = smoother.

TYPE: float DEFAULT: 0.7

mod_depth

LFO modulation depth, >= 0. 0.0 = no modulation.

TYPE: float DEFAULT: 0.1

stk_reverb

stk_reverb(
    buf: AudioBuffer,
    algorithm: Literal[
        "freeverb", "jcrev", "nrev", "prcrev"
    ] = "freeverb",
    mix: float = 0.3,
    room_size: float = 0.5,
    damping: float = 0.5,
    t60: float = 1.0,
) -> AudioBuffer

Apply an STK reverb algorithm.

PARAMETER DESCRIPTION
algorithm

One of 'freeverb', 'jcrev', 'nrev', 'prcrev'.

TYPE: str DEFAULT: 'freeverb'

mix

Wet/dry mix, 0.0--1.0 (0.0 = dry, 1.0 = fully wet).

TYPE: float DEFAULT: 0.3

room_size

Room size (FreeVerb only), 0.0--1.0.

TYPE: float DEFAULT: 0.5

damping

Damping (FreeVerb only), 0.0--1.0.

TYPE: float DEFAULT: 0.5

t60

Reverberation time in seconds (JCRev, NRev, PRCRev), > 0. Typical: 0.1--10.

TYPE: float DEFAULT: 1.0

stk_chorus

stk_chorus(
    buf: AudioBuffer,
    mod_depth: float = 0.05,
    mod_freq: float = 0.25,
    mix: float = 0.5,
) -> AudioBuffer

Apply STK Chorus effect.

Returns stereo output from mono or stereo input.

PARAMETER DESCRIPTION
mod_depth

Modulation depth, >= 0. Typical: 0.01--0.1.

TYPE: float DEFAULT: 0.05

mod_freq

Modulation frequency in Hz, > 0. Typical: 0.1--5.0.

TYPE: float DEFAULT: 0.25

mix

Wet/dry mix, 0.0--1.0.

TYPE: float DEFAULT: 0.5

stk_echo

stk_echo(
    buf: AudioBuffer,
    delay_ms: float = 250.0,
    mix: float = 0.5,
) -> AudioBuffer

Apply STK Echo effect per channel.