IKEDA/SYN Tetralogy — v2.0 User Guide
Ryoji Ikeda‑inspired audiovisual renderer. Generates synchronised audio and visuals in real time within Praat’s demo window, modelling four Ikeda works: test pattern (Barcodes & Glitch), datamatics (Grids & Scans), spectra (Drones & Light), and supercodex (Genome Barcodes).
What this does
IKEDA/SYN Tetralogy is an audiovisual renderer inspired by the work of Ryoji Ikeda – a Japanese electronic composer and visual artist known for minimalistic, data‑driven, high‑contrast audiovisual works. The script generates synchronised audio and visuals in Praat’s demo window, modelling four Ikeda pieces:
- test pattern – barcodes and glitch textures (2008).
- datamatics – grids, scans, and data visualisation (2006–).
- spectra – drones and pulsating light (2001).
- supercodex – genome barcodes and dense data streams (2013).
- Build full master audio by generating and mixing small sound events (kicks, beeps, clicks, sweeps, drones, chimes).
- Pre‑slice the master audio into frame‑length chunks (step = 0.125 s, ≈8 fps).
- Play each chunk while drawing the matching visual frame in the demo window.
Quick start
- In Praat, run the script
Ikeda_audiovisual.praat(no sound selection needed – the script generates its own audio). - In the form, choose a Work (1–4).
- Set Total duration (seconds), Enable color (adds cyan scanlines or coloured pulses), and Master volume.
- Click Run. The script will:
- Display a progress bar during audio generation.
- Enter the playback loop, drawing visuals and playing audio synchronously.
- At the end, a final frame with the work title is shown.
demo window for real‑time graphics. The frame rate is fixed at ≈8 fps (step = 0.125 s). For longer durations (e.g., 120 seconds), the pre‑computation may take 10–20 seconds.
The four works
1. test pattern (Barcodes & Glitch)
Audio: Kicks (every 8 frames), high‑frequency beeps (every 4 frames), noisy clicks (during glitch regions, frames 24–31 of each 32‑frame cycle).
Visual: Vertical white barcode stripes (kicks), thin vertical lines (beeps), random glitch rectangles (glitch region), and a thin horizontal line across the centre.
Beep: 0.3·sin(2π·10000·t)·exp(‑t/0.01) (0.04 s)
Click: 0.4·Gauss(0,1)·exp(‑t/0.005) (0.015 s)
2. datamatics (Grids & Scans)
Audio: Clicks every 4 frames, sweeps every 16 frames, beeps every 8 frames.
Visual: 10×10 grid of squares (on/off based on (x·y·frame) mod 13). A scanning horizontal line moves from top to bottom (cyan if colour enabled). A full‑width white bar flashes every 16 frames.
Grid: 10×10, square size 8×8 pixels
3. spectra (Drones & Light)
Audio: Continuous drone (50, 52, 100, 150 Hz) plus chimes every 32 frames.
Visual: Pulsating central column whose width follows a sine wave (colour optional). Strobe effect every 32 frames (full‑screen white flash). Thin vertical lines at 20 % and 80 % positions.
Chime: 0.3·sin(2π·4000·t)·exp(‑t/0.1) (0.5 s)
4. supercodex (Genome Barcodes)
Audio: Very dense – clicks every 2 frames, kicks every 8 frames.
Visual: 100 vertical barcode stripes, each with a grey level determined by a pseudo‑random function of stripe index and frame number. Creates a scrolling data‑stream effect.
(i·31 + frame·7) mod 100 / 100Audio density: clicks at 8 Hz, kicks at 1 Hz
3‑phase pipeline
Iterates over frames (0 to total_frames‑1). For each frame, generates audio events (kicks, beeps, clicks, sweeps, chimes) according to the work’s rhythmic pattern. Each event is a short Sound created with a formula, then mixed into the master Sound using a fast array‑based Formula (no per‑sample loop).
Phase 2 – Pre‑slice audio chunks
Extracts each frame’s audio segment (duration = step = 0.125 s) into a separate Sound object. This is done once, before playback, to avoid extraction during the real‑time loop.
Phase 3 – Frame‑by‑frame sync playback
For each frame:
- Draw the visual frame (barcodes, grid, column, or barcode stripes).
- Play the pre‑sliced audio chunk for that frame.
- Remove the chunk to free memory.
The pre‑computation phase ensures that during playback, only drawing and audio playback occur – no analysis or extraction, which could cause stuttering. The frame rate is ≈8 fps (125 ms per frame), which matches the rhythmic granularity of Ikeda’s works.
Sound design – Ikeda’s sonic palette
Ryoji Ikeda’s music is characterised by:
- Extremely short, percussive sounds – clicks, beeps, pulses (often in the 1–20 ms range).
- Sub‑bass kicks – 50 Hz fundamental, short decay.
- High‑frequency beeps – 10 kHz or higher, piercing.
- Continuous drones – often with beating/interference patterns (e.g., 50 Hz + 52 Hz).
- Rhythmic structures based on binary divisions – 2, 4, 8, 16, 32 frames.
The script implements these sounds using simple exponential‑decay envelopes and sine waves:
makeKick– 50 Hz sine, 0.15 s decay.makeBeep– 10 kHz sine, 0.04 s decay.makeClick– Gaussian noise, 0.015 s decay.makeSweep– upward frequency sweep (1000→5000 Hz), 0.2 s.makeDrone– continuous four‑partial tone (50, 52, 100, 150 Hz).makeChime– 4 kHz sine, 0.5 s decay.
Visual design – Ikeda’s visual language
Ikeda’s visuals are minimalist, high‑contrast, and data‑driven:
- Barcodes – vertical or horizontal stripes of varying widths, representing data streams.
- Grids – matrices of squares, often with on/off patterns based on arithmetic functions.
- Scans – moving horizontal lines (like a CRT scan).
- Pulsating columns – central column whose width modulates (spectra).
- Strobe effects – full‑screen white flashes.
- Glitch rectangles – random small rectangles appearing in glitch regions.
The visuals are drawn using Praat’s Paint rectangle and Paint circle commands. To maintain smooth playback at 8 fps, the grid uses 10×10 squares (100 rectangles) – not circles, which are slower. The demoShow() command updates the display after each frame.
FAQ / troubleshooting
For long durations (e.g., 120 seconds), the script generates up to 960 frames × multiple events per frame. The audio generation phase may take 20–30 seconds. This is normal – the script shows a progress percentage in the demo window.
The script pre‑slices all audio chunks before playback. If stuttering occurs, your system may not be fast enough to play and draw simultaneously. Reduce Total duration or increase step (hardcoded to 0.125 s; you can edit it in the script to 0.25 s for fewer frames).
The script updates the demo window during the audio generation phase. If it seems stuck, check the Praat Info window – the script prints progress. For very long durations, the generation may take a minute; this is normal.
During playback, calling Extract part on the master sound would create a new sound object each frame, which is slow and may cause stuttering. Pre‑slicing extracts all chunks once, then during playback we simply Play and remove them – much faster.
The step of 0.125 s (125 ms) gives 8 frames per second. This is sufficient for Ikeda’s style – the visuals are not high‑fps animation but rather rhythmic, stroboscopic structures. You can change step in the script for a different frame rate.
This script is an homage, not a literal reconstruction. It captures the aesthetic of Ikeda’s work: minimalist, data‑driven, high‑contrast, synchronised audiovisual textures. The sound design uses similar psychoacoustic principles (short transients, sub‑bass, high‑frequency beeps) and rhythmic structures based on binary divisions.