Tidal: pattern transformations and combinators
Learning objectives
- learner can transform patterns with every/chunk/iter/rot/off and periodic conditionals
- learner can reason about patterns as functions of time that compose freely
- learner can build canons and evolving structures by composing transformations
Capstone — one whole task that evidences the objectives
Take a single mini-notation seed and, using only composable transformations (every, chunk, iter, off, rot, jux, slow/fast), evolve it live into a 32-cycle arrangement that builds to a canon and resolves — with no new source material added.
Prerequisite modules
This module is about the move that defines TidalCycles performance: taking one bar of material and making it carry a whole passage of a set. In an algorave slot you rarely have time to type fresh phrases; what reads as development — a techno loop mutating, a melodic figure blooming into interlocking voices — is almost always a small seed wrapped in more and more transformation layers. That is the whole task here: evolve, live, a single mini-notation seed into a 32-cycle arc that builds to a canon and resolves, adding nothing new.
The scaffolding starts with the mental model. Seeing a Tidal pattern as a function from time to events — and a line as source string plus a stack of function wrappers — explains why everything here composes freely and why redefining code mid-set applies cleanly from the current cycle. From there the learner drills each device against a fixed seed in isolation: periodic variation with “every applies a transformation every nth cycle”, the roving spotlight of chunk, rotation-in-time with iter, value rotation with rot against a fixed rhythmic skeleton, and stereo splitting with jux. A supported mid-point exercise combines two devices under one gate using function composition, then stages an 8-cycle build using whenmod-style cycle predicates — a rehearsal of the capstone’s form at quarter scale. The final unsupported run adds the canon move: overlaying offset, transformed copies with off, then resolving by peeling the wrappers back off.
Every required atom is load-bearing for that performance: each names either a transform the capstone explicitly permits, the conditional machinery that stages the 32 cycles, or the pattern-as-function reasoning that lets them nest safely. The supporting set widens the palette — palindrome, spread, bite, time-shift operators, pattern algebra — and situates the practice in the design philosophy of composable pattern languages, enriching but never gating the task.
Runnable examples
Generated from the context/ instrument corpus by concept (redistributable idioms only). Do not edit — regenerate with gen-module-examples.mjs.
every-n-transform
s("bd sd hh cp").every(4, rev)
strudel-0028 · CC0
d1 $ iter 4 $ sound "bd sn hh cp"
tidal-0045 · CC0
stereo-panning
d1 $ pan (slow 2 sine) # sound "hh*8"
tidal-0037 · CC0
SinOsc s => Pan2 p => dac; -0.7 => p.pan;
chuck-0042 · MIT
Atoms in this module
Required — these gate the capstone
Supporting — enrichment, not gating
Part of curricula
- Live Coder — zero to performing live-coded music — Generative Systems & the SuperCollider Stack required
Unlocks — modules that require this one