You know scales. You know chords. Now: where do chords come from? Not from a chart. Not from memorization. From the scale itself. Take a scale, stack every other note, and you get seven chords. Their qualities—major, minor, dominant, half-diminished—are fixed. The scale decides everything.
s(), note(), n(), .scale(), stack(), cat(), setcpm(35),
mini-notation (~ * [] <> / @),
.gain(), .pan(),
.lpf(), .lpq(), .attack(), .decay(),
.sustain(), .release(),
.room(), .size(),
.delay(), .delaytime(), .delayfeedback(),
.distort(), chord notation [c3,eb3,g3],
progressions with <>,
.every(), .sometimes(), .jux(), .off(),
scales ("C:major", "C:minor"), modes, melody over changes,
and the phonk palette from EDM.4–8.
A chord is built by stacking notes a third apart from the scale. C major scale has seven degrees: 0 1 2 3 4 5 6. Pick degree 0, skip one, take 2, skip one, take 4. That’s C E G. A C major triad.
Three notes, all from C major, all a third apart. Now add a fourth note—skip one more, take degree 6. That’s C E G B.
Four notes stacked in thirds. Cmaj7. Richer, more complex. Now do the same thing starting on every degree of the scale. Seven starting points, seven chords:
Seven chords, all from C major scale notes only. Each one sounds different. Some bright, some dark, one unstable. You didn’t choose the qualities. The scale did.
Diatonic harmony means chords built entirely from the notes of a single scale by stacking thirds. Every key has 7 diatonic chords. Their qualities are fixed by the scale’s interval pattern. You don’t pick major or minor for each chord—the scale decides.
Those seven chords fall into four types. Listen to the first two—Cmaj7 (built on degree I) and Dm7 (built on degree ii):
First chord: bright, open, stable. Second chord: darker, warmer. Both built from the same C major scale. The interval pattern inside each chord is different, so the quality is different.
Now the last two—G7 (built on degree V) and Bm7b5 (built on degree vii):
G7 is tense—it wants to move somewhere. Bm7b5 is dark and unstable, like the ground is tilting. Four qualities total:
Chord quality is the specific interval pattern within a chord. Major 7th (maj7): bright, stable. Minor 7th (min7): dark, warm. Dominant 7th (dom7): tense, wants to resolve. Half-diminished (m7b5): dark and unstable. Quality is determined by the scale, not by choice.
| degree | chord | quality | sound |
|---|---|---|---|
| I | Cmaj7 | maj7 | bright, stable |
| ii | Dm7 | min7 | dark, warm |
| iii | Em7 | min7 | dark, warm |
| IV | Fmaj7 | maj7 | bright, stable |
| V | G7 | dom7 | tense, wants to resolve |
| vi | Am7 | min7 | dark, warm |
| vii° | Bm7b5 | m7b5 | dark, unstable |
An arpeggio breaks a chord into individual notes, played one at a time. In strudel, you can arpeggiate chords by writing the notes as a sequence instead of a stack. Compare:
First cycle: all four notes at once (comma-separated = chord). Second cycle: the same four notes, low to high, one at a time (space-separated = sequence). That’s manual arpeggiation. Different note orders change the character:
Each chord gets a different note order. Up goes low to high. Down goes high to low. Up-down bounces. Converge plays from the outside in. You control the pattern by writing the notes in whatever order you want.
An arpeggio is a chord with its notes played one at a time instead of together. In strudel mini-notation: [c3,e3,g3] (commas) plays notes simultaneously as a chord. [c3 e3 g3] (spaces) plays them as a sequence. You can also use .arp() with index numbers: .arp("0 1 2 3") for ascending, .arp("3 2 1 0") for descending. The indices refer to chord tones from lowest to highest.
Try .arp("3 2 1 0") for a descending arpeggio. Or .arp("0 1 2 3 2 1") for an up-down bounce. Each index pattern creates a different melodic contour from the same chord tones.
Arrange all 12 keys around a circle. Each step clockwise adds one sharp. Each step counter-clockwise adds one flat. Keys next to each other on the circle share 6 of 7 notes—they sound closely related.
A fifth is the interval from C to G—7 semitones. It’s the most consonant interval after the octave. Moving by fifths connects keys that share the most notes. C major and G major differ by one note (F becomes F#). G major and D major differ by one note (C becomes C#). And so on around the circle.
The most common chord progression in Western music—ii-V-I—is three adjacent keys on the circle. In C major: Dm (ii) → G (V) → C (I). Three steps counter-clockwise on the circle, landing on home. That’s why it sounds so satisfying. Each chord is the most closely related to the next.
| key | sharps/flats | notes different from C |
|---|---|---|
| C | 0 | — |
| G | 1# | F# |
| D | 2# | F#, C# |
| F | 1b | Bb |
| Bb | 2b | Bb, Eb |
| Eb | 3b | Bb, Eb, Ab |
Every step around the circle adds or removes one accidental. Keys on opposite sides of the circle (C and F#/Gb) share the fewest notes—they sound the most distant.
Now you can name what the phonk progression was doing all along. Cm → Ab → Bb → G. In C minor, that’s i → VI → VII → V. Hit play:
Uppercase = major. Lowercase = minor. The numeral shows which scale degree the chord is built on. i = chord built on degree 1, minor. V = chord built on degree 5, major. Roman numerals describe function, not just name. A V chord in any key has the same tension. A i chord in any key is home.
Roman numeral analysis names chords by their position in a key. Uppercase = major. Lowercase = minor. The numeral is the scale degree the chord is built on. i = minor chord on degree 1. V = major chord on degree 5. The system describes function—what a chord does—not just its name.
In strudel, chord() with .voicing() generates smooth voicings from chord symbols. Here’s the phonk progression using the chord() API:
Smoother than root position. The notes are closer together—less jumping between octaves. Each chord shares common tones with the next. That’s voice leading: choosing inversions so each note moves the smallest possible distance to the next chord.
Voicings are compact chord arrangements—notes clustered close together, smooth movement between chords. In strudel, chord("<Cm Ab Bb G>").voicing() generates these automatically from chord symbols. You can also write explicit note arrays like [c3,eb3,g3,bb3] for total control over inversion and spacing. Both approaches produce voice-led progressions.
The phonk track, now with diatonic chord layers. Drums, 808 bass, pad, cowbell—everything from the last five lessons. New layers: chord().voicing() as a pad, and .arp() with index patterns on top with delay. Chord symbols and automated voicings working together.
[c3 eb3 g3 bb3 g3 eb3]. Different orderings, different melodic contours.[d3,f3,a3,c4], G7: [g2,b2,d3,f3], Cmaj7: [c3,e3,g3,b3]. The most important progression in Western music..every(4, rev) to the arpeggio line. Every fourth bar, the arp plays backward.| tool | does | looks like |
|---|---|---|
| diatonic harmony | chords built from a single scale by stacking thirds | 7 chords per key, qualities fixed |
| stacking thirds | take every other scale degree to build a chord | n("[0,2,4,6]").scale("C:major") |
| maj7 | major 7th quality — bright, stable | on degrees I and IV |
| min7 | minor 7th quality — dark, warm | on degrees ii, iii, vi |
| dom7 | dominant 7th quality — tense, wants to resolve | on degree V only |
| m7b5 | half-diminished — dark, unstable | on degree vii only |
| Roman numerals | name chords by scale degree — uppercase=major, lowercase=minor | i → VI → VII → V |
| chord().voicing() | auto-voiced chords from chord symbols | chord("<Cm Ab Bb G>").voicing() |
| .arp("indices") | arpeggiate chord tones by index number | .arp("0 1 2 3") = ascending |
| arp patterns | ascending, descending, bounce, converge | .arp("<[0 1 2 3] [3 2 1 0]>") |
Stack thirds from a scale to get 7 chords. Four qualities: maj7, min7, dom7, m7b5. Roman numerals name the function. Use chord("<Cm Ab>").voicing() for auto-voiced progressions. Arpeggiate with .arp("0 1 2 3") using index numbers. The scale decides the harmony. You decide the arrangement.
Next: ii-V-I. The most important chord progression in Western music.
Tracks that demonstrate this lesson’s concepts.
| artist | track | why |
|---|---|---|
| Shoji Meguro | Persona 5: Beneath the Mask (2016) | (VGM) extended diatonic harmony, acid jazz over JRPG |
| Michiru Yamane | Castlevania SotN: Dracula’s Castle (1997) | (VGM) Baroque voice leading meets electric guitar |
| A Tribe Called Quest | Electric Relaxation (1993) | (hip-hop) jazz organ, harmonic ambiguity over hip-hop |
| Flying Lotus | Do the Astral Plane (2010) | (IDM) free jazz + IDM, unconventional harmony |
| Jean-Philippe Rameau | Pièces de clavecin (1724) | (hip-hop) the composer who formalized chord-from-scale theory |
The idea that chords emerge from scales — rather than being arbitrary combinations — took centuries to formalize.
Jean-Philippe Rameau published the first comprehensive theory of harmony based on chord roots and inversions. Before Rameau, chords were understood as intervals between voices (counterpoint). Rameau argued that a chord has a “fundamental bass” (root) regardless of which note is in the bottom voice. This insight — that C-E-G, E-G-C, and G-C-E are all “C major” — created the framework for Roman numeral analysis.
Hugo Riemann formalized the idea that every chord in a key has a FUNCTION — tonic (rest), dominant (tension), or pre-dominant (preparation). His Vereinfachte Harmonielehre (1893) influenced a century of music theory pedagogy. The I-IV-V-I framework that underpins pop, rock, blues, and electronic music descends directly from Riemann’s functional categories.
Sources: Christensen, Rameau and Musical Thought in the Enlightenment (1993); Harrison, Harmonic Function in Chromatic Music (1994).