VOLTAlearn

Learn Volta / Harmony

Keys & roman numerals

Write harmony that follows a musical key.

lesson 20 of 39 · about 10 minutes

Open this lesson in the workbench →

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.

  1. Declare the key
  2. Spell a progression in roman numerals
  3. 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.