fdb2ce8175
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
150 lines
9.0 KiB
Markdown
150 lines
9.0 KiB
Markdown
# Chord Progression Repertoire
|
||
|
||
Research-backed reference for expanding the progression features. Companion to [`GOAL.md`](../GOAL.md) Part 1. Notation: uppercase = major, lowercase = minor, ° = diminished, 7 = dominant unless marked maj7/m7.
|
||
|
||
How this maps to code today:
|
||
|
||
- `PROGRESSIONS` in `src/lib/theory.js` — `{ name, rn, degrees }` per progression; `degrees` are semitone offsets from the key root. This is the format new entries should use.
|
||
- `getSuggestedProgressions(root, mode)` maps degrees → chord names in key; `toRomanNumeral()` converts any chord back to a numeral.
|
||
- `FAMOUS_PROGRESSIONS` in `src/lib/education.js` — richer entries (songs, tips, style variations) for the Learn side.
|
||
|
||
## 1. Genre-by-genre progression tables
|
||
|
||
### Pop
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| I–V–vi–IV | "Axis of Awesome" — #1 in Hooktheory's corpus of 75k+ analyzed songs |
|
||
| vi–IV–I–V | Same loop rotated to start on vi ("pessimistic axis") |
|
||
| I–vi–IV–V | "Doo-wop" / "'50s progression" |
|
||
| I–IV–vi–V | Common variant (Africa chorus) |
|
||
| IV–V–iii–vi | "Royal Road" — J-pop/anime staple, spreading into Western pop |
|
||
|
||
### Rock
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| I–IV–V | Foundation of rock/blues/country |
|
||
| I–♭VII–IV(–I) | Mixolydian rock cliché (Sweet Home Alabama as V–IV–I rotation) |
|
||
| i–♭VII–♭VI(–V) | Andalusian-derived minor loop; with V = full Andalusian cadence |
|
||
| I–♭III–IV | Blues-rock riff progression (borrowed ♭III) |
|
||
|
||
### Blues (12-bar family)
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| I7×4 / IV7×2, I7×2 / V7, IV7, I7, V7 | Standard 12-bar |
|
||
| Bar 2 → IV7 | "Quick change" / "quick four" |
|
||
| ii7–V7 in bars 9–10, turnaround I–VI7–ii–V7 | Jazz blues |
|
||
| i7–iv7–i7 … ♭VI7–V7–i7 | Minor blues (The Thrill Is Gone) |
|
||
| I–V–IV–IV–I–V–I–V | 8-bar blues (Key to the Highway) |
|
||
|
||
### Jazz
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| ii7–V7–Imaj7 | The fundamental cadence |
|
||
| I–vi–ii–V (also iii–vi–ii–V) | Rhythm changes A / turnaround |
|
||
| III7–VI7–II7–V7 | Rhythm changes bridge (circle of dominants) |
|
||
| iim7♭5–V7♭9–i | Minor ii–V–i |
|
||
| ii7–♭II7–Imaj7 | Tritone-sub cadence |
|
||
| ivm7–♭VII7–Imaj7 | "Backdoor" progression |
|
||
|
||
### Folk / Country
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| I–IV–V(–I) | Core of both genres |
|
||
| I–V–I–IV | Two/three-chord verse pattern |
|
||
| i–♭VII–♭VI | Minor folk descent (Am–G–F) |
|
||
| I–V–vi–iii–IV–I–IV–V | Pachelbel progression |
|
||
| I–II7–V–I | Classic country secondary-dominant (V/V) move |
|
||
|
||
### Funk
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| I7 vamp | James Brown static dominant, voiced as 9th |
|
||
| i7–IV7 | Dorian two-chord vamp — the most common funk pair |
|
||
| i7 / m11 vamp | Minor one-chord groove |
|
||
| ii7–V7 loop | Funk/disco vamp |
|
||
|
||
Design insight: funk needs few *progressions* but rich *chord qualities* (9, 7♯9, m11, 13sus) — colour lives in the voicing, not the changes.
|
||
|
||
### Reggae
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| I–V or I–IV | Two-chord skank vamps |
|
||
| I–V–vi–IV | No Woman No Cry |
|
||
| i–♭VII(–♭VI) | Minor roots-reggae vamp |
|
||
| I–IV–V | Ska/rocksteady standard |
|
||
|
||
### R&B / Neo-soul
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| ii7–V7–Imaj7 (with 9/11/13 extensions) | Core cadence |
|
||
| iii7–vi7–ii7–V7 | Circle movement from the mediant — neo-soul staple |
|
||
| vi–ii–V–I | "6-2-5-1" cyclical soul loop |
|
||
| Imaj7–IVmaj7 / Imaj7–iii7 | Two-chord vamps |
|
||
| i7–iv7 | Dorian D'Angelo-style minor vamp |
|
||
|
||
### Gospel
|
||
| Progression | Name / notes |
|
||
|---|---|
|
||
| ii7–V7–I | The gospel "2-5-1", often chained: 6-2-5-1, 3-6-2-5-1 |
|
||
| I–I7–IV | Tonicizing IV (V7/IV "amen" setup) |
|
||
| IV–iv–I | Plagal with borrowed iv |
|
||
| I–♯i°–ii | Chromatic passing-diminished walk-up |
|
||
|
||
## 2. Substitution / variation taxonomy
|
||
|
||
Progression "families" relate through a small set of transforms — these are the generation rules for variation buttons and the Builder:
|
||
|
||
1. **Rotation** — any loop can start on any chord (I–V–vi–IV ≡ vi–IV–I–V). Treat loops as cyclic equivalence classes; display the rotation matching the user's tonic emphasis. (`detectRepeatingProgression` already canonicalizes rotations.)
|
||
2. **Diatonic (function) substitution** — chords sharing two notes swap: I↔vi↔iii (tonic), IV↔ii (subdominant), V↔vii° (dominant).
|
||
3. **Modal interchange / borrowing** — take a chord from the parallel mode: iv, ♭VI, ♭VII, ♭III, iim7♭5 in major; major IV (Dorian) in minor.
|
||
4. **Secondary dominants** — precede any diatonic target with its V7: V/V = II7, V/vi = III7, V/IV = I7, V/ii = VI7.
|
||
5. **Tritone substitution** — replace any dominant with the dominant a tritone away (V7 → ♭II7). Jazz flavour flag.
|
||
6. **Backdoor dominant** — ♭VII7 resolving to I, usually as ivm7–♭VII7–I.
|
||
7. **Quality embellishment** — same root, richer colour: triad → 7th → 9/11/13, sus2/4, add9. The main axis distinguishing genres (pop = triads/sus, jazz/neo-soul/gospel = extensions, funk = dominant 9/♯9). Already partially covered by `CHORD_SUBSTITUTIONS` in `education.js`.
|
||
8. **Passing/approach chords** — chromatic passing diminished (I–♯i°–ii), bass-line inversions (slash chords).
|
||
|
||
## 3. UX patterns worth copying
|
||
|
||
- **Hookpad (Hooktheory)** — *key-relative chord palette*: only the diatonic chords of the current key, colour-coded consistently per scale degree (key-agnostic colours). Borrowed chords live in expandable secondary palettes. *Magic Chord* suggests the statistically likeliest next chord. Drag-and-drop onto a timeline. → Direct model for the Progression Builder (GOAL G3).
|
||
- **Hooktheory TheoryTab** — progressions ranked by real-song frequency; each links to songs using it. "You're playing the Creep progression" is a strong engagement hook (partially exists via `FAMOUS_PROGRESSIONS` song lists).
|
||
- **Scaler 2/3** — three-zone vertical flow: detection area (top) → suggested chords/scales (middle) → user-built progression (bottom). Maps directly onto this app: live detection → suggestions → builder.
|
||
- **iReal Pro** — one-tap transposition; per-genre rendering of the same progression.
|
||
- **ToneGym** — instant audio preview when tapping any chord/progression.
|
||
|
||
## 4. Voicing data
|
||
|
||
### Guitar
|
||
Best option found: [`tombatossals/chords-db`](https://github.com/tombatossals/chords-db) (MIT, npm `@tombatossals/chords-db`, prebuilt `lib/guitar.json`):
|
||
- All 12 keys × large suffix list, **multiple positions per chord** (open + barre + higher CAGED positions).
|
||
- Per position: `frets` (per string, `x` = mute, low-E first), `fingers`, optional `barres`, `baseFret`. Example: `{ frets: '55775x', fingers: '114310', barres: 5 }`.
|
||
- Companion renderer: [`tombatossals/react-chords`](https://github.com/tombatossals/react-chords) (React SVG diagrams consuming this format).
|
||
|
||
Triads on string-sets (top-3 / middle-3) are *not* in chords-db but are cheap to generate: for each inversion of the triad, map the 3 chord tones onto a chosen string set within a 4-fret window. This complements the existing `GUITAR_SHAPES` in `src/lib/voicings.js`.
|
||
|
||
### Piano
|
||
No canonical open dataset exists. The sane model is **interval recipes resolved per chord quality** (the chord templates in `theory.js` already encode quality → semitone mapping):
|
||
|
||
```js
|
||
// voicing = named recipe of chord degrees, resolved per chord quality
|
||
{
|
||
shell: { LH: ['1', '7'], RH: ['3'] },
|
||
rootPosition: { LH: ['1'], RH: ['1', '3', '5', '7'] },
|
||
rootlessA: { LH: ['3', '5', '7', '9'] }, // Type A: 3rd on bottom
|
||
rootlessB: { LH: ['7', '9', '3', '5'] }, // Type B: 7th on bottom
|
||
guideTones: { LH: ['3', '7'] },
|
||
}
|
||
```
|
||
|
||
Conventions to encode: rootless voicings keep the top note between C4–C5; alternate Type A/B through a progression so inner voices barely move — i.e. pick the voicing minimizing semitone travel from the previous chord (simple voice-leading distance minimization).
|
||
|
||
## 5. Sources
|
||
|
||
- Hooktheory corpus & blog: hooktheory.com/blog/i-analyzed-the-chords-of-1300-popular-songs-for-patterns-this-is-what-i-found/ ; hooktheory.com/blog/jazz-chord-progressions/
|
||
- 12-bar variants: en.wikipedia.org/wiki/Twelve-bar_blues ; happybluesman.com/common-variations-12-bar-blues/
|
||
- Named progressions: en.wikipedia.org/wiki/%2750s_progression ; piano.org/chord-progressions/ ; supersimplepiano.com/learn/chord-progressions/royal-road
|
||
- Substitutions: learnjazzstandards.com (chord substitution) ; hub.yamaha.com (beyond diatonic) ; hubguitar.com (tritone subs)
|
||
- Gospel: gospelmaps.com/top-gospel-chord-progressions/ ; gospel.hearandplay.com (2-5-1)
|
||
- Genre vamps: orphiq.com (reggae) ; guitar-chord.org/articles/funk.html ; orangecandymusic.com & pickupmusic.com (R&B/neo-soul)
|
||
- Tools: producelikeapro.com (Scaler review) ; hooktheory.com/hookpad
|
||
- Voicing data: github.com/tombatossals/chords-db ; github.com/tombatossals/react-chords ; voicinglab.com & pianowithjonny.com & thejazzpianosite.com (rootless voicings)
|