Euclid Engine
Stack interlocking Euclidean percussion rings and watch them slowly phase against each other — Reich-style polyrhythm, ZERO pitch.
Auto-starts in ~1.5 s on desktop · tap button on mobile to unlock audio
Design Notes
Euclidean rhythms (Bjorklund) — E(k, n) distributes k onsets across n steps as evenly as possible using the same remainder algorithm that Euclid used for GCDs. E(3,8) is the Afro-Cuban tresillo; E(5,8) appears in Middle Eastern and African music; E(7,16) is common in jazz subdivisions. Reference: Godfried Toussaint, "The Euclidean Algorithm Generates Traditional Musical Rhythms," 2005.
Reich phasing — each ring runs at BASE_BPM + a tiny driftBpm offset so their downbeats gradually slip against each other, producing an interference pattern that never exactly repeats within a normal listening session. After ~4–8 minutes the rings re-align, then drift again. Inspired by Steve Reich's Piano Phase (1967) and Clapping Music (1972).
Look-ahead scheduler — a setInterval at 25 ms pre-schedules audio events 100 ms ahead using AudioContext.currentTime, so percussion fires with sub-millisecond precision regardless of frame-rate jitter. Visual flashes are queued via setTimeout aligned to the same audio timestamp. Reference: Chris Wilson, "A Tale of Two Clocks," 2013.
Voices — kick (pitch-enveloped sine 150→45 Hz + click), hat (HF noise burst), clave (band-pass exponential decay), shaker (band-pass HF noise). All synthesised in Web Audio — no samples. Output through a DynamicsCompressor brick-wall limiter.