Stereo Shimmer - User Guide

Linear‑spaced echoes with high‑frequency enhancement and polarity alternation. Creates a shimmering, ethereal stereo effect. Now with speed modes (downsampling) for 4–8× faster processing!

Author: Shai Cohen Affiliation: Department of Music, Bar‑Ilan University, Israel Version: 1.0 (2025) – Optimized with speed modes License: MIT License Repo: GitHub
Contents:

What this does

Stereo Shimmer generates a dense series of echoes with linear delay spacing (delays increase linearly from a minimum to a maximum), combined with alternating polarity every four echoes and high‑frequency enhancement via a simple high‑pass‑like FIR filter: y[n] = x[n] + hf * (x[n] – x[n-1]).

Key features:
  • Linear delay progression – creates a smooth, shimmering tail.
  • Polarity alternation (every 4 echoes) – adds phase‑based movement.
  • HF enhancement – boosts the high frequencies of each echo, adding air and sparkle.
  • Left/right decorrelation – right channel uses slightly different parameters (jitter, decay, HF) for wide stereo image.
  • Speed modes – downsample to 22 kHz or 11 kHz for 2–8× faster processing (useful for preview).

Quick start

  1. In Praat, select exactly one Sound object (mono or stereo).
  2. Run script…Stereo_Shimmer.praat.
  3. Choose a Preset:
    • Subtle Shimmer, Medium Shimmer, Heavy Shimmer, Extreme Shimmer
  4. Select a Speed_mode:
    • Full Quality – original sample rate (highest quality, slowest)
    • Balanced – downsample to 22 kHz (approx 2× faster)
    • Fast – downsample to 11 kHz (approx 4–8× faster)
  5. For custom mode (preset = Custom), adjust parameters as desired.
  6. Set Wet_dry_percent (0 = dry only, 100 = wet only).
  7. Click OK. The script downsamples (if selected), adds linear‑spaced echoes, applies HF enhancement, upsamples back, and imports the result as originalname_shimmer_preset.
Tip: For quick previews, use Fast mode. When you're satisfied with the settings, switch to Full Quality for the final render.
Important: This effect is implemented entirely in Praat – no Python required. It uses the Formula command to add delayed copies of the signal. For long files with many echoes (e.g., 180 echoes), processing can be slow – hence the speed modes.

The 4 presets (+ Custom)

PresetEchoesDelay range (ms)DecayHFDescription
Subtle Shimmer4020–8000.960.15Light, gentle shimmer.
Medium Shimmer8020–12000.950.25Balanced, clear shimmer.
Heavy Shimmer12015–18000.940.35Dense, prominent tail.
Extreme Shimmer18010–25000.930.45Extreme, cavernous shimmer.

Each preset also sets jitter_s appropriately.

Speed modes (downsampling)

Processing many echoes with the Formula command can be slow, especially on long files. The speed modes downsample the signal before processing, then upsample back to the original sample rate. This can accelerate processing by a factor of 2–8, with a corresponding reduction in high‑frequency detail.

ModeTarget SRSpeed factor (approx)Use case
Full QualityoriginalFinal render
Balanced22 kHzPreview / general use
Fast11 kHz4–8×Rapid prototyping

After processing, the signal is resampled back to the original sample rate. The HF enhancement still works on the downsampled signal, but its effect may be less pronounced at lower sample rates due to the reduced bandwidth.

Parameters & defaults

Shimmer parameters

ParameterRangeDefaultDescription
Tail_duration_sany positive2.0 sLength of silent tail added after the original sound (allows echoes to ring out).
Number_of_echoesinteger ≥180How many discrete echoes to generate.
Base_amplitude0–10.24Amplitude of the first echo.
Min_delay_sany positive0.02 s (20 ms)Delay of the first echo.
Max_delay_sany positive1.2 sDelay of the last echo.
Decay_factor0–10.95Multiplicative decay per echo (applied after base_amplitude).
Jitter_sany non‑negative0.012 s (12 ms)Random delay variation per echo (adds organic texture).

HF enhancement

ParameterRangeDefaultDescription
HF_enhancement0–10.25Strength of high‑frequency boost. Implemented as y = x + hf * (x – x[n-1]).

Mix

ParameterRangeDefaultDescription
Wet_dry_percent0–100600 = dry only, 100 = wet only.

Output

ParameterDefaultDescription
Draw_visualizationyesShow waveforms, delay pattern, and summary in Praat picture.
Play_resultyesAuto‑play after processing.

Visualization (Praat picture)

When Draw_visualization = 1, the script draws:

Tip: The delay pattern plot clearly shows the linear spacing and alternating polarity. Notice how the echoes alternate between blue (+) and red (–) every four echoes, creating a phase‑based movement in the stereo field.

FAQ / troubleshooting

Processing is very slow

Use one of the Speed modes (Balanced or Fast) to downsample before processing. For a 10‑second file with 180 echoes, Fast mode can be 8× faster. The result is upsampled back to the original sample rate, so the final audio length is preserved.

Output is silent / no shimmer heard

Check that Wet_dry_percent is not 0. Also verify that Number_of_echoes is ≥10 and Base_amplitude is not too low. The script prints the first few delays in the Info window – if they seem reasonable, the effect should be audible.

HF enhancement sounds harsh / causes clipping

The HF enhancement is a simple high‑pass‑style FIR. If it causes clipping, reduce HF_enhancement (e.g., to 0.1). The script scales the signal after each HF pass to prevent runaway amplification.

Right channel differences

To create a wide stereo image, the right channel uses:

  • 25 % more jitter
  • Decay factor reduced by 0.01
  • HF enhancement scaled by 0.92
  • Polarity pattern shifted by 2 echoes

This ensures the left and right echoes are decorrelated without sounding obviously different.

Processing time display

The Info window and visualization show the total processing time (including down/up sampling). This can be used to compare speed modes.

Understanding the HF enhancement formula

The HF enhancement is implemented as: y[n] = x[n] + hf * (x[n] – x[n-1])

This is a simple finite‑difference filter that emphasises changes between samples – i.e., high frequencies. At sample rate 44.1 kHz, this gives a gentle boost starting around 5 kHz. The hf parameter controls the strength (0 = none, 0.25 = moderate, 0.5 = strong).