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.
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.
Key Features:
- Pure Praat: no Python, plugins, external DSP libraries, or network service.
- Procedural velvet-noise IR: controllable pulse density and reproducible random seeds.
- Two-band decay: separate low- and high-frequency decay times around an adjustable crossover.
- Adjustable stereo width: gradually move from identical left/right impulse patterns to independently generated patterns.
- Static freeze approximation: hold the reverberant energy before the exponential decay.
- Equal-power mix: choose how much dry sound and synthetic reverb to hear.
- Four presets + Custom: useful spaces and more experimental starting points.
- Diagnostic visualisation: impulse response, band decays, L/R correlation, output waveform, and a parameter summary.
Quick start
- Select exactly one Sound object in Praat (mono or stereo).
- Run
Stereo_Velvet_Noise_Reverb.praat. - Choose Small Bright Room, Long Dark Hall, Glass Cloud, Dense Wash, or Custom.
- Optionally set a Random seed to repeat a particular result; 0 generates a new random seed.
- Enable Show parameters to edit the chosen preset, or select Custom to open the detailed controls automatically.
- Use Freeze approximation if you want a sustained response before the decay.
- Keep Normalize output peak enabled for an easy first render. Enable Draw visualisation to inspect the generated response.
Core concept
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.
Controls
Main dialog
| Control | Default | Function |
|---|---|---|
| Preset | Small Bright Room | Four starting designs or Custom. |
| Random seed | 0 | 0 makes a new random pattern; any fixed seed reproduces the same pulse choices. |
| Freeze approximation | Off | Switches from immediate exponential decay to a static hold followed by decay. |
| Freeze hold (s) | 3.0 | Duration of the held portion when Freeze is enabled. |
| Normalize output peak | On | Scales the rendered output to the requested peak. |
| Target peak (dBFS) | -1.0 | Target between -60 and -0.1 dBFS. |
| Show parameters | Off | Opens the detailed parameter dialog. |
| Draw visualisation | On | Shows the IR and rendering diagnostics in Praat Picture. |
| Play result | On | Plays the final rendered Sound. |
Detailed parameters
| Parameter | Allowed range | Musical effect |
|---|---|---|
| RT60 | 0.1–60 s | Base time for a 60 dB decay; modified independently for the low and high bands. |
| Density | 500–4,000 pulses/s | Controls the spacing and graininess of the velvet reflections. |
| Crossover | 400–5,500 Hz* | Boundary between low- and high-frequency decay behaviour. |
| Low decay multiplier | 0.1–4 | Lengthens or shortens the lower-band decay relative to RT60. |
| High decay multiplier | 0.1–4 | Lengthens or shortens the upper-band decay relative to RT60. |
| Stereo width | 0–100% | Probability-based sharing versus independence of left/right impulse patterns. |
| Predelay | 0–500 ms | Delays the wet response relative to the dry sound. |
| Dry wet | 0–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.
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.
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.
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.
| Width | IR 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.
Dry/wet & level handling
The dry and wet components are combined with an equal-power crossfade:
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.
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
| Component | Requirement |
|---|---|
| Praat | Praat 6.3+. |
| Input | Exactly one selected mono or stereo Sound. |
| Python | Not required. |
| External plugins, libraries, or cloud | Not required. |
| Processing | Offline rendering with Praat's native convolution. |
Limitations & performance
- Offline processing: this is not an interactive or real-time reverberation effect.
- Designed IR rather than measured acoustics: the result is a synthetic statistical response, not a physical room reconstruction.
- Two frequency regions: decay shaping uses a complementary low/high split rather than arbitrary multiband spectral control.
- Stereo output: mono and stereo sources are supported, but multichannel surround input is not.
- Finite freeze: the hold does not implement an indefinite feedback loop.
- Long settings consume memory: IR length is limited to 180 s and 224 samples per channel, with an additional approximate 4 GB working-memory guard. Longer source recordings and tails can be expensive.
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.