Risset Loom

an engine of infinite accelerandi
every reachable state is a seamless Risset rhythm
picker won't open? paste midi as base64
what is happening here

A Risset rhythm is the rhythmic Shepard tone: copies of one pattern stacked at tempo ratio r, all accelerating (or decelerating) exponentially. Each layer fades in at the slow edge of the window and out at the fast edge, so as one departs, another has already taken its place an octave of tempo below — the pulse tumbles forever and never arrives.

Why every output is seamless: the loop length is never a free knob here. It is derived as L = m·qᴺ·P·ln r / (f₀·(r−1)) (with an extra factor r for descent), which forces every layer to complete exactly m·qᴺ·P·rᵏ beats per loop — an integer multiple of the pattern length — so each handoff lands on a pattern boundary at zero amplitude. Rational ratios (3:2, 4:3) stay lawful because the qᴺ fold makes those beat counts integers. There is no reachable setting that is not a Risset rhythm.

Tap steps to cycle velocity · tap a lane name to mute it · tap any gold value to type an exact number, including beyond slider range (negative swing rushes the offbeats, negative canon descends, the ratio label takes any rational p:q) · ♪ music toggles a pure-rhythm profile — window focus at max, no pitch–tempo coupling, no canon, no swing, no orbit, 12-edo of the octave at root C — the Risset rhythm with none of the pitch machinery; tap again to restore exactly what you had · window shapes each layer's fade and focus is a sharpening exponent on it · pitch↔tempo couples every hit's pitch to its layer's instantaneous tempo (the full Shepard treatment) · swing is applied in beat-space, so it survives the exponential time-warp intact · wav renders the steady-state loop in bounded chunks with pre-roll (voices are one-shots and the filter's memory is milliseconds, so the joins are sample-exact), with no length or density ceiling — every field takes any finite value you type; guards are advisory only, and the sole hard refusals are arithmetic ones (a config whose loop length overflows to infinity cannot be scheduled). Your device's memory is the only law left.

Melody: notes are Shepard tones — octave-stacked partials under a fixed spectral window over log-frequency — so they have chroma but no register, which is why the piano roll needs no octave axis. Steps hold chords: tap any set of degrees in a column. Layer canon transposes each layer by that many steps per log-tempo slot: any value is lawful, because pitch here is a function of x alone and everything that factors through x survives the handoff. At one full period per slot, pitch scales exactly with tempo, and the gliss drone becomes the true Shepard–Risset glissando, riding the same x as the rhythm layers.

Tuning: the entire Shepard machine is parameterized by one ratio — the fold period ρ. Partials stack at ρj, chroma lives on the circle log f mod log ρ, and equivalence is ρ-equivalence rather than octave-equivalence. 2:1 gives ordinary Shepard tones; 3:1 gives tritave Shepard tones — set edo to 13 for the Bohlen–Pierce chromatic; 3:2 and φ are stranger creatures with narrow, dense partial stacks. edo divides the period equally, and the scale menu is literal MOS theory: a chain of the tuning's best approximation to 3:2, which at 12-edo of the octave recovers the pentatonic (mos 5) and diatonic (mos 7) collections for free.

Midi: drop in any standard midi file and the loom risset-ifies it. Note onsets keep their exact fractional beat positions — the time-warp map t(b) accepts any real beat, so nothing is quantized to a grid. Channel-10 percussion routes to the drum voices; every other pitch is collapsed to its position on the fold circle, because register cannot survive an infinite accelerando — bass and lead merge into chroma, played as Shepard tones whose ring-out tracks each layer's local tempo, and root becomes a transpose knob. Under any other tuning the notes are translated, not squeezed: the loom detects the key (Krumhansl–Schmuckler) and re-derives every pitch by the chosen tuning translation — direct rounds each note to the nearest step; fifths respells it on the chain of fifths and sends fifth and octave to the tuning's own best 3/2 and 2/1 (the regular-temperament val, lawful even when the period is a tritave or φ); just reads each pitch class as a 5-limit ratio from the tonic; auto scores all three against the just intervals the key implies and keeps the winner. A tune at 3:1 · 13 becomes an honest Bohlen–Pierce shadow — and because the octave is not the period there, register genuinely changes chroma. The ◙ vgmusic.com browser drops any of that archive's midis straight in (flipping on ♪ music so they arrive recognizable; toggle it off to re-enter the pitch machinery). Selections are padded to whole beats, so the seam theorem holds verbatim; the original tempo changes are irrelevant — beats are ticks over division, and the loom re-times everything anyway.

The whole family: take any logarithmically perceived dimension, stack copies at ratio r, drift them exponentially, window in the log. The state space collapses to the circle ℝ/(ℤ·ln r) and the illusion is uniform rotation on it. Pitch → Shepard tone. Tempo → Risset rhythm. Spectral position → the barberpole filter (an eternally rising formant). Angular rate → orbit, an ever-accelerating rotation around your head. Loudness → crescendo: separable band-limited washes, each climbing 30 dB across a ~16 s life (an integer number of climbs per loop, so the seam theorem holds) before yielding to a fresh one entering below — attention always finds something rising. It ships in the wav, unlike the sine drone, because noise has no phase to precess: the sources are pinned to absolute time by buffer offset, so the joins stay sample-exact. Grain density and the visual cousin — the infinite fractal zoom — are the same construction. One honest caveat: the drone is excluded from wav export. The discrete events are exactly loop-periodic, but a true glissando is only ensemble-periodic — oscillator phases precess by a non-integer cycle count per loop — so no finite wav of it can tile without a seam. The loom ships the exactly-periodic stem.

Sharing: the url hash always carries the complete state of the loom — every knob, the pattern and melody grids, mutes, the ratio, tuning and translation, music mode, and any vgmusic pick with its bar selection. Copy the address bar and whoever opens it gets the exact weave.