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.
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:
- An exponential decay envelope:
decay_base^(-t / impulse_dur)(higher decay_base = faster decay). - A chirp (frequency‑sweeping) modulation:
1 + 0.7·sin(2π·t·150 + t·20)– this creates a shimmering, evolving texture. - A Hann bandpass filter (default 100–4000 Hz) to focus the reverb on the spectral range of most interest.
- 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
- In Praat, select exactly one Sound object (mono or stereo).
- Run script… →
Spectral_Decay_Reverb.praat. - Choose a Preset:
- Subtle Decay, Medium Decay, Heavy Decay, Extreme Decay
- For custom mode (preset = Custom), adjust parameters as desired.
- Set Wet_dry_percent (0 = dry only, 100 = wet only).
- 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.
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)
| Preset | IR dur (s) | Density | Decay base | Bandpass (Hz) | Description |
|---|---|---|---|---|---|
| Subtle Decay | 2.0 | 1200 | 150 | 120–3500 | Light, gentle decay. |
| Medium Decay | 3.0 | 2000 | 110 | 100–4000 | Balanced, clear reverb. |
| Heavy Decay | 4.5 | 3000 | 80 | 80–4500 | Dense, prominent tail. |
| Extreme Decay | 6.5 | 4500 | 50 | 60–5000 | Extreme, 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
| Parameter | Range | Default | Description |
|---|---|---|---|
| Tail_duration_s | any positive | 2.0 s | Length of silent tail added after the original sound (allows reverb to ring out). |
| Impulse_duration_s | any positive | 3.0 s | Length of the generated impulse response (determines reverb length). |
| Poisson_density | integer | 2000 | Average number of Poisson impulses per second. Higher = denser, smoother reverb. |
| Decay_base | positive | 110 | Base of the exponential decay envelope. Higher = faster decay. |
Spectral filtering
| Parameter | Range | Default | Description |
|---|---|---|---|
| Low_cutoff_Hz | any positive | 100 Hz | Lower frequency of the Hann bandpass filter. |
| High_cutoff_Hz | any positive | 4000 Hz | Upper frequency of the bandpass filter. |
| Smoothing_Hz | any positive | 100 Hz | Transition width of the filter skirts (Hann window). |
Mix & output
| Parameter | Range | Default | Description |
|---|---|---|---|
| Wet_dry_percent | 0–100 | 50 | 0 = dry only, 100 = wet only. |
| Fadeout_duration_s | any positive | 1.2 s | Cosine fade‑out applied at the end of the tail to avoid clicks. |
| Draw_visualization | yes/no | yes | Show waveforms, bandpass shape, IR envelope, and summary. |
| Play_result | yes/no | yes | Auto‑play after processing. |
Visualization (Praat picture)
When Draw_visualization = 1, the script draws:
- Original waveform (grey).
- Result waveform (blue) with wet/dry percentage.
- Bandpass filter shape (left panel) – idealised Hann bandpass response (gain vs. frequency). The passband is shaded, and the smooth transitions are shown.
- IR envelope with chirp (right panel) – the generated impulse response envelope over time, showing both the raw modulated signal (purple) and the underlying exponential decay (dotted brown).
- Parameter summary – IR duration, density, decay base, bandpass range.
FAQ / troubleshooting
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).
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).
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).
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.
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.