Delay Array Processor — User Guide
Temporal structure transformation: applies iterative time-domain delays based on divisor arrays to create complex echo patterns, rhythmic textures, and temporal granulation effects.
What this does
This script implements iterative delay array processing — a temporal transformation technique that creates complex delay patterns by applying multiple delay operations sequentially. The algorithm divides the sample length by specified divisors to calculate delay offsets, then applies a difference formula that creates echoes, rhythmic textures, and temporal granulation. Four divisors processed iteratively create compound delay structures impossible with single delay lines. Result: transformed temporal structure where original material is layered with time-shifted copies at mathematically-defined intervals, creating everything from subtle chorusing to dense granular textures.
Key Features:
- Four Divisor Array — Sequential processing with four delay values
- Five Built-in Presets — Default, Fine, Coarse, Extreme, plus Custom
- Iterative Processing — Each divisor applied to result of previous
- Temporal Granulation — Creates complex time-domain textures
- Automatic Scaling — Peak normalization prevents clipping
- Instant Playback — Audition results immediately after processing
self[col+b] - self[col] creates the delay effect by subtracting each sample from its delayed version, emphasizing transients and creating rhythmic patterns. Applications: Experimental composition (temporal textures), sound design (complex echoes), rhythmic transformation (metric modulation), granular-like effects (dense time-layering).
Technical Implementation: (1) Input: Select Sound object, specify four divisor values (positive numbers). (2) Copy sound: Create working copy to preserve original. (3) Calculate sample count: Get total number of samples (a). (4) Iterative processing: For each divisor (1-4): Calculate delay offset b = a/divisor, Apply formula: self[col+b] - self[col] (subtracts current sample from delayed sample), Result becomes input for next iteration. (5) Scaling: Normalize peak to 0.99 (prevents clipping from accumulation). (6) Playback: Automatic audition of result. Key insight: Each iteration compounds the effect. First pass creates one delay pattern, second pass delays that result creating interaction between delays, continuing creates increasingly complex temporal structures. The difference operation (subtraction) emphasizes changes/transients while reducing sustained tones, creating rhythmic, pulsating textures.
Quick start
- In Praat, select exactly one Sound object.
- Run script… →
delay_array.praat. - Choose Preset: Default, Fine, Coarse, Extreme, or Custom.
- If Custom, adjust divisor_1 through divisor_4 values.
- Set scale_peak (normalization level, default 0.99).
- Set number_of_iterations (how many divisors to apply, 1-4).
- Click OK — processing completes instantly, result auto-plays.
- Output appears as "soundObj" in Objects window.
self[col+b] - self[col] is subtractive, not additive. Result emphasizes changes/transients while reducing sustained tones. Very small divisors (<2) create extremely short delays (phase effects, comb filtering). Very large divisors (>50) create long delays (sparse echoes, potential silence gaps). Divisor order matters — different sequences create different results even with same numbers. Iterations compound: 4 iterations with aggressive divisors may create extreme, unrecognizable transformations. Peak scaling to 0.99 prevents clipping but may reduce overall level. No undo — always work on copies. Preset values carefully chosen for musical results; random divisors may create unusable output.
Delay Theory
Divisor-Based Delay Calculation
Basic Formula
Delay offset calculation:
Delay Time Relationships
Common divisors and their musical meanings:
The Difference Formula
Subtractive Delay Operation
Core algorithm:
Why Subtraction?
Sonic characteristics:
📊 Difference Operation Effects
Transient emphasis:
Sudden change: input[i]=0, input[i+b]=1 → output = 1-0 = 1 (preserved)
Attack preserved and emphasized
Sustain reduction:
Steady tone: input[i]=0.5, input[i+b]=0.5 → output = 0.5-0.5 = 0 (canceled)
Sustained portions reduced or eliminated
Rhythmic creation:
Periodic material creates rhythmic pulses at delay intervals
Percussive sources → rhythmic echoes
Tonal sources → rhythmic granulation
Use: Creates textural, rhythmic transformations vs simple echo repetition
Iterative Processing
Compounding Effect
Sequential application:
Complexity Accumulation
Why iterations matter:
Single delay offset, basic echo effect
Relatively transparent, clear delay time
2 Iterations (n=2): Compound delays
Two delay patterns interact
Creates cross-rhythms, more complex texture
3 Iterations (n=3): Dense temporal structure
Three-way interaction between delays
Granular-like density, rhythmic complexity
4 Iterations (n=4): Maximum complexity
Four-way compound delays
Very dense, potentially chaotic temporal texture
Original material heavily transformed
Recommendation: Start with 2-3 iterations, use 4 for extreme effects
Delay Array Patterns
Harmonic vs Inharmonic Divisors
Divisor relationships affect periodicity:
Complete Processing Pipeline
Preset Patterns
Preset Overview
| Preset | Divisors | Character | Best For |
|---|---|---|---|
| Default | 2, 4, 8, 10 | Balanced rhythmic texture | General use, moderate complexity |
| Fine | 2, 3, 5, 7 | Tight, granular, prime-based | Dense textures, polyrhythms |
| Coarse | 4, 8, 12, 16 | Spacious, slower echoes | Sparse patterns, clear delays |
| Extreme | 2, 6, 12, 24 | Dramatic, widely-spaced | Radical transformation |
| Custom | User-defined | Unlimited possibilities | Experimental design |
Default Preset (2, 4, 8, 10)
🎵 Balanced Standard Pattern
Divisors: 2, 4, 8, 10
Delay ratios: 1/2, 1/4, 1/8, 1/10 duration
Character: Mix of binary (2,4,8) and decimal (10) subdivisions
Effect: Clear rhythmic echoes with moderate density
Musical context: Binary divisions create metric coherence, 10 adds variation
Typical applications:
- Starting point for experimentation
- Material with clear rhythmic content
- When moderate transformation desired
- Percussive sources (drums, attacks)
Fine Preset (2, 3, 5, 7)
🎯 Prime Number Granulation
Divisors: 2, 3, 5, 7 (first four primes)
Delay ratios: 1/2, 1/3, 1/5, 1/7 duration
Character: Inharmonic, aperiodic, complex cross-rhythms
Effect: Tight granular texture, dense temporal layering
Mathematical: Prime-based delays create maximum aperiodicity
Typical applications:
- Granular-style temporal fragmentation
- Complex polyrhythmic textures
- Experimental composition
- Transforming sustained tones into rhythmic patterns
Coarse Preset (4, 8, 12, 16)
🌊 Spacious Echo Pattern
Divisors: 4, 8, 12, 16
Delay ratios: 1/4, 1/8, 1/12, 1/16 duration
Character: Slower delays, more spacious, clearer separation
Effect: Distinct echoes, less dense than Fine
Harmonic: 4,8,16 related (powers of 2); 12 adds variation
Typical applications:
- When slower, more obvious delays desired
- Preserving more clarity of original
- Sparse rhythmic patterns
- Material that shouldn't be too dense
Extreme Preset (2, 6, 12, 24)
⚡ Radical Transformation
Divisors: 2, 6, 12, 24
Delay ratios: 1/2, 1/6, 1/12, 1/24 duration
Character: Wide range from half-duration to 1/24
Effect: Dramatic transformation, large delays + fine subdivisions
Risk: May create very abstract, unrecognizable results
Typical applications:
- Maximum transformation/abstraction
- Experimental sound design
- When radical departure from original desired
- Creating extreme rhythmic complexity
Custom Preset Design
- Small divisors (2-4): Long delays, obvious echoes
- Medium divisors (5-12): Moderate delays, balanced effect
- Large divisors (13+): Short delays, granular effect
- Very large (50+): Ultra-short delays, may create comb filtering
- Harmonic sequences: Use multiples (2,4,8 or 3,6,12) for rhythmic coherence
- Prime sequences: Use primes (2,3,5,7,11,13) for complex interactions
- Mixed approach: Combine harmonic + prime (2,3,8,13) for varied texture
🔬 Experimental Divisor Ideas
Fibonacci sequence: [1, 2, 3, 5] — Natural growth pattern
Powers of 2: [2, 4, 8, 16] — Binary metric divisions
Powers of 3: [3, 9, 27, 81] — Exponential spacing
Descending: [16, 12, 8, 4] — Reverse progression
Random primes: [7, 13, 19, 23] — Complex aperiodicity
Clustered: [10, 11, 12, 13] — Tight delay variations
Golden ratio approximations: [2, 3, 5, 8] — Fibonacci subset
Parameters
Primary Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| Preset | option | Default | Choose preset pattern or Custom |
| divisor_1 | positive | 2 | First delay divisor (overridden by preset) |
| divisor_2 | positive | 4 | Second delay divisor |
| divisor_3 | positive | 8 | Third delay divisor |
| divisor_4 | positive | 10 | Fourth delay divisor |
| scale_peak | positive | 0.99 | Peak normalization level (prevents clipping) |
| number_of_iterations | natural | 4 | How many divisors to apply (1-4) |
Parameter Details
Divisor Values
Constraints and recommendations:
Scale Peak
Normalization behavior: