CA Convolution Reverb — Cellular Automaton IR Generator
Convolution reverb whose impulse response is grown from an Elementary Cellular Automaton (Wolfram rule 0-255). Live cells become signed impulses shaped by exponential decay; the rule chooses the room: chaotic rules give noise-like reverberation, structured rules give self-similar metallic resonators.
What this does
This script implements a convolution reverb whose impulse response is grown from an Elementary Cellular Automaton (Wolfram rule 0-255). Live cells become signed impulses shaped by exponential decay; the rule chooses the room: chaotic rules give noise-like (Schroeder-idealised) reverberation, structured rules give self-similar metallic resonators that no physical room could produce. The result is a new Sound object — the dry sound convolved with the CA-grown IR.
Key Features:
- 5 Presets — Chaotic Room (rule 30), Sierpinski Plate (rule 90), Complex Bloom (rule 110), Granular Traffic (rule 184), Cathedral Chaos (rule 45), plus Custom
- Elementary CA (rule 0-255) — choose any Wolfram rule for the impulse structure
- Frame decorrelation — seeded per-generation rotation kills the samplerate/width comb (room-like reverb)
- Exponential decay — shapes the IR's amplitude envelope
- Wet/dry mix — blend original and reverberated signals
- Stereo support — dry sounds are convolved natively (mono IR broadcast across channels)
- Visualisation — CA matrix image, IR waveform + spectrum, wet waveform, summary strip
Quick start
- In Praat, select exactly one Sound object.
- Run script… →
CA_Reverb_IR.praat. - Choose a preset from the dropdown (Chaotic Room, Sierpinski Plate, Complex Bloom, Granular Traffic, Cathedral Chaos, or Custom).
- If Custom, set Rule (0–255), CA_width, Seed_mode, Ir_duration, Decay_time, Frame_decorrelation.
- Set Wet_dry_percent (0–100%).
- Optionally enable Keep_IR_and_CA to inspect the IR and CA matrix.
- Click OK — script grows the CA, builds the IR, convolves with your sound.
- Result
originalname_CAreverb_presetnameappears in the Objects window.
Convolve command. Frame_decorrelation ON kills the samplerate/width comb (room-like); OFF preserves it (metallic resonator). The IR is shaped with exponential decay and a final fade-out to prevent clicks.
5 Presets
| Preset | Rule | Width | Seed | IR (s) | Decay (s) | Decorr | Character |
|---|---|---|---|---|---|---|---|
| Chaotic Room | 30 | 256 | random | 1.2 | 0.35 | ON | Natural, noise-like, Schroeder-idealised reverb |
| Sierpinski Plate | 90 | 512 | centre | 2.0 | 0.6 | OFF | Metallic comb, self-similar fractal resonator |
| Complex Bloom | 110 | 256 | centre | 2.5 | 0.9 | ON | Swelling, complex, organic reverb |
| Granular Traffic | 184 | 128 | random | 0.8 | 0.2 | ON | Grainy, short, rhythmic texture |
| Cathedral Chaos | 45 | 1024 | random | 4.0 | 1.4 | ON | Vast, chaotic, cavernous hall |
CA Theory — From Rule to Impulse Response
Elementary Cellular Automaton
A 1D binary grid (width W) evolves over discrete generations (t = 1..N).
Each cell's next state depends on its left neighbour, itself, and its right neighbour (3-bit neighbourhood).
Rule 0–255 maps each of the 8 possible neighbourhood patterns to a new state (0 or 1).
Example neighbourhood patterns and their rule bit positions:
- 111 → bit 7
- 110 → bit 6
- 101 → bit 5
- 100 → bit 4
- 011 → bit 3
- 010 → bit 2
- 001 → bit 1
- 000 → bit 0
- Dead cells (0) → silence (no impulse)
- Live cells (1) → ±1 (sign from fixed seeded per-column vector)
- Decorrelation (ON): each generation's row is circularly rotated by a seeded random offset — kills the samplerate/width comb.
- Decorrelation (OFF): rows are read in natural order — preserves the comb at sampleRate/width Hz.
- Exponential decay: amplitude × exp(-t / decay_time)
- End fade: cosine fade-out over 30 ms or 10% of IR duration
Controls
CA & IR parameters (Custom mode)
| Parameter | Range | Description |
|---|---|---|
| Rule | 0–255 | Wolfram elementary CA rule. Chaotic (30, 45) = noise-like; structured (90, 110) = self-similar. |
| CA_width | 16–2048 | Number of cells per row. Wider = longer IR (width × generations). Also sets the comb frequency when decorrelation OFF. |
| Seed_mode | single centre / random row | Centre = deterministic (single live cell at the centre). Random = density 0.5, uses Random_seed. |
| Random_seed | integer | Seed for random row initialisation and decorrelation rotations. |
| Ir_duration | 0.25–10 s | Total impulse response length (clipped to CA width × generations). |
| Decay_time | 0.1–5.0 s | Exponential decay time constant. Shorter = faster decay. |
| Frame_decorrelation | ON / OFF | ON = seeded circular rotation per generation (room-like). OFF = preserve samplerate/width comb (metallic). |
sampleRate / width Hz. For width=512 at 44.1 kHz, the comb is at 86 Hz — a metallic, ringing character. With decorrelation ON, each generation is randomly shifted, breaking the comb and producing a smoother, room-like reverb. Both modes are musically useful — OFF for Sierpinski-like metallic textures, ON for natural reverb.
Applications
Natural-sounding reverb (Chaotic Room)
Use case: Add a realistic-sounding reverb to any sound.
Settings: Chaotic Room preset (rule 30, decorrelation ON). The chaotic CA produces a dense, noise-like impulse response that mimics Schroeder's idealised reverb.
Metallic / resonator effects (Sierpinski Plate)
Use case: Create metallic, ringing, self-similar resonances.
Settings: Sierpinski Plate preset (rule 90, decorrelation OFF). The self-similar CA pattern produces a comb-filtered impulse response with a metallic character.
Experimental / generative reverb
Use case: Explore the full range of CA rules — each rule produces a unique impulse response.
Settings: Custom mode, experiment with different rules (0–255). Rule 110 (Complex Bloom) produces swelling, organic textures; rule 184 (Granular Traffic) produces short, grainy responses.
Cathedral / vast spaces (Cathedral Chaos)
Use case: Create a huge, chaotic hall reverb.
Settings: Cathedral Chaos preset (rule 45, width=1024, IR=4s). The large width and long IR produce a vast, immersive space.
Workflow: Voice → Chaotic Room reverb
Source: Spoken word or vocal recording.
Settings: Chaotic Room preset, Wet_dry_percent = 40%.
Result: A natural, room-like reverb that doesn't colour the voice — the chaotic CA provides a dense, Schroeder-style impulse response.
Workflow: Piano → Sierpinski Plate resonator
Source: Piano recording.
Settings: Sierpinski Plate preset (rule 90, decorrelation OFF), Wet_dry_percent = 60%.
Result: The piano takes on a metallic, ringing character — like playing inside a fractal metal plate. The comb at 86 Hz adds a resonant low-mid emphasis.
Workflow: Drum loop → Granular Traffic
Source: Drum loop.
Settings: Granular Traffic preset (rule 184, width=128, IR=0.8s), Wet_dry_percent = 50%.
Result: A short, grainy reverb that adds texture without washing out the transients — the rule 184 CA produces a rhythmic, traffic-like pattern.
• IR is silent or very quiet: Check that the CA has live cells. Centre seed + rule 0 (all cells die) produces silence. Use rule 30 or 90 for live patterns.
• Comb filter too strong: Turn Frame_decorrelation ON to break the samplerate/width comb. Or choose a different width to shift the comb frequency.
• Muffled / thumping sound: You may be using an older version. v0.3 fixes this: dead cells map to silence, not -1. Update the script.
• IR has click at end: The script applies a 30 ms fade-out. If clicks persist, increase the fade duration by editing the script.
• CA evolution is slow: Reduce CA_width or Ir_duration (fewer generations). The Matrix Formula operation is fast for widths ≤ 1024.
Visualisation
- Title strip — preset, rule, width, generations, decay time, decorrelation status
- CA matrix image — 2D visualisation of the cellular automaton (generation × cell)
- IR waveform — the impulse response (blue curve)
- IR spectrum — frequency content (0–10 kHz), showing the comb or noise-like structure
- Wet output waveform — the reverberated sound
- Summary strip — rule, width, generations, seed, decorrelation, wet/dry, output details