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).

Author: Shai Cohen Affiliation: Department of Music, Bar‑Ilan University, Israel Version: 2.0 (2026) License: MIT License Repo: GitHub
Contents:

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:

Pipeline:
  1. Build full master audio by generating and mixing small sound events (kicks, beeps, clicks, sweeps, drones, chimes).
  2. Pre‑slice the master audio into frame‑length chunks (step = 0.125 s, ≈8 fps).
  3. Play each chunk while drawing the matching visual frame in the demo window.

Quick start

  1. In Praat, run the script Ikeda_audiovisual.praat (no sound selection needed – the script generates its own audio).
  2. In the form, choose a Work (1–4).
  3. Set Total duration (seconds), Enable color (adds cyan scanlines or coloured pulses), and Master volume.
  4. 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.
Tip: For the full Ikeda experience, use a dark room and a large monitor. The visuals are high‑contrast black‑and‑white (with optional colour accents). Set duration to 60–120 seconds for a complete piece.
Important: This script is entirely self‑contained – no Python required. It uses Praat’s 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.

Kick: 0.9·sin(2π·50·t)·exp(‑t/0.05) (0.15 s)
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.

Sweep: 0.2·sin(2π·(1000 + 4000·t/0.2)·t)·exp(‑t/0.1) (0.2 s)
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.

Drone: 0.3·sin(2π·50·t) + 0.3·sin(2π·52·t) + 0.15·sin(2π·100·t) + 0.08·sin(2π·150·t)
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.

Grey level: (i·31 + frame·7) mod 100 / 100
Audio density: clicks at 8 Hz, kicks at 1 Hz

3‑phase pipeline

Phase 1 – Build master audio
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:

The script implements these sounds using simple exponential‑decay envelopes and sine waves:

Visual design – Ikeda’s visual language

Ikeda’s visuals are minimalist, high‑contrast, and data‑driven:

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.

Colour mode: When Enable color is on, the datamatics scanline becomes cyan, and the spectra central column becomes a gradient (red‑blue). Otherwise, all visuals are black‑and‑white (white on black), matching Ikeda’s typical palette.

FAQ / troubleshooting

Audio generation takes a long time

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.

Playback stutters / audio breaks

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 demo window is blank / shows “Building...” for a long time

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.

Why pre‑slice audio chunks?

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.

Frame rate = 8 fps

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.

Ikeda’s influence

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.