Ping-Pong Field — User Guide

Stereo convolution delay field built from two decorrelated sparse impulse responses with alternating spatial offsets and a one-sample high-frequency sparkle component.

Author: Shai CohenAffiliation: Department of Music, Bar-Ilan University, IsraelVersion: 0.5.1 (2026)License: MIT LicenseRepo: https://github.com/ShaiCohen-ops/Praat-plugin_AudioTools
Contents:

What this does

Ping-Pong Field does not run a recursive feedback delay line. It first constructs separate left and right sparse impulse responses, then applies them with FFT convolution. Each IR contains many delayed signed taps whose delay, amplitude, and small local spectral emphasis vary independently. The final result is always a stereo field.

HF sparkle is implemented by placing a small opposite-polarity sample immediately before each main tap. Increasing the parameter therefore changes the local two-sample impulse shape rather than applying a separate equalizer.

Quick start

  1. Select exactly one Sound.
  2. Run Ping_Pong_Field.praat.
  3. Choose Custom, Subtle, Medium, Heavy, or Extreme.
  4. Set Wet/Dry and, if needed, edit delay range, echo count, decay, offset, jitter, sparkle, tail, and fade.
  5. Click OK. The result is named original_pingpong_PresetName.

Presets

PresetTailEchoesDelay rangeBase ampDecayOffsetJitterSparkle
Subtle1.5 s5025–800 ms0.180.962 ms3 ms0.20
Medium2.0 s9020–1200 ms0.250.953 ms4 ms0.30
Heavy2.5 s13015–1600 ms0.300.944 ms6 ms0.40
Extreme3.5 s18010–2200 ms0.350.936 ms8 ms0.50

Wet/Dry, Draw and Play are not replaced by presets.

Parameters

ParameterDefaultMeaning
Tail_duration_s2.0Silent tail appended before mixing.
Number_of_echoes90Number of taps in each channel IR.
Min_delay_s / Max_delay_s0.02 / 1.2Nominal delay span; reversed Custom bounds are reordered internally.
Base_amplitude0.25Initial tap scale before decay and random variation.
Decay_factor0.95Per-tap geometric decay, internally clamped to 0…1.
Ping_pong_offset_s0.003Alternating timing offset that helps separate the two sides.
Jitter_s0.004Uniform random timing deviation around each nominal tap.
HF_sparkle0.3Strength of the one-sample pre-emphasis pair around each tap.
Wet_dry_percent600% dry only, 100% echoes only.
Fadeout_duration_s1.0Cosine fade restricted to the appended tail.

Echo engine

  1. Construct the left IR by distributing taps across the delay range, alternating the spatial offset, adding random jitter, geometric amplitude decay, sign changes, and random amplitude variation.
  2. Add the HF-sparkle sample immediately before each main tap.
  3. Build a decorrelated right IR with a slightly narrower delay range, reversed offset pattern, slightly different decay/amplitude, different sign sequence, and slightly lower jitter/sparkle.
  4. Convolve each dry side with its IR.
  5. Trim the convolution returns to source duration + Tail_duration_s.
  6. Mix dry and echoes according to Wet_dry_percent, fade the appended tail, combine to stereo, and apply a ceiling only if the stereo peak exceeds 0.98.

The random tap jitter and amplitude variation are not seeded, so repeated runs can differ.

Channels & output

Stereo input: left and right source channels remain distinct and are sent through the corresponding decorrelated IRs.

Mono input: the mono source feeds both IRs and becomes a stereo output.

3+ channel input: the source is first converted to mono, then that mono signal feeds the two IRs. The output is therefore stereo, not multichannel.

Output duration is exactly the original duration plus the effective tail. Final peak handling is attenuation-only: signals above 0.98 are scaled to 0.98; quieter signals are not boosted.

Visualization

The figure shows the dry waveform, the first source-duration portion of the stereo result, and a delay-field diagram for up to the first 50 nominal echoes. The delay-field diagram is a structural view: its stored points omit the per-run random jitter and amplitude perturbation used in the actual IR.