Resonant Effect — Delay Feedback Processor
Iterative delay feedback effect — creates echoes, reverb-like textures, comb filtering, and metallic resonances through repeated delayed feedback of a single random delay value.
What this does
This script implements a resonant delay feedback effect — a simple but powerful audio processor that creates echoes, reverb-like textures, comb filters, and metallic resonances through iterative delayed feedback. Unlike standard delay lines with tap outputs, this algorithm applies feedback repeatedly in a loop, building up a complex resonance pattern.
signal = signal + feedback × delayed_signal, repeated for a specified number of iterations. This builds a decaying echo train where each echo is summed rather than pipelined, creating a unique resonant character. The effect ranges from subtle thickening (few iterations, low feedback) to extreme metallic chaos (many iterations, high feedback, short delay).
Key Features:
- 12 Presets — Light Echo, Medium Reverb, Dense Space, Extreme Chaos, Subtle Texture, Comb Filter (Metallic), Flanger-like, Slapback, Cathedral, Small Room, Tape Echo, plus Custom
- Iterative Feedback — Number of repeats (3–30) controls echo density
- Feedback Amount — Decay rate per iteration (0–0.9)
- Random Delay — Single random delay within user-defined range (samples)
- Dry/Wet Mix — Blend original and processed signals
- Visualization — Waveforms, spectrum comparison, and feedback decay curve
Quick start
- In Praat, select exactly one Sound object.
- Run script… →
Resonant.praat. - Choose a preset from the dropdown (12 options).
- Or select "Custom" and adjust Iterations (3–30), Feedback_amount (0–0.9), Max_delay_samples (delay range).
- Set Dry_wet_mix (0 = dry only, 1 = wet only).
- Click OK — script processes and creates output
originalname_presetname.
12 Presets
| Preset | Iterations | Feedback | Max Delay (samples/ms at 44.1k) | Dry/Wet | Character |
|---|---|---|---|---|---|
| Light Echo | 5 | 0.5 | 1000 (=22.7 ms) | 0.7 | Gentle, distinct echoes |
| Medium Reverb | 10 | 0.5 | 1500 (=34 ms) | 0.7 | Denser echoes, smooth decay |
| Dense Space | 20 | 0.5 | 2000 (=45.4 ms) | 0.7 | Very dense, reverb-like |
| Extreme Chaos | 30 | 0.6 | 2500 (=56.7 ms) | 0.7 | High density, metallic ringing |
| Subtle Texture | 3 | 0.4 | 800 (=18.1 ms) | 0.7 | Very subtle thickening |
| Comb Filter (Metallic) | 20 | 0.6 | 50 (=1.1 ms) | 0.6 | Short delay = metallic resonator |
| Flanger-like | 10 | 0.5 | 30 (=0.68 ms) | 0.5 | Very short delay, phase combing |
| Slapback | 3 | 0.4 | 2000 (=45.4 ms) | 0.5 | Classic slapback echo |
| Cathedral | 25 | 0.55 | 3000 (=68 ms) | 0.7 | Long, spacious decay |
| Small Room | 8 | 0.45 | 500 (=11.3 ms) | 0.5 | Subtle room ambience |
| Tape Echo | 5 | 0.5 | 3000 (=68 ms) | 0.5 | Warm, distinct repeats |
| Custom | user | user | user | user | Full manual control |
Theory of Operation
Algorithm
Expansion (what the loop builds)
Impulse response
If the input is a single impulse at time 0, the output after N iterations is:
h[n] = 1 at n = 0
h[n] = g at n = D
h[n] = g + g² at n = 2D
h[n] = g + g² + g³ at n = 3D
... (each echo is the sum of all previous feedback coefficients)
This produces a cumulative build-up rather than simple exponential decay, giving the effect a unique "swelling" character.
Frequency domain: Comb filtering
Parameters
Core parameters
| Parameter | Range | Default | Description |
|---|---|---|---|
| Iterations | 1–30+ | 20 | Number of feedback loops. Higher = denser texture, longer decay. |
| Feedback_amount | 0–0.9 | 0.5 | Gain per iteration. Higher = slower decay, more resonance. Clamped to 0.9. |
| Max_delay_samples | 1–5000+ | 1000 | Upper bound for random delay. Actual delay chosen randomly within 1 to this value each run. |
| Scale_peak | 0–1 | 0.99 | Final peak normalization (prevents clipping). |
| Dry_wet_mix | 0–1 | 0.7 | 0 = dry only (original), 1 = wet only (effect only), 0.7 = 30% dry, 70% wet. |
randomInteger(1, max_delay_samples) with a fixed number.
Applications
Echo / Slapback (Light Echo, Slapback, Tape Echo)
Use case: Add distinct, warm echoes to vocals, guitar, or percussion.
Settings: 3–5 iterations, feedback 0.4–0.5, delay 2000–3000 samples. Dry/wet ~0.5.
Reverb-like Ambience (Small Room, Cathedral)
Use case: Create dense, smooth decay that emulates room or hall acoustics.
Settings: 8–25 iterations, feedback 0.45–0.55, delay 500–3000 samples. Dry/wet ~0.5–0.7.
Comb Filter / Metallic Resonance (Comb Filter, Flanger-like)
Use case: Create robotic, metallic, or "telephone" timbres from any input.
Settings: Very short delay (30–200 samples), moderate to high feedback (0.5–0.7), iterations 10–20. The short delay creates comb notches spaced far apart in frequency.
Extreme / Chaotic Textures (Extreme Chaos)
Use case: Experimental sound design — clangorous, dissonant resonance.
Settings: 30 iterations, feedback 0.6, delay 2000–2500 samples. The cumulative build-up creates a dense, ringing texture that can overwhelm the original sound.
Workflow: Voice → Metallic Resonator
Target: Spoken word or sung phrase.
Settings: Comb Filter preset (delay ~50 samples, 20 iterations, feedback 0.6). Dry/wet = 0.6.
Result: Voice takes on a metallic, robotic character — like speaking through a metal pipe or telephone.
Workflow: Guitar → Ambient Wash
Target: Clean guitar arpeggio.
Settings: Cathedral preset (delay ~3000 samples, 25 iterations, feedback 0.55). Dry/wet = 0.7.
Result: Each note triggers a long, swelling decay that fills the space — like a hall reverb with character.
Workflow: Percussion → Sparse Echoes
Target: Drum loop or single drum hit.
Settings: Light Echo preset (5 iterations, delay ~1000 samples, feedback 0.5). Dry/wet = 0.6.
Result: Clear, spaced echoes that decay smoothly.
• Output is silent or very quiet: Check that wet signal wasn't silent — the script shows a warning. Reduce iterations or increase feedback.
• Clipping / distortion: The script automatically scales the mix to 0.99 peak. If still clipping, reduce feedback or dry/wet mix.
• Effect not noticeable: Increase dry/wet mix toward 1.0, or increase iterations and feedback.
• Too much ringing / metallic sound: Short delays cause comb filtering. For smoother reverb-like textures, use longer delays (2000–4000 samples).
• Different delay each run: This is intentional. To fix a delay, edit the script line:
delay = randomInteger(1, max_delay_samples) → delay = 1000.