Spectral Decay Reverb — v0.2 User Guide

Convolution reverb with a Poisson‑based impulse response featuring exponential decay, chirp (sweeping) modulation, and bandpass filtering. The IR is generated from a Poisson point process (simulating sparse reflections) with an amplitude envelope decay_base^(-t/impulse_dur) and a sinusoidal chirp: 1 + 0.7·sin(2π·t·150 + t·20). A Hann bandpass filter (100–4000 Hz) shapes the final tone.

Author: Shai Cohen Affiliation: Department of Music, Bar‑Ilan University, Israel Version: 0.2 (2025) – Stereo, wet/dry, visualisation License: MIT License Repo: GitHub
Contents:

What this does

Spectral Decay Reverb is a convolution‑based reverb with a custom‑designed impulse response (IR). The IR is generated from a Poisson point process (random impulses with a given density), then shaped with:

Key features v0.2:
  • Poisson‑based IR – sparse, randomised impulses (density controls “graininess”).
  • Exponential decay with adjustable base.
  • Chirp modulation for evolving, non‑static timbre.
  • Hann bandpass filter with smooth transitions (smoothing parameter).
  • Stereo decorrelation: right channel uses slightly different IR parameters (duration, density, decay, filter).
  • Wet/dry mix and visualisation of bandpass shape and IR envelope.

Quick start

  1. In Praat, select exactly one Sound object (mono or stereo).
  2. Run script…Spectral_Decay_Reverb.praat.
  3. Choose a Preset:
    • Subtle Decay, Medium Decay, Heavy Decay, Extreme Decay
  4. For custom mode (preset = Custom), adjust parameters as desired.
  5. Set Wet_dry_percent (0 = dry only, 100 = wet only).
  6. Click OK. The script creates a Poisson‑based IR, convolves it with the input (extended with a silent tail), filters, applies wet/dry mix and fadeout, and imports the result as originalname_spectral_preset.
Tip: Start with Medium Decay (IR 3 s, density 2000, decay base 110) to hear the characteristic chirp modulation. For a more grainy, diffuse texture, increase Poisson_density. For a brighter reverb, raise the high cutoff.
Important: This reverb uses Praat’s Convolve command, which can be slow for long IRs. The IR length is determined by Impulse_duration_s – keep it reasonable (2–4 s) for faster processing.

The 4 presets (+ Custom)

PresetIR dur (s)DensityDecay baseBandpass (Hz)Description
Subtle Decay2.01200150120–3500Light, gentle decay.
Medium Decay3.02000110100–4000Balanced, clear reverb.
Heavy Decay4.530008080–4500Dense, prominent tail.
Extreme Decay6.545005060–5000Extreme, cavernous decay.

Each preset also sets wet_dry_percent appropriately (35–80 %).

Impulse response design

📐 Poisson point process

Creates a train of impulses with an average density of poisson_density events per second. Each impulse is a short pulse (width 0.035 s, frequency 2800 Hz). This sparse structure gives the reverb a grainy, diffused character unlike dense noise‑based IRs.

📐 Decay envelope

amp(t) = decay_base^(-t / impulse_dur)

decay_base controls the steepness: higher values = faster decay (e.g., 150 decays quickly, 50 decays slowly).

📐 Chirp modulation

mod(t) = 1 + 0.7·sin(2π·t·150 + t·20)

This adds a frequency‑sweeping (chirp) component: the sine frequency increases over time (the term t·20 in the phase). The result is a shimmering, evolving timbre that never sounds static.

📐 Hann bandpass filter

After convolution, the wet signal is passed through a Hann bandpass filter with low and high cutoffs and a smoothing parameter that controls the transition steepness. This restricts the reverb to a chosen frequency range (default 100–4000 Hz), focusing energy on the most audible part of the spectrum.

The right channel uses slightly different parameters (IR duration ×0.93, density ×0.95, decay ×0.95, modulation frequency 140 Hz instead of 150 Hz, and shifted bandpass cutoffs) to decorrelate the stereo image.

Parameters & defaults

IR parameters

ParameterRangeDefaultDescription
Tail_duration_sany positive2.0 sLength of silent tail added after the original sound (allows reverb to ring out).
Impulse_duration_sany positive3.0 sLength of the generated impulse response (determines reverb length).
Poisson_densityinteger2000Average number of Poisson impulses per second. Higher = denser, smoother reverb.
Decay_basepositive110Base of the exponential decay envelope. Higher = faster decay.

Spectral filtering

ParameterRangeDefaultDescription
Low_cutoff_Hzany positive100 HzLower frequency of the Hann bandpass filter.
High_cutoff_Hzany positive4000 HzUpper frequency of the bandpass filter.
Smoothing_Hzany positive100 HzTransition width of the filter skirts (Hann window).

Mix & output

ParameterRangeDefaultDescription
Wet_dry_percent0–100500 = dry only, 100 = wet only.
Fadeout_duration_sany positive1.2 sCosine fade‑out applied at the end of the tail to avoid clicks.
Draw_visualizationyes/noyesShow waveforms, bandpass shape, IR envelope, and summary.
Play_resultyes/noyesAuto‑play after processing.

Visualization (Praat picture)

When Draw_visualization = 1, the script draws:

Tip: The IR envelope plot clearly shows the effect of the decay base and the chirp modulation. Notice how the amplitude oscillates (due to the sine modulation) while the overall trend follows the exponential decay.

FAQ / troubleshooting

Convolution is very slow

Praat’s Convolve can be slow for long IRs. Reduce Impulse_duration_s (e.g., to 1.5 s) for faster preview. Also, lower Poisson_density reduces the number of impulses, which may speed up the IR generation (but not the convolution itself).

Output is silent / no reverb heard

Check that Wet_dry_percent is not 0. Also verify that the IR was created correctly – the Info window shows the parameters used. If the IR is extremely short or dense, it may produce an inaudible result. Try increasing Impulse_duration_s or decreasing Decay_base (slower decay).

Reverb sounds too “grainy”

Increase Poisson_density – this creates more impulses per second, smoothing out the graininess. You can also increase the pulse width (the script uses 0.035 s – edit 0.035 in the To Sound (pulse train) line).

Understanding decay_base

The decay envelope is decay_base^(-t/impulse_dur). This is equivalent to an exponential with time constant τ = impulse_dur / ln(decay_base). For example:

  • decay_base = 150 → τ ≈ 0.6 s (fast decay)
  • decay_base = 50 → τ ≈ 1.7 s (slower decay)

So higher decay_base = faster decay, which may be counter‑intuitive – but the formula is chosen for numerical convenience in Praat.

Stereo decorrelation

The right channel uses a slightly different IR (duration ×0.93, density ×0.95, decay ×0.95, etc.) to ensure left and right are not identical. This creates a wider, more immersive image. If you need a narrower image, you can reduce the differences in the script.