Fractal Feedback Reverb — User Guide

Recursive whole-signal delay accumulation with an exponential memory-depth cycle, secondary cosine-modulated delays and an appended reverb tail.

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

What this does

Fractal Feedback Reverb extends the source with a silent tail, then repeatedly adds delayed copies of the evolving signal. Primary delays follow an exponential cycle controlled by Seed_delay_s, Chaos_factor, and Memory_depth. Every iteration also adds a shorter secondary delay whose amplitude is cosine-modulated.

This creates a dense, recursively accumulated delay texture. The term fractal here refers to the repeating exponential delay pattern. The script is not a conventional feedback delay network (FDN) with a matrix of interacting delay lines.

Different from Fractal Feedback: this tool processes the entire signal iteratively and appends a tail. Fractal Feedback instead uses nested temporal segmentation over the original duration.

Quick start

  1. Select exactly one mono or stereo Sound.
  2. Run Fractal_Feedback_Reverb.praat.
  3. Choose a built-in preset or Custom.
  4. Set tail duration, delay-cycle parameters, amplitudes, modulation frequency and Wet/Dry.
  5. Click OK. The output is <source>_fractalReverb_<preset>.

Presets

Built-in presets override all tail, chaos and amplitude controls listed below. Wet/Dry and the two output switches keep the values currently shown in the form.

PresetTailIterationsSeedChaosDepthAmp baseSecondaryMod Hz
Subtle1.5 s200.06 s1.530.120.6525
Medium2.0 s320.08 s1.840.180.7530
Heavy2.8 s480.10 s2.150.240.8538
Extreme4.0 s700.12 s2.560.300.9545
CustomUses the form values.

Parameters

ControlDefaultMeaning
Tail_duration_s2.0 sSilence appended before processing; output duration becomes source duration + tail.
Iterations32Number of primary + secondary recursive additions.
Seed_delay_s0.08 sBase primary delay.
Chaos_factor1.8Exponential multiplier inside the memory cycle.
Memory_depth4Number of exponent positions before the delay pattern resets.
Amplitude_base0.18Starting scale for the per-iteration random primary coefficient.
Secondary_factor0.75Scales the secondary delayed contribution relative to the primary contribution.
Modulation_freq_Hz30 HzCosine amplitude modulation applied to the secondary contribution.
Wet_dry_percent60%Clamped internally to 0–100%.

Delay pattern

Primary delay(i) = Seed_delay × Chaos_factor^((i-1) mod Memory_depth) Secondary delay(i) = Primary delay(i) / Chaos_factor Example: seed 0.08 s, chaos 1.8, depth 4 80 ms → 144 ms → 259.2 ms → 466.6 ms → 80 ms → ...

The primary/secondary delay times themselves are deterministic for a given preset or Custom setting. Randomness enters through the per-iteration amplitude coefficient.

Recursive processing

For each iteration i, the left/mono path calculates:

amp1 = Amplitude_base × (1 - i/Iterations) × randomUniform(0.6, 1.4) amp2 = amp1 × Secondary_factor self ← self + amp1 × self(x - primaryDelay) self ← self + amp2 × self(x - secondaryDelay) × cos(2π × x × Modulation_freq_Hz)

Each formula operates on the evolving working signal, so later passes build on the result of earlier passes. At the final iteration (i = Iterations), the linear amplitude term reaches zero.

Wet/Dry is applied against the extended dry signal (source followed by silence). The output is then peak-normalized to 0.95.

No identity bypass: 0% Wet still returns the dry source plus the appended silent tail, and the non-silent result is normalized to a 0.95 peak.

Channel behavior

Mono

Mono input remains mono. One recursive path is processed and normalized to 0.95.

Stereo

The two channels are processed independently. The right channel uses Chaos_factor + 0.02, Seed_delay + 0.002 s, Modulation_freq - 2 Hz, a different random-amplitude range, and Secondary_factor - 0.03. Left and right are then normalized separately to 0.95 before being combined back to stereo.

3+ channels: the current script creates a one-channel tail for any input that is not stereo, then concatenates it with the source. Consequently the implementation is intended for mono or stereo input; 3+ channel input is not safely supported.

Visualization

The delay plot does not show random amplitude coefficients and does not show the right-channel offset parameters used during stereo processing.

Output behavior