Spell a progression as i–VI–III–VII and it works in any key — change one line and the whole song transposes. This is harmony as code.
key = "c minor" sets the ambient key for the whole module. Patterns can then speak in function, not letter names.
Roman numerals in a pattern (!"i VI III VII") are chords built on scale degrees: in C minor that's Cm, Ab, Eb, Bb — the four chords under half of pop music.
A numeral token plays the full triad; each numeral is one step, so !"i VI III VII" is a chord per beat. Slow it down: !"<i VI III VII>" is a chord per cycle.
Chord quality tokens work on letter roots too: eb3:maj7 stacks a specific four-note chord where you need one exact color.
The starting point#
The lesson opens with this song in the editor. Every edit recompiles and plays.
-- Harmony as code: this progression is hardwired to C minor, letter by letter.
pad = patch {
source = saw (freq pitch) + saw (freq pitch + 6Cents),
ampEnv = adsr 200ms 0ms 1 400ms,
cutoff = 1300Hz,
gain = vel * 0.3
}
pads = play pad !"<c3 ab2 eb3 bb2>"
What to watch#
Each numeral lands a different stack of spikes in the spectrum. Change the key line and the whole picture slides sideways, keeping its shape.
Goals#
The workbench checks these as you work; the solution is there when you want it.
- Declare the key
- Spell a progression in roman numerals
- Stretch: stack an exact chord with :quality
Make it yours#
Keep the pattern !"<i VI III VII>" and change ONLY the key line — c minor, e minor, f# minor. The song follows. Then try the same numerals in "c major".
Further reading#
Chords, scales and harmony in the reference.