Spectral Echo Cascade — User Guide
A recursive Fibonacci-timed echo processor. Each cascade level adds time-varying feedback at a Fibonacci-derived delay, with progressively changing delay times, exponential level weighting, an optional fixed-millisecond timing mode, and an appended silence tail for the recursive echoes.
What this does
Spectral Echo Cascade converts the selected Sound to a mono processing copy, appends a silent tail, and applies a sequence of recursive feedback-delay passes. The delay of each pass follows a Fibonacci-derived progression, while the feedback gain is modulated over time by the Echo Shimmer controls.
The processor works in the time domain. Echo Shimmer is a cosine modulation of the feedback gain across the output timeline.
Quick start
- Select exactly one Sound object.
- Run
Spectral_Echo_Cascade.praat. - Choose Default, Gentle Echoes, Dense Cluster, Long Tails, or Custom.
- Set the number of cascade levels, decay rate and delay base.
- Leave Use_fixed_ms off for duration-relative delays, or enable it to anchor Level 1 to an absolute millisecond value.
- Adjust Shimmer center/depth and the silence-tail duration.
- Run. The result is named
<source>_fibonacci_echo.
Recursive feedback structure
At one cascade level, let D be the delay in samples and let g[n] be the time-varying feedback coefficient. The Formula behaves as:
The delayed term uses a sample that has already been processed earlier in the same left-to-right Formula pass. A single level therefore produces a recursive sequence of repeats at multiples of its delay rather than adding only one isolated delayed copy.
After a level is complete, the next level runs on that already-processed Sound. The full processor is therefore a cascade of recursive, time-varying feedback delays.
Fibonacci delay progression
The values used by the current cascade are:
The repeated initial 1 of the conventional Fibonacci listing is not used as a separate second level. Each successive cascade level therefore receives the next value in the progression above.
Duration-relative mode — default
With Use_fixed_ms = off:
The calculation uses the original source length before the silence tail is appended. Changing Tail_duration_s therefore changes how long echoes are allowed to continue, but does not change their delay times.
Because the denominator grows through the cascade, later levels normally use shorter delays.
Fixed-millisecond mode
With Use_fixed_ms = on, Level 1 is anchored to Fixed_base_ms. Later levels preserve the same Fibonacci/base timing ratios:
At Level 1, Fibonacci=1, so the ratio is exactly 1 and the requested fixed base time is used.
Echo Shimmer
The feedback gain at cascade level L is modulated across the complete source-plus-tail output:
Level 1 completes approximately one cosine cycle across the output, Level 2 completes two, Level 3 three, and so on. The modulation therefore becomes faster at higher cascade levels.
| Parameter | Role |
|---|---|
| Shimmer_center | Baseline around which the feedback gain moves. |
| Shimmer_depth | Amount of temporal feedback-gain variation. |
If Shimmer_depth exceeds Shimmer_center, the modulation can pass below zero during part of its cycle, reversing the polarity of the recursive echo contribution during those regions.
Decay & feedback safety
Before shimmer modulation, each level receives an exponential weighting:
With the built-in presets, Decay_rate is below 1, so later cascade levels receive progressively smaller base feedback coefficients.
Effective recursive coefficient
For custom settings, the script estimates the maximum possible feedback magnitude from:
If that value reaches or exceeds 0.98, an internal safety multiplier reduces the level so the maximum coefficient is capped at approximately 0.98.
Silence tail & output duration
Before the cascade begins, the script creates a mono silence Sound of Tail_duration_s and concatenates it after the source. Recursive echoes can therefore continue into this region after the original material ends.
The feedback process is bounded by this fixed output duration. Echo energy that would continue beyond the end of the appended tail is not rendered.
Presets
| Preset | Levels | Decay | Delay base | Shimmer center | Shimmer depth | Tail |
|---|---|---|---|---|---|---|
| Default | 6 | 0.75 | 5 | 0.50 | 0.50 | 2.0 s |
| Gentle Echoes | 4 | 0.85 | 7 | 0.45 | 0.35 | 3.0 s |
| Dense Cluster | 8 | 0.70 | 4 | 0.55 | 0.65 | 1.5 s |
| Long Tails | 7 | 0.90 | 9 | 0.50 | 0.40 | 4.0 s |
Named presets overwrite the values shown in this table. They do not change Use_fixed_ms, Fixed_base_ms, Scale_peak, Draw_visualization, or Play_result.
Parameters & effective limits
| Parameter | Default | Exact role |
|---|---|---|
| Preset | Default | Default, Gentle Echoes, Dense Cluster, Long Tails, or Custom. |
| Cascade_levels | 6 | Number of recursive delay passes; internally limited to a maximum of 40. |
| Decay_rate | 0.75 | Positive exponential base used as Decay_rate^level. |
| Delay_base | 5 | Positive denominator offset in both delay-timing modes. |
| Use_fixed_ms | Off | Choose absolute fixed-base timing instead of source-duration-relative timing. |
| Fixed_base_ms | 800 ms | Level-1 delay when fixed-ms mode is active. |
| Shimmer_center | 0.5 | Positive baseline for the time-varying feedback multiplier. |
| Shimmer_depth | 0.5 | Positive cosine-modulation depth. |
| Scale_peak | 0.88 | Final target Sinc70 peak; must be ≤1. |
| Tail_duration_s | 2.0 s | Length of appended silence available for recursive echo decay. |
| Draw_visualization | On | Draw source/output waveforms, delay structure, decay curve and summary. |
| Play_result | On | Play the finished result. |
Channel handling
The DSP itself is mono. A multichannel input is converted to mono before the tail and echo cascade are created. A mono input is copied directly to the private processing Sound.
_fibonacci_echo result is mono, so the input's original stereo or multichannel image is not preserved in the processed output.
Final peak scaling
After all cascade levels have been processed, the script measures the output with Praat's Sinc70 absolute extremum. For a non-silent result it applies:
This is target peak normalization. With the default Scale_peak = 0.88, a non-zero result can be amplified or attenuated to reach that target.
Digital silence is left untouched. The script rejects Scale_peak values above 1.
Visualization
The v0.4.1 Picture view contains four main views plus a summary band:
- Original waveform — the selected source Sound.
- Echo waveform — the mono processed result, including its tail.
- Fibonacci delay structure — one bar per cascade level, bar height = actual delay in milliseconds, label = Fibonacci value used at that level.
- Decay curve —
Decay_rate^levelfor every cascade level. - Summary band — level count, decay rate, final Fibonacci value and tail duration.
Waveform scale
Source and Echo use the same amplitude scale, derived from the larger Sinc70 peak with 5% headroom. Their displayed heights are therefore directly comparable.
Tail marker
A dotted vertical line at the original source duration marks where the appended silence tail begins.
Delay bars
The bar height is the actual calculated delay in milliseconds. The number above each bar is the Fibonacci value used by that level. Bar color varies with the stored level-decay value.
Output behavior
- Name:
<source>_fibonacci_echo. - Channels: mono.
- Sample rate: source sample rate.
- Duration: source duration + Tail_duration_s, subject to the sample grid.
- Original source: unchanged.
- Randomness: none.
- Playback: optional through Play_result.