Universal Convolution Generator — User Guide

Nine algorithmic impulse-response generators in one convolution processor, with shared energy normalization, wet/dry mixing and optional reproducible randomness.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 0.4.1 (2026) License: MIT License Repo: https://github.com/ShaiCohen-ops/Praat-plugin_AudioTools
Contents:

What this does

Universal Convolution Generator separates two tasks that are often combined in a single effect. First, it generates an impulse response (IR) from one of nine timing algorithms. Second, it renders that timing pattern as a band-limited pulse-train Sound and convolves the selected source with it.

The nine algorithms therefore differ mainly in where the IR impulses occur: accelerating gaps, bouncing-ball intervals, stochastic burst clouds, Euclidean spacing, Fibonacci sequences, golden-ratio distribution, random-walk spacing, independent stereo Fibonacci patterns, or a swung tempo grid. After generation, all modes use the same normalization, convolution, wet/dry and output-safety stages.

Important: this is not nine unrelated effects hidden behind one menu. It is one convolution architecture driven by nine different temporal grammars for constructing the IR.

What is convolution?

Convolution applies an impulse response to an input sound. Each impulse in the IR creates a delayed, scaled contribution of the source; the complete output is the sum of all of those contributions. A sparse IR therefore behaves like a patterned multi-tap echo, while a dense IR can create a more continuous resonant or reverberant texture.

output = source * impulse_response

In this tool the IR is not recorded from a physical space. It is generated algorithmically from timing rules, then rendered at the source sampling rate and passed to Praat's convolution operation.

Quick start

  1. Select exactly one mono or stereo Sound.
  2. Run Universal_Convolution_Generator.praat.
  3. Choose one of the nine algorithms.
  4. Set Duration, Wet_dry_percent and, when useful, Random_seed.
  5. Click Next, set the algorithm-specific parameters, and run.
  6. Optionally keep Draw_visualization and Play_after_processing enabled.
0% Wet is a true bypass. The script creates a copy of the dry Sound, skips IR rendering and convolution, and does not apply output peak normalization.

Nine IR algorithms

AlgorithmTiming ruleRandom?Key controls
AccelerandoRequested pulses span almost the complete IR. Successive gaps form a geometric sequence whose ratio is Gap_shrink_ratio, so intervals become progressively shorter.NoFirst hit, pulse count, gap ratio
Bouncing BallBegins at the specified first bounce. Flight interval is 2v/g; rebound velocity is multiplied by the restitution coefficient after each bounce. Stops at the IR boundary, at intervals below 1 ms, or after the safety limit.NoFirst bounce, gravity, initial velocity, bounce coefficient
Bursts and TapsTwo fixed taps are combined with randomly placed burst centres. Each burst contributes Gaussian-distributed impulse times around its centre.YesTwo tap times, burst count, points per burst, burst σ
Euclidean RhythmDivides the IR into N equal steps and uses the modular test ((i×K) mod N) < K to distribute K active pulses. The pattern includes a pulse at time 0.NoTotal steps, active pulses
Fibonacci (Mono)Uses the sequence 1, 1, 2, 3, 5… to generate positions proportional to IR duration, then adds Gaussian timing jitter. Terms or jittered taps outside the IR are discarded.YesTerm count, scale divisor, jitter σ
Golden Angle DriftUses fractional parts of successive multiples of (√5−1)/2 to create a deterministic low-discrepancy distribution between the two margins.NoImpulse count, margin
Random WalkStarts near 100 ms (or 10% of very short IRs). Each new gap equals the previous gap plus Gaussian variation, then is clamped to 10…650 ms.YesInitial gap, gap-variation σ
Stereo FibonacciGenerates independent Fibonacci tap sequences for left and right IR channels. The left channel uses scale 100 with 10 ms jitter; the right uses scale 120 with 20 ms jitter.YesTerms per channel, two Fibonacci seeds per channel
SwingBuilds a tempo grid with one pulse per beat, starting after the first beat interval. Every even-numbered pulse is delayed by Swing_delay_s.NoTempo, swing delay
Fibonacci (Mono) describes the IR, not the final channel count. A stereo source convolved with this mono IR remains stereo.

General controls

ControlDefaultMeaning
AlgorithmAccelerandoSelects one of the nine IR-generation rules.
Duration2.0 sDuration of the generated impulse response. It is independent of source duration.
Wet_dry_percent70Linear wet/dry mix. Values are clamped to 0…100%.
Random_seed00 creates a new stochastic pattern each run. A positive integer makes the stochastic tap pattern reproducible.
Draw_visualizationOnDraws dry/output waveforms, the generated tap pattern and a summary.
Play_after_processingOnPlays the resulting Sound.

The script also validates algorithm-specific limits, including pulse-count ceilings, legal bounce/swing ratios, Euclidean K ≤ N, margins inside the IR, and Fibonacci-count limits.

Randomness and reproducibility

Only four algorithms use the random-number generator:

With Random_seed = 0, Praat is initialized unpredictably and a new pattern is expected on each run. With a positive seed, the same parameter set generates the same stochastic tap plan. After a seeded pattern is created, the script restores Praat's random generator to an unpredictable state so the predictable seed does not leak into later unrelated operations.

The remaining five algorithms are deterministic and ignore the seed.

Shared DSP pipeline

  1. Generate tap times. The selected algorithm creates the actual PointProcess used for rendering. Invalid or out-of-range candidate taps are not included.
  2. Render a band-limited pulse train. The PointProcess is converted to Sound at the source sampling rate with adaptation factor 1, adaptation time 0.05 s and sinc depth 2000.
  3. Normalize IR energy. The mono IR is scaled so its discrete energy is 1. For Stereo Fibonacci, both channels receive one common gain derived from the larger channel energy; this preserves their relative L/R relationship.
  4. Convolve. Praat performs sum convolution with zero outside the signal domain.
  5. Wet/dry mix. The convolved Sound is multiplied by the wet level and the original Sound is read directly by time and channel for the dry contribution. Outside the original Sound's time domain, the dry contribution is zero.
  6. Protect peaks once. If the final peak exceeds 0.98, it is scaled down to 0.98. Quiet results are never amplified.
wet = Wet_dry_percent / 100 dry = 1 − wet output = wet × convolved + dry × source
IR energy normalization occurs before convolution. This reduces the automatic loudness advantage that a dense algorithm would otherwise have simply because it contains more impulses.

Channels, duration and level

Visualization

The visualization follows the Praat AudioTools house style and contains:

For stochastic modes, the tap panel shows the actual random pattern generated for that run, not an idealized preview. At 0% wet the pattern is still generated and can be displayed, but the DSP bypass means it is not rendered or convolved into the output.

The dry and output waveform panels use Praat's waveform drawing with automatic amplitude bounds; they should therefore be read as waveform-shape views rather than as a shared absolute-amplitude comparison.

Output

The result is named:

<source>_conv_<Algorithm>

The Info window reports the source, selected algorithm, requested IR duration, wet percentage, deterministic/random seed status, actual tap count, final output duration, channel count and peak.