Stereo Velvet Noise Reverb — Stochastic Stereo Reverb

Build richly diffuse or deliberately grainy stereo reverberation from sparse, randomly positioned impulses. Shape the decay independently in low and high frequencies, control stereo decorrelation, and extend the tail into static, freeze-like textures — entirely within Praat.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 1.1 (2026) Category: Reverb License: MIT License Repo: Praat AudioTools
Contents:

What this does

Stereo Velvet Noise Reverb generates its own two-channel impulse response (IR) using velvet noise: isolated positive and negative impulses placed at randomly selected positions in a regularly spaced temporal grid. The impulses are shaped into decaying responses and convolved with your source using Praat's native convolution engine.

No external impulse response is needed. Unlike a convolution processor that loads a room recording, this tool designs a new stereo IR from the selected parameters. Use it for compact ambience, dark halls, spatially diffuse washes, or abstract reverberant clouds.

Key Features:

Quick start

  1. Select exactly one Sound object in Praat (mono or stereo).
  2. Run Stereo_Velvet_Noise_Reverb.praat.
  3. Choose Small Bright Room, Long Dark Hall, Glass Cloud, Dense Wash, or Custom.
  4. Optionally set a Random seed to repeat a particular result; 0 generates a new random seed.
  5. Enable Show parameters to edit the chosen preset, or select Custom to open the detailed controls automatically.
  6. Use Freeze approximation if you want a sustained response before the decay.
  7. Keep Normalize output peak enabled for an easy first render. Enable Draw visualisation to inspect the generated response.
Input: one selected mono or stereo Sound. The original Sound is preserved and a new stereo Sound is created.

Core concept

Randomly positioned ±1 pulses → stereo velvet-noise trains ↓ low- / high-frequency decay envelopes ↓ complementary two-band split ↓ stereo impulse response + pre-delay ↓ native Praat convolution ↓ equal-power dry/wet mix ↓ optional peak normalisation → stereo Sound

The generated IR determines both the time structure and the stereo character of the reverberation. Lower pulse densities expose discrete reflections and granular textures; higher densities create a denser, smoother response. Decay multipliers allow dark or bright tails without introducing a second unrelated pulse generator for each frequency band.

Four presets + Custom

Small Bright Room

Short 0.6 s base RT60, dense 3,000-pulse/s pattern, 5 ms pre-delay, moderate 60% stereo width, and 25% wet mix. A compact, relatively bright ambience.

Long Dark Hall

4.5 s base RT60, slower bass decay than treble, 30 ms pre-delay, 85% width, and 40% wet mix. A spacious tail that progressively darkens.

Glass Cloud

8 s base RT60 with sparse 900-pulse/s reflections and a longer high-frequency decay, 60 ms pre-delay, 100% width, and 60% wet mix. An expansive, grainy, bright-leaning texture.

Dense Wash

12 s base RT60, maximum 4,000-pulse/s density, longer low-frequency decay, 15 ms pre-delay, fully independent pulse patterns, and 70% wet mix. A dense atmospheric field.

Custom

Opens the parameter dialog to set all decay, density, frequency, stereo, pre-delay, and mix parameters directly.

Preset editing: enabling Show parameters opens the detailed controls pre-filled with the selected preset, so presets can also serve as editable starting points.

Controls

Main dialog

ControlDefaultFunction
PresetSmall Bright RoomFour starting designs or Custom.
Random seed00 makes a new random pattern; any fixed seed reproduces the same pulse choices.
Freeze approximationOffSwitches from immediate exponential decay to a static hold followed by decay.
Freeze hold (s)3.0Duration of the held portion when Freeze is enabled.
Normalize output peakOnScales the rendered output to the requested peak.
Target peak (dBFS)-1.0Target between -60 and -0.1 dBFS.
Show parametersOffOpens the detailed parameter dialog.
Draw visualisationOnShows the IR and rendering diagnostics in Praat Picture.
Play resultOnPlays the final rendered Sound.

Detailed parameters

ParameterAllowed rangeMusical effect
RT600.1–60 sBase time for a 60 dB decay; modified independently for the low and high bands.
Density500–4,000 pulses/sControls the spacing and graininess of the velvet reflections.
Crossover400–5,500 Hz*Boundary between low- and high-frequency decay behaviour.
Low decay multiplier0.1–4Lengthens or shortens the lower-band decay relative to RT60.
High decay multiplier0.1–4Lengthens or shortens the upper-band decay relative to RT60.
Stereo width0–100%Probability-based sharing versus independence of left/right impulse patterns.
Predelay0–500 msDelays the wet response relative to the dry sound.
Dry wet0–100%0 = source only; 100 = generated reverb only.

*The crossover must also be sufficiently below the source sample rate's Nyquist frequency. Pulse density must leave at least two samples per grid cell.

Velvet-noise structure

A single positive or negative pulse is placed randomly within each time-grid cell. This creates a sparse impulse train whose average density is controlled by Density. Pulse positions and signs are generated separately for the stereo channels except where the width control requests shared pulses.

