Each player is a hand turning on a circle, once per loop. Its notes are marks on the circle, and a note sounds when the hand passes its mark. One formula says how fast every hand turns. This page puts that formula first, then shows what each part of it does: what CIRCLES 1.0 uses, what the dev build adds, and what would fit but isn't in yet.
Read it as three sentences. The hand of player i turns once per loop. It turns at a speed of its own, m. Each note sounds when the hand passes its mark. Everything on this page is one of these symbols at work, so every section below starts with its piece of the formula, marked in colour.
Two things sit outside the formula, as rules on top of it. Jumps: a new length (R changes), and in the dev build a kick, which moves the hand. Between jumps, the formula runs. The feel: it moves each mark a little at random and changes each note's loudness; the hand itself is never touched.
1.0 in one line. With m = 1 the formula solves itself: θi = (B − hi) / Ri, so note k of player i plays on the beats B = hi + (ak mod Ri) + n · Ri, for every whole n. Each player is a periodic signal and CIRCLES is their sum. The dev build makes m move, so the hand can leave its ghost and come back.
Each scope runs live. Press Listen on one to hear it; only one plays at a time. The scopes run a small model in the browser, written to behave like the firmware, with a simple struck-bar sound.
Lengths, windows, tempo, phasing by length, and the feel. Everything in this part is in the released firmware.
A periodic signal is fixed by its period. Two periods in a rational ratio p/q line up again after their least common multiple, and the sum repeats from there.
The black keys (CHOMPI held): ten rational ratios, 1/3, 1/2, 2/3, 3/4, 1, 5/4, 4/3, 3/2, 2 and 3. Any two players meet again within 20 L0 (×5/4 against ×4/3 is the slowest pair); all ten lengths together repeat after 60 L0.
Scale time and the whole waveform stretches. Or keep the waveform and change only the period: the signal is cut to a window and folded back, t mod T. That folding is time aliasing.
A player's length R is in both places, so they cancel: a note plays ak into the loop, as it was played, and a note past the new end folds round (the rings). The ensemble length E is only in the speed, so it is a tempo: everything stretches together. One side effect: a ×1 figure at length ×3 is a frequency divider, heard every third L0 with its shape intact.
When a period changes there are two choices: keep the phase (the hand's angle) or keep the time since the loop began. Keeping the phase is true phasing: any shift is possible. Keeping the time means the angle jumps, because angle = time ÷ length.
1.0 keeps the time, and only on an L0 beat. So after a detour a copy lands on the L0 grid: back in step after 1 L0 at ×5/4, and a quarter, half or three quarters off after 2, 3 or 4 L0. ×4/3 gives thirds, ×3/2 halves, ×2 and ×3 always land in step. The dev build changes this (Part two): a new length lands at the player's own loop start and keeps its phase, so nothing jumps.
Random phase jitter, random amplitude and random dropouts. All of it is noise around a periodic signal; nothing here is periodic itself.
K2 with CHOMPI held. Drawn to scale: 30 ms is 1.5 % of a 2-second L0, so you hear it better than you see it. Above half, notes start to drop out. The swell, a slow drift of loudness, is random from round to round. The feel moves the marks, never the hand, so the jitter never adds up: each repeat is late or early against the player's own place, which stays where it is.
The dev build is in development. It gives every player a speed of its own, through one equation: players can drift, be kicked out of step, and find their way back. It also clicks on every L0 until the first figure is kept; L0 is the only beat CIRCLES has, so there is nothing else to count.
Shifting a periodic signal in time moves its phase. On the circle the hand jumps forward or back against the marks; the marks themselves stay where they are.
Loop held + wheel kicks the chosen player a 64th of its length per click, right for later: its hand goes back a little, so its notes come later. With the pull on (below), it then drifts back towards its place; loop held + push lets it glide home. This scope shows the kick without the pull, so the copy stays where you put it. The dashed wave in the copy's row is its source: in step, the two waves lie on top of each other; after a kick they come apart. Time runs from the circles to the right, so the shift starts at the circle and travels across; what was already played stays as it was.
Frequency is continuous. Between the rational ratios lie ratios that never meet again, and the sum becomes quasi-periodic. A frequency that itself moves is a chirp, an accelerando; Nancarrow built tempo canons that way (not in CIRCLES).
Play held + wheel detunes the chosen player, 0.1 % a click, up to 5 % either way; play held + push makes it exact again. Piano Phase without hands: a copy drifts slowly through every phase against its source. This scope shows detune without the pull; with the pull on, a small detune locks instead (below). The dashed wave in the copy's row is its source: the copy's wave slides slowly away from it and comes back.
The figure itself never changes; only when its notes come does. Time never runs backwards or stops: speed stays between half and one and a half. L0 is the conductor and is never pulled. Nothing jumps but deliberate acts: a kick, and a new length, which lands at the player's own loop start. The dashed hand on each circle is the player's ghost: where it would be had it stayed in step with L0, and the dashed wave is the ghost's shadow. The arc between hand and ghost is how far off it is.
The pull K is one amount for everyone: 4 % at power-on, switch on all + loop held + wheel, 0.5 % a click up to 20 %. Gliding home pulls with at least 30 % and ignores the detune until the player is within 1/256 of a turn. In this scope vibes is 2.5 % fast and the 4 % pull holds it, a little ahead of its ghost; kora is 5 % slow, more than the pull can hold, so it slips round about once a minute. The two sliders on the last row, listening to each other and wander, are not in CIRCLES (Part three).
Each of these fits the math CIRCLES is built on. None is promised: a new idea goes in only after someone misses it while playing, and after it has been tried in a simulation of the firmware.
Slightly detuned oscillators that nudge each other's phase. With weak coupling they drift; above a threshold they lock. Clapping audiences, fireflies and pendulum clocks on one wall all do this.
In the dev build every player is pulled towards its own ghost, never towards the others. Coupling would add a pull between players of the same length, so detuned copies find each other wherever they are, not only at home.
A signal can be mirrored in time and in value, and shifted in value, without changing its period. With time shift and scaling these are the moves that keep it recognisably the same figure. The spokes on the circles show pitch: longer is higher.
A new figure from a kept one without playing it: the copy runs backwards or upside down. Canons have done this for six hundred years, and it suits passing figures around.
A slow periodic modulation of any parameter. Each player then has two cycles: its figure, and a slow one over it. On level it's amplitude modulation (the wave's height); on the other knobs the dashed line shows it.
Eno's Music for Airports: loops of unrelated lengths fading in and out, so the ensemble gets a long arc nobody has to play. Every player knob could take it: level, brightness, decay, strike, pan, feel. Periods counted in L0 keep it with the tempo. Today's swell is random per round, not a cycle.
A delay fed back into itself, a comb filter. In time every note gets a fading train of copies, D apart.
A delay whose time is a ratio of L0, so it follows the tempo (try the ensemble length). With D at another ratio than the figure, the echoes make a second rhythm against it. One shared send for the whole ensemble would be enough; fifteen would cost too much.
A finer set of rational periods with one common unit. Two periods of n and m pulses meet after lcm(n, m) pulses, and between meetings the offset moves in whole pulses, never between them.
In C's odd lengths (7, 9, 11, 13 pulses) and Reich's Clapping Music in steps: 7 pulses against 8 moves one pulse per round. It deepens the idea of a length instead of adding a new one. The cost: ×4/3, ×2/3 and ×1/3 don't fit 8 pulses.
On a synthesizer an oscillator's period sets how fast its waveform runs. A master restarts it every cycle, so a slave with another speed is cut at a different point of its wave, and sweeping its speed sweeps the sound.
In CIRCLES a length doesn't change how fast the notes run; it only sets the window. Restarting every figure on the L0 beat would just play its first L0, which is length ×1 without the folding. It adds nothing, so it stays out.
In 1.0 the speed m is always 1 and the formula solves itself. The dev build lets m move. What is not in yet would add a term to m, or change the marks, the knobs or the sound.
Periods as ten rational ratios of one L0; a length is a window, the ensemble length a tempo; phasing by length, on the L0 grid; copy and octave; the feel as noise on time and loudness.
A speed of its own for every player: detune, a pull towards its ghost, kicks and a glide home; a new length lands at the player's own loop start; a click on L0 until the first figure.
Coupling between players, wander, retrograde and inversion, slow cycles on any knob, a delay timed in L0, lengths in pulses.