Crystalline Cascade — User Guide

Reverse-exponential stochastic convolution that builds a fluttering IR over time and combines it with two source layers.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 0.3.1 (2026) License: MIT License Repo: Praat AudioTools
Contents:

What this does

Crystalline Cascade generates a 4-second Poisson pulse-train IR, multiplies it by a reverse-exponential growth curve and nested amplitude flutter, convolves the source with that IR, and combines the convolution with two source layers. Stereo sources receive slightly different left/right IR parameters for decorrelation.

Core gesture: unlike a conventional decaying reverb envelope, the IR weighting grows from approximately 1 / Exponential_base at the beginning to 1 at the end of its fixed four-second domain.

What is convolution?

Convolution applies an impulse response to a sound. Each event in the IR triggers a delayed copy of the source. A dense stochastic IR therefore turns source energy into a cloud of overlapping repetitions. In Crystalline Cascade the IR is generated mathematically rather than measured from a room.

IR & flutter law

The Poisson process always occupies a fixed 4-second IR domain. Event density is set by Poisson_density; exact event times are random and there is no seed control.

growth(t) = Exponential_base^(t / 4 − 1)
flutterL(t) = 1 + depth × cos(2π f t + 10 sin(2π·3t))
IR_L(t) = pulseTrain(t) × growth(t) × flutterL(t)

The right channel uses a 6.25% higher Poisson density, slightly different pulse-train settings, base × 0.958, depth × 0.917, frequency × 1.083, and a different nested modulation term.

Pulse fields: Pulse_width and Pulse_period are legacy GUI names passed directly to Praat PointProcess: To Sound (pulse train). They are not a literal acoustic pulse width and period in the usual oscillator sense.

Layer architecture

For each processed channel, the internal “cascade” layer is:

cascade = source + Layer2_amplitude × source + Convolution_mix × convolution(source, IR)

The final Wet_dry_percent then crossfades between this cascade layer and the extended dry source. Therefore the wet path itself already contains dry-source energy; Convolution_mix controls only the convolution component inside that composite layer.

Presets

PresetTailDensityBaseDepth / rateConv / Layer2Peak
Subtle Flutter1.5 s500/s1000.40 / 45 Hz0.22 / 0.650.90
Medium Flutter2.0 s800/s1200.60 / 60 Hz0.35 / 0.700.88
Heavy Flutter2.8 s1100/s1400.75 / 75 Hz0.45 / 0.750.86
Extreme Flutter4.0 s1500/s1600.85 / 90 Hz0.55 / 0.800.84
CustomUses the form values.

Presets also set the two legacy pulse-train fields. They do not override Wet_dry_percent, Draw, or Play.

Parameters

ParameterMeaning
Tail_duration_sLength of silence appended to the source before processing and therefore the retained output extension. It does not change the IR, which is always 4 s.
Poisson_densityAverage event rate of the stochastic PointProcess.
Pulse_width / Pulse_periodLegacy arguments forwarded to Praat pulse-train synthesis; not literal pulse duration/period controls.
Exponential_baseControls how quiet the beginning of the reverse-growth curve is. Start value = 1/base.
Modulation_depthAmplitude-flutter depth. Because it is declared positive but not clamped, Custom values above 1 can make the modulation factor cross zero and invert IR polarity locally.
Modulation_frequencyMain flutter frequency in Hz.
Convolution_mixGain of the convolved layer inside the cascade composite; it is not the overall wet/dry control.
Layer2_amplitudeGain of the additional source copy inside the cascade composite.
Wet_dry_percentCrossfade between the composite cascade and extended dry source.
Scale_peakTarget peak used for final normalization.

Output & channel behavior

Visualization

The picture shows Dry and Cascade waveforms, the ideal reverse-exponential growth curve (with a conventional decay curve for comparison), and the actual mono/left IR waveform. Waveforms are autoscaled separately. The envelope panel shows only the growth component; it does not include the Poisson events or flutter modulation.