Grid period (samples) = sampling rate / pulse density Pulse amplitude = +1 or -1 One pulse per grid cell, per channel

With a fixed seed, you can reproduce a particular reverberation structure while experimenting with decay, spectral balance, and mixing. The Info report shows the requested and realised density.

Frequency-dependent decay

The same pulse train is processed through two distinct decay envelopes. The low band is extracted with a Hann low-pass filter; the upper band is the complementary residual. These are recombined into a single stereo IR.

Low-band decay time = RT60 × Low multiplier High-band decay time = RT60 × High multiplier

For example, a low multiplier of 1.3 and high multiplier of 0.45 make the bass persist longer than the treble. Reversing the relationship produces brighter, more synthetic reverberation.

Complementary bands: with equal decay multipliers, the low and high contributions recombine into the original single-envelope pulse response. The crossover is a spectral shaping control, not an additional reverb generator.

Stereo width

Stereo width determines how often a pulse is shared by both impulse responses. Shared events use the same position and sign; independent events are drawn separately for left and right.

WidthIR behaviour
0%Identical left and right pulse patterns.
50%Approximately half the pulse events are shared; the remaining events differ between channels.
100%Independent left and right pulse patterns for maximum statistical decorrelation.

For a mono source, each channel is convolved with its own IR. For stereo input, the left source channel is convolved with the left IR and the right channel with the right IR; stereo output therefore also depends on the source material.

Freeze approximation

With Freeze approximation enabled, the pulse amplitudes remain at a sustained level for the selected hold time; the standard frequency-dependent exponential decay begins afterwards. This can generate slowly evolving clouds and extended resonant fields.

Normal: pre-delay → exponential low/high decay Freeze: pre-delay → static hold → exponential low/high decay
Not real-time or recursive freeze. This creates one finite impulse response with a hold section. It does not capture and endlessly feed back the live reverb tail.

Dry/wet & level handling

The dry and wet components are combined with an equal-power crossfade:

dry gain = cos(mix × π / 2) wet gain = sin(mix × π / 2) where mix = Dry wet / 100

Dry wet = 0% is a true bypass: the script returns a stereo copy of the source at its original duration and level, without a reverb tail or output normalisation. At other mix settings, the convolution tail is retained.

The impulse response is energy-normalised before convolution to keep broadband wet levels reasonably consistent when changing density and decay time. Perceived loudness can still vary with spectral balance, source content, and freeze settings.

Output level: optional peak normalisation scales the final Sound to the target; when disabled, signals that exceed the script's safety ceiling are attenuated to prevent clipping. The Info report includes the resulting output peak.

Visualisation

When Draw visualisation is on, a multi-panel Praat Picture display explains the resulting reverberation using generated and measured data.

1 — Impulse Response

Generated stereo IR waveforms: blue for left and orange for right. Dashed markers indicate pre-delay and, when active, the end of the freeze hold.

2 — Band Decay

Measured low- and high-band levels over time, shown against the intended decay trajectories. Solid curves are measured; dotted lines show the design.

3 — L/R Correlation

Measured correlation between IR channels across successive windows, with the expected shared-pulse fraction indicated for reference.

4 — Output and Dry

Final left/right waveform compared with the dry contribution, making the reverberant tail and stereo movement easier to inspect.

Summary

Pulse density, shared events, decay times, crossover, pre-delay, mix, seed, freeze settings, and output measurements.

Interpretation: the correlation panel measures the generated IR, not a guarantee about the correlation of every processed source. The dry overlay is shown before the final peak-normalisation stage.

Outputs

The script creates a new stereo Sound named from the selected source:

Source_velvetverb

The original Sound remains unchanged. The Info window reports the chosen preset and seed, realised pulse density, stereo sharing, low/high decay times, IR length, memory estimate, and final duration and peak.

Requirements

ComponentRequirement
PraatPraat 6.3+.
InputExactly one selected mono or stereo Sound.
PythonNot required.
External plugins, libraries, or cloudNot required.
ProcessingOffline rendering with Praat's native convolution.

Limitations & performance

For a first test, start with a short source and Small Bright Room. Longer decay times, high density, and Freeze can substantially increase rendering time and memory use.

Musical applications

Compact acoustic ambience

Give dry instrumental recordings a short stereo reflection field without loading an external room response. Starting point: Small Bright Room.

Dark, slowly disappearing space

Allow bass energy to outlast upper harmonics, useful for drones, piano resonance, and sustained instrumental phrases. Starting point: Long Dark Hall.

Bright, granular reverberant clouds

Expose individual stochastic reflections and deliberately extend the treble tail for fragile, crystalline textures. Starting point: Glass Cloud.

Dense atmospheric layering

Transform transient or noisy source material into a broad stereo wash. Starting point: Dense Wash.

Static freeze-like soundscapes

Enable Freeze approximation and lengthen the hold to sustain the response before the eventual decay. Combine it with a fixed seed to refine the same statistical texture across renders.

Compositional idea

Use the same source and fixed seed with contrasting low/high decay multipliers. The pulse pattern stays reproducible while the spectrum and sense of duration change — turning reverberation into a controlled compositional parameter.