Crystalline Cascade (Quantum Flutter) — User Guide

Create shimmering, crystalline reverb tails using Poisson-process stochastic impulses, reverse-exponential envelopes, and triple-layer mixing for complex, organic textures.

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

What this does

This script creates quantum flutter reverb — a sophisticated multi-layer effect combining stochastic (random) impulse generation via Poisson processes, reverse-exponential amplitude envelopes, complex frequency modulation, and triple-layer mixing. The result: shimmering, crystalline, organic reverb tails that sound like cascading ice crystals, quantum particle decay, or complex acoustic reflections in impossible spaces. Unlike traditional reverb (simple exponential decay) or algorithmic delay (regular echoes), quantum flutter creates dense, random-yet-structured textures with evolving spectral content. The name reflects the quantum-mechanical inspiration: randomness with statistical regularity, like radioactive decay or photon emission.

Key Features:

What is a Poisson Process? Named after French mathematician Siméon Denis Poisson (1837). Models events occurring randomly over time with constant average rate but unpredictable exact timing. Examples: radioactive decay (atoms disintegrate randomly but average rate constant), photon arrivals at detector, phone calls to call center, customer arrivals at store, rain drops hitting surface. Key property: memoryless — past events don't predict future (unlike periodic patterns). In audio: Poisson impulses create natural-sounding randomness — not periodic (boring) or clustered (unnatural), but organically scattered with statistical regularity. This is how nature generates "random" events, now applied to reverb tail construction.

Technical Implementation: (1) Extend input with silent tail (duration parameter) to allow reverb space, (2) Split stereo to L/R channels (process independently), (3) Create Poisson process: random point pattern with specified density (avg impulses per second), (4) Convert Poisson points to pulse train Sound, (5) Apply reverse-exponential envelope: base^((t-t_start)/(t_end-t_start)-1) — grows from near-zero to peak then decays, (6) Apply nested FM modulation: amplitude × (1 + depth × cos(2πft + nested_sin)), (7) Convolve modulated impulse train with input, (8) Mix three layers: (a) original × 1.0, (b) original × attenuation (0.7), (c) convolved × mix (0.35), (9) Peak normalize final output. Key insight: Poisson randomness + exponential growth + FM = complex, evolving texture impossible with simple delay/reverb algorithms. Triple mixing creates depth and richness.

Quick start

  1. In Praat, select exactly one Sound object (mono or stereo).
  2. Run script…Crystalline_Cascade.praat.
  3. Choose preset: Subtle (light), Medium (balanced), Heavy (dense), Extreme (very dense).
  4. Or select Custom and adjust parameters manually.
  5. Click OK — script processes (10-30 seconds depending on length/density).
Quick tip: Start with Medium Flutter preset for balanced quantum reverb (800 impulses/sec density, 2s tail). Works beautifully on: vocals (ethereal shimmer), synth pads (lush ambience), percussion (crystalline decay), acoustic instruments (impossible space). Stereo files processed with independent L/R parameters for width. Processing moderate speed (convolution + Poisson generation). Result auto-plays. Experiment with presets before diving into custom parameters.
Important: Processing adds silent tail to input — output longer than original (input_duration + tail_duration). Very high Poisson density (>2000) can create CPU-intensive processing and near-continuous noise rather than discrete flutter. Extreme settings may sound harsh — balance density with modulation depth. Stereo processing uses different Poisson parameters for L/R (slightly different densities create width). Mono input produces mono output; stereo input produces stereo with decorrelated channels. Scale_peak parameter prevents clipping but may reduce loudness — increase if output too quiet.

Stochastic Process Theory

⚛️ Quantum Inspiration

Quantum mechanics: Particles exhibit random behavior with statistical regularity

Radioactive decay: Atoms decay randomly, half-life predictable but exact timing unknown

Photon emission: Light quanta emitted stochastically from atoms

Audio parallel: "Quantum flutter" = statistically random impulses like particle events

Poisson Process Fundamentals

Mathematical Definition

Poisson process: Random point process where events occur independently with constant average rate λ (lambda)

Probability of k events in time interval t: P(k events in time t) = (λt)^k × e^(-λt) / k! where: λ = average rate (events per unit time) t = time interval k = number of events e = Euler's number ≈ 2.71828 Example: λ = 800 events/second Average 800 impulses per second But exact timing random Spacing between events exponentially distributed

Key Properties

1. Memoryless (Markov property):

2. Stationary:

3. Independent increments:

4. Exponentially distributed inter-event times:

Audio Application: Poisson Impulse Trains

Why Poisson for Reverb?

MethodCharacterProblems
Regular spacingPeriodic echoesComb filtering, metallic, unnatural
Pure randomUnpredictableClusters and gaps, inconsistent density
Poisson processNatural randomnessNone — optimal for organic texture

Perceptual advantage:

🎲 Poisson in Nature & Science

Physics: Radioactive decay, cosmic ray arrivals, Brownian motion

Biology: Neuron firing patterns, bacterial colony growth, mutation events

Astronomy: Photon detection, star distribution in galaxies

Engineering: Network packet arrivals, traffic flow, queue theory

Audio: Natural sound textures (rain, gravel, granular synthesis)

Reverse Exponential Envelope

Formula Breakdown

Envelope applied to impulse train:

