8-Channel Delay
Per-channel and cross-channel delays for octophonic layouts: tempo sync, feedback matrices, filters, modulation, and ping–pong/ring patterns. Designed for creative spatial echoes and ambience design.
What this does
Applies delay lines to each of the eight channels of an input Sound, with optional cross-feeding between channels to create motion (ping–pong, ring chases, diffusion). Each delay has independent time, feedback, filter, level, and modulation. A global feedback matrix enables complex energy circulation while ensuring stability.
- 8 in / 8 out with preserved channel order.
- Tempo sync in musical note values or ms/samples.
- Feedback matrix (8×8) with normalization & stability guard.
- Filters per line: HP/LP tilt, damping, DC removal.
- LFO modulation of delay time for chorus/flange-like motion (wow-safe).
Quick start
- Select an 8-channel Sound in Praat.
- Run script… →
8-Channel Delay.praat. - Pick a routing pattern (Ping-Pong, Ring, Cross, Matrix).
- Set time (ms or synced), feedback, and mix (dry/wet).
- Optionally enable filters and modulation.
- Click OK — a processed 8-channel Sound is created.
Routing & Patterns
| Pattern | Description |
|---|---|
| Straight | Each channel delays itself only. |
| Ping–Pong (Pairs) | Pairs (0↔1, 2↔3, 4↔5, 6↔7) exchange echoes. |
| Ring | 0→1→2→…→7→0 circular chase; set per-step gain. |
| Cross | Fronts feed rears and vice versa (0→5,1→4,2→7,3→6 etc.). |
| Matrix | User-specified 8×8 feedback matrix for custom diffusion. |
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| time_mode | option | ms | ms | samples | sync |
| bpm | real | 120 | Used when time_mode=sync |
| note_value | option | 1/4 | 1/1, 1/2, 1/4, 1/8, 1/16, dotted, triplet |
| time_ms | real | 350 | Base delay for channels (overridable per channel) |
| feedback | real | 0.35 | 0..0.99 global feedback (used if no matrix) |
| mix_dry_wet | real | 0.5 | 0=dry, 1=wet |
| stereo_width | real | 1.0 | For pair/ring patterns, scales crossfeed asymmetry |
| normalize | boolean | yes | Peak normalize output to norm_target |
| norm_target | real | 0.99 | Peak amplitude target |
| report | boolean | no | Print effective times and matrix eigenvalues |
Per-Channel Controls
| Parameter | Type | Description |
|---|---|---|
| time_ms_ch | CSV | Delay per channel (8 values) |
| level_db_ch | CSV | Tap output level trims |
| fb_ch | CSV | Per-channel feedback (if matrix unused) |
| pan_spread_ch | CSV | Optional spread to neighboring channels at tap |
| offset_ms_ch | CSV | Additional offset for groove (swing) |
Feedback Matrix
Use an 8×8 matrix M to feed delayed energy between channels: y = x + M * z, where z is the vector of delayed samples from each line. Diagonal = per-channel feedback; off-diagonals = crossfeeds.
| Parameter | Type | Default | Description |
|---|---|---|---|
| use_matrix | boolean | no | Enable matrix feedback |
| M_csv | text | "" | Rows separated by |, values by commas |
| matrix_norm | option | spectral | spectral | row | none |
| spectral_limit | real | 0.98 | Clamp spectral radius ρ(M) ≤ limit for stability |
0,a,0,0,0,0,0,a creates clockwise/counterclockwise ping–pong.Filters & Modulation
| Parameter | Type | Default | Description |
|---|---|---|---|
| hp_hz | real | 20 | High-pass inside feedback path |
| lp_hz | real | 12000 | Low-pass for damping |
| damp_db_per_s | real | 0.0 | Additional decay per second inside loop |
| mod_rate_hz | real | 0.0 | Delay-time LFO rate (0 disables) |
| mod_depth_ms | real | 0.0 | Peak LFO depth (ms) |
| mod_wave | option | sine | sine | triangle | random-hold |
| interp | option | cubic | Interpolation for fractional delays |
Presets
🏟️ Stadium throw
time=420 ms, pairs ping–pong, feedback=0.42, lp=9 kHz, mix=0.35
🌀 Ring chase
pattern=Ring, step gain 0.35, time_ch=180,220,260,300,340,380,420,460 ms
🎲 Diffuse matrix
use_matrix=yes; M=circulant with 0.28 on ±1, 0.1 on ±2; spectral_limit=0.95; lp=8 kHz
🌊 Chorus echo
mod_rate=0.3 Hz, mod_depth=7 ms, time=360 ms, feedback=0.25, mix=0.4
Workflow & Tips
- Comb filtering: When mixing dry+wet, short times (<25 ms) cause combs; increase time or reduce wet.
- Stability: Keep total loop gain < 1. Use spectral_limit when using matrices.
- Localization: For clear echoes, avoid heavy crossfeed; for ambience, use matrix diffusion and LP damping.
- Groove: Use offset_ms_ch to humanize repeats or create swing between pairs.
- Pre-delay: For reverb pre-delays, set time 30–80 ms with no feedback.
Math
Delay with Feedback
Stability requires spectral radius ρ(M_eff) < 1, where M_eff includes per-channel feedback and filter gains.
Tempo Sync
Fractional Delay
Performance
- Buffering: Long delays require memory proportional to max(D_i).
- Interpolation: Cubic is a good speed/quality trade-off; sinc is cleaner but heavier.
- Matrix ops: Matrix feedback adds O(8²) per sample; acceptable for octo layouts.