Polymeter, polyrhythm, and counter-melody are realized in imperative engines as genuinely separate concurrent timelines that can drift
Voice concurrency — running multiple independent, self-timed threads — is how the imperative engines (ChucK, Sonic Pi, SuperCollider) realize musical concepts like polymeter, polyrhythm, and counter-melody. Each voice runs on its own clock at its own rate, interleaved into one output. This is not the same as layering within a single cycle or pattern: the voices are genuinely separate timelines that drift relative to each other, producing the phase relationships inherent in polymeter. In pattern engines (Strudel/Tidal), polymeter is expressed declaratively within one cycle; in imperative engines it emerges from actual concurrent execution.
Examples
Sonic Pi: two concurrent live_loops, one with sleep 1 (4/4 kick) and one with sleep(4/3) (3/4 hi-hat) — they drift and realign over 12 beats without any explicit phase calculation.
Assessment
Explain why polymeter implemented as two concurrent threads sounds different from polymeter implemented as a single stacked pattern in Strudel. What does ‘genuinely separate timelines’ mean?