amplitude(t) = base^((t - t_min)/(t_max - t_min) - 1) where: base = exponential_base parameter (default 120) t = current time t_min = start time (0) t_max = end time (tail_duration) Normalized time: τ = (t - t_min)/(t_max - t_min) τ ranges from 0 to 1 Amplitude = base^(τ - 1) At t = t_min (τ = 0): amplitude = base^(-1) = 1/base ≈ 0.0083 At t = t_max (τ = 1): amplitude = base^0 = 1.0

Reverse Exponential Behavior

Traditional exponential decay: e^(-t) — starts loud, decays to silence

Reverse exponential growth: base^(t-1) — starts quiet, grows to peak, then decays

Amplitude over time (base = 120, normalized time 0→1): τ=0.0: 120^(-1.0) = 0.0083 ← very quiet τ=0.2: 120^(-0.8) = 0.0245 τ=0.4: 120^(-0.6) = 0.0722 τ=0.6: 120^(-0.4) = 0.2128 τ=0.8: 120^(-0.2) = 0.6272 τ=1.0: 120^(0.0) = 1.0000 ← peak Then combined with sound duration creates decay: Early: impulses quiet (reverse growth building) Peak: impulses loud (maximum around 2/3 through) Late: impulses fade (natural decay beyond peak)

Why "reverse" creates appealing texture:

Effect of Base Parameter

BaseGrowth RateCharacter
50-80Slow growthGradual build, extended texture
100-120Moderate growthBalanced build, musical
140-160Fast growthQuick onset, concentrated peak
>180Very fast growthAbrupt, almost gate-like

Complex FM Modulation

Full Modulation Formula

final_amplitude = base_amplitude × modulation_factor modulation_factor = 1 + depth × cos(2πft + nested_modulation) nested_modulation = 10 × sin(2πt × 3) where: depth = modulation_depth (default 0.6) f = modulation_frequency (default 60 Hz) t = time nested_modulation adds complexity Expanded: modulation = 1 + 0.6×cos(2π×60×t + 10×sin(2π×t×3)) Result: amplitude oscillates around 1.0 Range: [1-depth, 1+depth] = [0.4, 1.6] Creates shimmer/flutter effect

Modulation Components

1. Carrier frequency (60 Hz):

2. Nested modulation (3 Hz):

3. Modulation depth (0.6):

Combined effect:

Triple-Layer Mixing Architecture

Layer Structure

LAYER 1: Original (dry) ├─ Full amplitude (1.0×) └─ Unprocessed input sound LAYER 2: Attenuated original (body) ├─ Reduced amplitude (0.7× default) └─ Same sound, provides body/fullness LAYER 3: Convolved (wet) ├─ Poisson impulse convolution ├─ Reverse-exponential envelope ├─ FM modulation ├─ Mixed at convolution_mix (0.35× default) └─ Creates reverb tail/flutter FINAL MIX: Layer1 + Layer2 + Layer3 └─ Peak normalize to scale_peak

Why Triple-Layer?

Layer 1 (Original):

Layer 2 (Attenuated):

Layer 3 (Convolved):

Combined result:

Stereo Processing

Independent Channel Parameters

Left channel (from parameters):

Right channel (hardcoded variants):

Why Different L/R Parameters?

Decorrelation:

Natural stereo imaging:

Shimmer complexity:

Algorithmic Reverb Context: Traditional reverb algorithms: Schroeder (1960s) used comb + allpass filters, Moorer (1979) added early reflections, plate/spring reverb emulations model physical systems. Modern algorithmic reverb: convolution (impulse response based), FDN (Feedback Delay Network), waveguide mesh. Quantum flutter represents alternative: stochastic impulse generation + complex modulation + multi-layer mixing. Inspiration from: granular synthesis (Roads, Truax), particle systems (computer graphics), quantum mechanics (Schrödinger, Heisenberg uncertainty). This script bridges physics, statistics, and audio processing — using mathematical models of natural randomness to create reverb impossible in physical spaces.

Parameters & Presets

Preset Options

PresetTailDensityCharacter
CustomUserUserFull manual control
Subtle Flutter1.5s500/sLight shimmer, transparent
Medium Flutter2.0s800/sBalanced, musical (default)
Heavy Flutter2.8s1100/sDense, lush ambience
Extreme Flutter4.0s1500/sVery dense, experimental

Core Parameters (Custom Mode)

ParameterTypeDefaultDescription
PresetoptionCustomChoose preset or custom
tail_duration_secondspositive2Reverb tail length
poisson_densitypositive800Average impulses per second
pulse_widthpositive0.08Impulse duration (fraction)
pulse_periodpositive1200Internal pulse generation period
exponential_basepositive120Reverse-exponential growth rate
modulation_depthpositive0.6FM modulation intensity
modulation_frequencypositive60Flutter rate (Hz)
convolution_mixpositive0.35Wet/dry mix for convolved layer
layer2_amplitudepositive0.7Attenuated original level
scale_peakpositive0.88Peak normalization level
play_after_processingbooleanyesAuto-play result

Parameter Details

tail_duration_seconds

Range: 0.5-10.0 seconds

Default: 2.0 seconds

Controls:

poisson_density

Range: 100-3000 (practical: 300-1500)

Default: 800 impulses/second

Controls: Average number of random impulses per second

Density effects:

pulse_width

Range: 0.01-0.5

Default: 0.08 (8% of period)

Controls: Duration of each impulse relative to pulse_period

Effect:

exponential_base