Crystalline Cascade — User Guide
Reverse-exponential stochastic convolution that builds a fluttering IR over time and combines it with two source layers.
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.
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_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
| Preset | Tail | Density | Base | Depth / rate | Conv / Layer2 | Peak |
|---|---|---|---|---|---|---|
| Subtle Flutter | 1.5 s | 500/s | 100 | 0.40 / 45 Hz | 0.22 / 0.65 | 0.90 |
| Medium Flutter | 2.0 s | 800/s | 120 | 0.60 / 60 Hz | 0.35 / 0.70 | 0.88 |
| Heavy Flutter | 2.8 s | 1100/s | 140 | 0.75 / 75 Hz | 0.45 / 0.75 | 0.86 |
| Extreme Flutter | 4.0 s | 1500/s | 160 | 0.85 / 90 Hz | 0.55 / 0.80 | 0.84 |
| Custom | Uses the form values. | |||||
Presets also set the two legacy pulse-train fields. They do not override Wet_dry_percent, Draw, or Play.
Parameters
| Parameter | Meaning |
|---|---|
| Tail_duration_s | Length 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_density | Average event rate of the stochastic PointProcess. |
| Pulse_width / Pulse_period | Legacy arguments forwarded to Praat pulse-train synthesis; not literal pulse duration/period controls. |
| Exponential_base | Controls how quiet the beginning of the reverse-growth curve is. Start value = 1/base. |
| Modulation_depth | Amplitude-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_frequency | Main flutter frequency in Hz. |
| Convolution_mix | Gain of the convolved layer inside the cascade composite; it is not the overall wet/dry control. |
| Layer2_amplitude | Gain of the additional source copy inside the cascade composite. |
| Wet_dry_percent | Crossfade between the composite cascade and extended dry source. |
| Scale_peak | Target peak used for final normalization. |
Output & channel behavior
- Name:
source_cascade_Preset. - Output duration: source duration +
Tail_duration_s. The convolution is calculated with the full 4-second IR, but only samples inside this retained duration are used. - Tail longer than 4 s: after the four-second convolution response has ended, any additional custom tail is silence.
- Mono: mono in → mono out.
- Stereo: stereo in → stereo out with decorrelated L/R IRs.
- More than two channels: not handled by this script version; it is designed for mono or stereo sources.
- Sample rate: preserved.
- Peak normalization: the result is always normalized to
Scale_peak. At 0% wet, the dry audio is still extended and normalized; this is not an identity bypass. - Stereo normalization: left and right are peak-normalized separately before they are recombined, which can change the original inter-channel level relationship.
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.