Polymeter & Euclidean Rhythm
Two parts of mini-notation generate rhythm rather than spell it out note by note. This page explains how each one arrives at its onsets. Polymetric patterns let groups of different lengths cycle at different rates, phasing against each other like Steve Reich loops. Euclidean rhythms distribute hits as evenly as possible across steps, producing many of the world’s classic rhythmic cells from two numbers.
Polymetric Patterns
Section titled “Polymetric Patterns”Curly braces {...} give each element one step. Without a subdivision modifier, one step equals one full cycle:
let slow = {C4 D4 E4}; // One note per cycle — spans 3 cycleslet fast = [C4 D4 E4]; // All three notes in one cycleThe %N Subdivision
Section titled “The %N Subdivision”%N packs N steps into each cycle. A group of L elements then runs at N/L times the speed of one
pass per cycle: {C4 D4 E4}%3 is the same as [C4 D4 E4], and {C4 D4 E4}%6 plays it twice a
cycle.
When N and L don’t divide evenly, the content wraps — and this is where it gets musical. {C4 D4}%3 has factor 3/2: three onsets per cycle at 0, 1/3, 2/3, but only two notes of content. Cycle 0 plays C4 D4 C4; cycle 1 picks up where it left off with D4 C4 D4. The content shifts by one position each cycle, phasing against the meter until it realigns after L cycles.
Multiple Groups: Shared Grid
Section titled “Multiple Groups: Shared Grid”Comma-separated groups inside {...} are the heart of polymetric writing. All groups land on the same onset grid, but each group’s content cycles at its own rate:
let poly = {C4 E4 G4, F4 A4};Without an explicit %N, N defaults to the first group’s length — here 3. Each group is sped up by its own N/L factor so every voice produces exactly N onsets per cycle:
time 0 1/3 2/3 │ 1 4/3 5/3voice 1 C4 E4 G4 │ C4 E4 G4voice 2 F4 A4 F4 │ A4 F4 A4Voice 1 repeats identically every cycle. Voice 2’s two-note content takes only 2/3 of a cycle per pass, so it drifts one position per cycle and realigns with voice 1 every 2 cycles. That slow churn of two loops sliding past each other is the polymetric sound.
An explicit %N sets the grid density for all groups at once:
let dense = {C4 D4 E4, F4 G4}%6; // 6 onsets/cycle; factors 2 and 3Polymetric {} vs Parallel [,]
Section titled “Polymetric {} vs Parallel [,]”Both layer voices, but they divide time differently. In a parallel group [a b c, d e], each voice
divides the cycle by its own length: three onsets against two, a rhythmic cross within every cycle.
In a polymetric group {a b c, d e}, both voices share one grid of three onsets, and what differs is
the content: the two-note voice runs out early and wraps, so the voices line up differently from one
cycle to the next. Parallel groups cross rhythms; polymetric groups phase melodies.
Euclidean Rhythms
Section titled “Euclidean Rhythms”Give the euclidean algorithm a number of hits and a number of steps, and it spaces the hits as evenly as possible. Three hits over eight steps:
x . . x . . x .That’s the Cuban tresillo — the 3+3+2 cell underneath son, reggaeton, EDM, and half of pop music. Many traditional cells fall out of this one algorithm; the cinquillo, for one, is five hits over eight steps.
Written inline as bd(3,8), an element sounds on the hit positions and rests on the others, all
inside its own slot — so a euclidean element is still one element of its sequence.
Rotation
Section titled “Rotation”A third parameter rotates the hit pattern, wrapping around: the same spacing, starting from a different point in it. Because a rotation keeps the spacing and moves only the downbeat, rotations of one cell played together interlock: each fills gaps the others leave.
The rhythm and its content are separate. euclid() takes a whole pattern as the source and deals its
events onto the hits in order, so the same rhythm can carry a melody — and the order in which a
rhythm and a speed change are applied decides which of the two gets faster.
Next Steps
Section titled “Next Steps”- How Patterns Work — the query model underneath every pattern
- Mini-Notation Grammar —
{},%Nand(k,n,r), with their step and rotation tables - Write Polymetric and Euclidean Rhythms — the recipes
- Add Swing and Human Feel — move the onsets off the grid