9 Commits

Author SHA1 Message Date
vadimwit e180f85289 kb: add R&B/neo-soul guitar pack
5 progressions (mediant circle, Stevie 6-2-5-1 with 9sus V, maj7
two-chord vamp, D'Angelo Dorian vamp, gospel Amen IV-iv-I) x 2 plays:
m9 slides, m11 colour sets, embellished Mayfield/Hendrix barres,
Dilla-feel barre wash. Comping documents pluck-and-mute, the neo-soul
slide, hammer vocabulary, Cropper 6ths, the Dilla feel. Sourced
Mayfield figures (standard-tuning adaptation flagged). Validator and
build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 19:04:17 +01:00
vadimwit 46d30935c9 kb: add country/folk guitar pack
5 progressions (8-bar country I-IV-V, Wagon Wheel folk axis, ragtime
I-VI7-II7-V7 circle, Rising Sun 6/8 climb with corrected changes,
bluegrass I-IV-I-V) x 2 plays: open G/C-family boom-chick sets with
capo strategy, anchor-finger folk grips, barre fallbacks. Comping
documents boom-chick, Carter bass runs, Travis picking, train beat,
waltz. Sourced Lester Flatt G-run licks. Research corrections honoured
(Rising Sun is i-III-IV-VI, not Andalusian; ragtime is the full VI7
circle). Validator and build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 18:01:19 +01:00
vadimwit c7f9c9571f kb: add reggae guitar pack
5 progressions (circular I-IV-V, two-chord vamp, i-bVII minor vamp,
No Woman No Cry I-V6-vi-IV, verified rocksteady I-ii-iii-ii) x 2
plays: top-3 skank triads, Wailers middle-string set, top-4 partials,
quality-neutral 5+R dyads. One-drop/double-skank/ska/bubble grids
documented. Research flags honoured (NWNC is major-key; Get Up Stand
Up stored as near-one-chord; doo-wop claim replaced with verified
Queen Majesty changes). Validator and build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 16:58:23 +01:00
vadimwit ecfa7d0a65 kb: add funk guitar pack
5 vamps (one-chord I9 with quality motion 9-13-9sus4, Dorian i7-IV7,
disco ii-V loop, I9-bVII9 figure, EWF smooth maj7 loop) x 2 plays:
Nolen 9th cycle, 7#9 grit, Chameleon pair, m11 barre, Le Freak grips,
top-4 shimmer. 16th-grid comping patterns documented (scratch, chika,
JB cell, Sex Machine, Rodgers selective). Sourced Cissy Strut lick.
Validator and build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:59:40 +01:00
vadimwit de0071f7bf kb: add bossa nova guitar pack
5 progressions (Ipanema A-section, minor ii-V-i with m6 tonic, Blue
Bossa 16-bar, One Note Samba chromatic chain, Corcovado descent) x 2
plays on alternating root-string sets. Joao Gilberto rhythm layers
documented (thumb surdo + syncopated block, two-bar tied pattern,
partido alto contrast), improv map, sourced Ipanema melodic cell.
Validator caught 6 quality mismatches (6/9 grips on maj7/min7 steps)
- content fixed, gate untouched. Validator and build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:02:33 +01:00
vadimwit d32401af66 kb: add rock guitar pack; schema gains declared omit3 (power chords)
5 progressions (Mixolydian vamp, I-IV-V, minor descent, axis, Dorian
riff cell) x 2 plays: open-chord Malcolm hits, second-guitar triads,
Keith sus figure, power-chord chug, Police add9 arpeggios, thumb-over
embellishments. omit3 is a declared omission like rootless - the
pitch-class check still applies. Validator and build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:01:15 +01:00
vadimwit ef538787ee kb: add blues guitar pack
5 forms (standard/quick-change 12-bar, 8-bar, minor blues, turnaround
cycle) x 2 plays each: barre shuffle, Texas 9th stabs, Chicago tritone
shells, minor m7 + 7#9 climax. 4 named comping patterns, improv rules,
2 sourced licks. Validator and build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 12:58:12 +01:00
vadimwit 7181a138e4 kb: bootstrap foundation + jazz guitar gold standard
SCHEMA.md authoring contract, validate-kb.mjs quality gate (pitch-class
verification of shapes against chord qualities), registry, and the jazz
style: 5 progressions x 2 guitar plays (shells + drop-2), comping
rhythms, improv guidance, sourced licks. Validator and vite build green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 12:46:08 +01:00
vadimwit fdb2ce8175 docs: jam knowledgebase plan, backlog, curricula + /kb-expand loop skill
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 12:31:45 +01:00
33 changed files with 3316 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
---
name: kb-expand
description: Expand the JamBuddy jam knowledgebase by exactly one style × instrument cell — research, author, validate, commit. Run repeatedly (or via /loop) to fill the backlog in docs/kb-backlog.md.
---
# KB Expand — one cell per session
You are expanding JamBuddy's jam knowledgebase: intermediate-level standard progressions and ways to play them, per style × instrument. **Do exactly one cell, end to end.** Small, validated, committed.
## Steps
### 1. Orient (always, every session)
Read, in this order:
- `docs/kb-plan.md` — architecture, schema conventions, quality gates, success criteria
- `docs/kb-backlog.md` — the queue
- `src/data/kb/SCHEMA.md` and the gold standard `src/data/kb/jazz/guitar.js`**if they exist**
- `docs/progression-repertoire.md` §1 — cross-check progressions for the style
- `docs/learn-curriculum.md` — the intermediate level definition for the instrument
### 2. Claim a cell
Take the **first `todo` cell** in the backlog (respect the order: bootstrap → guitar → piano → bass). Mark it `in-progress` in `docs/kb-backlog.md`.
**If the foundation doesn't exist yet (no `src/data/kb/`), this session is Session 0:** build `src/data/kb/` with `index.js` registry, `SCHEMA.md` (formats from kb-plan.md §1, one fully-worked example, the musician checklist from §2), `scripts/validate-kb.mjs` (all mechanical checks from kb-plan.md §2 — especially the pitch-class verification of guitar shapes against chord qualities from `src/lib/theory.js` CHORD_TYPES), and the **jazz/guitar** cell as the gold standard. That is one full session; stop after it.
### 3. Research
Dispatch 1-2 web-research subagents for the claimed style × instrument:
- the style's standard progressions (verify against `docs/progression-repertoire.md`; add style-specific ones with named sources)
- 2-3 genuinely different intermediate ways to play each progression on this instrument (voicings with exact frets/fingerings for guitar, degree recipes for piano, line patterns for bass)
- comping rhythm(s) characteristic of the style, improv guidance (scales over each chord, target notes, 1-2 licks)
- require named sources/URLs in the agent's report
### 4. Author
Write `src/data/kb/<style>/progressions.js` (if new style) and `src/data/kb/<style>/<instrument>.js` per SCHEMA.md. Key-agnostic only: degrees and movable shapes (`rootStr` + `offsets`), open shapes with `onlyRoot`. Qualities must be keys of `CHORD_TYPES` in `src/lib/theory.js`. Register the style in `src/data/kb/index.js`.
### 5. Validate — hard gate
- `node scripts/validate-kb.mjs` must pass. Fix content, don't weaken the validator.
- Run the musician checklist in SCHEMA.md; cut or fix anything that fails it.
- `npm run build` must pass.
### 6. Record and commit
- Backlog: mark the cell `done (YYYY-MM-DD, N progressions × M plays)`.
- Commit on the current branch: `kb: add <style> <instrument> pack` (or `kb: bootstrap foundation + jazz guitar gold standard`). Do not push unless asked.
### 7. Report
Tell the user: what was added (progressions, plays, sources), validator result, and **the next cell in the queue**. If a UI milestone in the backlog just became unblocked (e.g. Jam Guide MVP after cell 0), say so explicitly.
## Rules
- One cell per invocation. Never start a second cell, even if the first went quickly.
- Never commit content that fails the validator; never relax a validator rule to make content pass — flag the conflict to the user instead.
- Intermediate level: no 5+ fret stretches, no advanced-only voicings without an intermediate alternative in the same play set.
- Plays per progression must be idiomatically different (register/density/technique), not transpositions of each other.
+110
View File
@@ -0,0 +1,110 @@
# GOAL — From Detection to Direction
WhatTheFlat already solves the hard live problem: **knowing what key and chords people are playing in a jam, in real time.** This document defines the next level, in two parts:
1. **Chord progressions** — make it easier to work with *different* progressions: a bigger genre repertoire, clearer "1-5-4"-style readout of the detected loop, a builder where you place chords yourself, and alternative voicings for every chord in a progression.
2. **Learn** — expand the education section for the player who already knows the basics and is confident enough to jam, but wants to go next level.
Supporting research and full repertoires live in:
- [`docs/progression-repertoire.md`](docs/progression-repertoire.md) — genre-by-genre progression tables, substitution rules, voicing data sources, UX patterns from existing tools
- [`docs/learn-curriculum.md`](docs/learn-curriculum.md) — intermediate training methods for guitar, piano, and bass, with drills and how app features map onto them
- [`docs/kb-plan.md`](docs/kb-plan.md) — the **jam knowledgebase**: styles × instruments × progressions × voicings, the `/kb-expand` session loop that grows it ([`docs/kb-backlog.md`](docs/kb-backlog.md)), and the **Jam Guide** panel that renders it live at the bottom of the app
---
## Part 1 — Chord progressions
### Where we are
- `PROGRESSIONS` in `src/lib/theory.js` holds **14 hardcoded progressions across 7 genres** (Pop, Blues, Folk, Jazz, Rock, '50s, Flamenco). These drive `ProgressionSuggestions.jsx`.
- `detectRepeatingProgression()` finds the repeating loop in chord history; `ProgressionBanner.jsx` already shows it with Roman numerals (IVIV) via `toRomanNumeral()`.
- `EducationPanel.jsx` + `src/lib/education.js` carry 15 famous progressions with substitutions and style variations.
- `src/lib/voicings.js` has ~50 guitar shapes (open + barre) across 14 chord types; no inversions, no triad string-sets, thin piano coverage.
- There is **no way to enter or arrange a progression manually** — everything is detection-driven.
### Goals
**G1 — Expanded genre repertoire (data, not code).**
Grow `PROGRESSIONS` from 7 to ~12 genres using the researched tables in `docs/progression-repertoire.md`: Funk (Dorian i7IV7 vamps), Reggae (two-chord skanks), Country (V/V secondary dominant moves), R&B/Neo-soul (iiiviiiV, 6-2-5-1), Gospel (chained 2-5-1s), plus blues variants (quick-change, minor blues) and the J-pop "Royal Road" (IVViiivi). Progressions stay in the existing `{ name, rn, degrees }` format so suggestions, Roman numerals and key mapping keep working unchanged.
**G2 — Numeral clarity ("is this 1-5-4?").**
The loop banner already shows Roman numerals; add a **Nashville-number display option** (1-5-4 instead of I-V-IV) since that is how musicians call changes at a jam. One formatting layer over `toRomanNumeral`, toggled in Settings.
**G3 — Progression Builder (drag and drop).**
A panel where the user assembles a progression by hand:
- A **key-relative chord palette** (Hookpad's best idea): the diatonic chords of the current detected/locked key, one tap to add, with borrowed-chord palette (iv, ♭VII, ♭VI, V/V…) one level deeper.
- Slots that can be **reordered by drag and drop**, with live Roman/Nashville numerals under each chord.
- Tap any slot → **alternative voicings** for that chord (G4).
- Seeded from the detected loop ("send loop to builder") so a jam can be captured, edited, and varied.
- Variation buttons per chord powered by the substitution taxonomy (diatonic swap, borrow, secondary dominant, 7th/sus/add9 color) — the rules are in `docs/progression-repertoire.md` §2.
**G4 — Alternative voicings per progression chord.**
- **Guitar:** extend `voicings.js` with CAGED positions and triads on string-sets (top-3 / middle-3), or adopt the MIT-licensed [`tombatossals/chords-db`](https://github.com/tombatossals/chords-db) dataset (multiple positions per chord, JSON, with a companion React SVG renderer).
- **Piano:** generate voicings from interval recipes rather than data files — root position, inversions, shells (1-3-7), rootless A (3-5-7-9) / B (7-9-3-5) — choosing the inversion that minimizes movement from the previous chord (voice-leading distance).
- Surface these in the Builder (G3) and in `CurrentJamPanel` voicing strips.
---
## Part 2 — Learn: basics → jam-ready next level
### Audience
Not step one. The target player already knows open/barre chords (guitar), triads and simple lead sheets (piano), roots and simple scales (bass) — and is confident enough to show up at a jam. The Learn section's job is to take them **from "can survive a jam" to "makes the jam better."**
### What the research says (full detail in `docs/learn-curriculum.md`)
Across guitar, piano, and bass pedagogy (Berklee methods, Justin Guitar grades 46, Tomo Fujita, Mark Levine, Open Studio, PianoGroove, Scott's Bass Lessons, TalkingBass, Ed Friedland), the intermediate-to-advanced jump converges on four pillars:
| Pillar | Guitar | Piano | Bass |
|---|---|---|---|
| **Fretboard/keyboard liberation** | CAGED, triads on string sets, connecting pentatonic boxes | Inversions in all keys, voice leading | Neck zones, chord-tone arpeggios everywhere |
| **Playing the changes** | Chord-tone targeting, guide tones (3rds & 7ths) | Shell + rootless voicings, sus/add9 colors | Walking lines, chromatic approach notes |
| **Ensemble skills** | Small voicings, register discipline, comping | Comping rhythms (Charleston…), "rule of 1", staying out of the bass lane | Pocket/drummer lock, ghost notes, subdivision switching |
| **Functional ears** | Hearing I-IV-V / vi-IV-I-V by bass line | Nashville numbers, 12-key transposition | Singing root movement, predicting the V |
### Goals
**L1 — Practice drills tab.**
Add a drills library to the Learn section: per instrument, per pillar, the concrete drills from the curriculum doc (e.g. "first note after every chord change = the 3rd", "Charleston comping ladder", "W|H|H chromatic walkup"). Keyed to the *current detected key and loop* so every drill is in today's jam context, not abstract C major.
**L2 — Detection-powered feedback (the unfair advantage).**
No practice app can hear the player; this one can. Phased:
- **Target-note highlighting:** on each detected chord change, highlight the new chord's 3rd/7th on the fretboard/piano for a beat (drill scaffold — uses existing tier rendering).
- **Next-chord preview tier:** when a loop is detected, show the *upcoming* chord's root and its chromatic approach notes (the bassist's walking-line scaffold).
- **Chord-tone hit rate:** classify detected notes against the current chord (chord tone / scale tone / outside) and show a session score.
- **Pocket report:** extend the onset/BPM pipeline to show timing drift against the established grid.
**L3 — Ear training from your own jam.**
A quiz mode that hides the chord banner and asks the user to name the progression in numbers before revealing — using the *user's own chord history* as the corpus. Converts the existing detection + `toRomanNumeral` into the functional ear training every method prescribes.
**L4 — Mode-difference teaching.**
When the user manually switches mode (the documented K-S limitation — by design), briefly highlight the *difference notes* (e.g. the raised 6th going minor → Dorian) on the instrument views. Turns a limitation into a lesson.
---
## What we need to go next level — priorities
| # | Item | Effort | Why first |
|---|---|---|---|
| 1 | **G1** Genre repertoire expansion | S (data only) | Immediate value, zero architectural risk |
| 2 | **G2** Nashville number toggle | S | Directly answers "is it 1-5-4", jam-native language |
| 3 | **G3** Progression Builder MVP (palette + reorder + numerals) | M | The single most-requested workflow gap |
| 4 | **L1** Drills tab seeded from curriculum doc | M (content + UI) | Makes Learn level-appropriate |
| 5 | **G4** Voicing alternatives (guitar string-sets + piano recipes) | M | Feeds both Builder and Learn |
| 6 | **L2** Target-note highlighting + next-chord preview | M | First detection-powered trainer, reuses tier rendering |
| 7 | **L3** Ear-training quiz on own history | M | High pedagogical value, small surface |
| 8 | **L2** Hit-rate scoring + pocket report | L | Needs tuning of pitch/onset classification |
| 9 | **G3** Builder phase 2: borrowed palette, variation buttons, loop import | L | Builds on MVP + substitution rules |
| 10 | **KB** Knowledgebase + Jam Guide panel (see `docs/kb-plan.md`) | L, but looped in S-sized sessions via `/kb-expand` | The style × instrument playbook that powers improv learning |
### How we execute
Knowledgebase work runs as **looped sessions**: `/kb-expand` does exactly one style × instrument cell (research → author → validate → commit), driven by the queue in `docs/kb-backlog.md`. Tranches run on a dedicated branch — e.g. an hourly `/loop /kb-expand` for a working day — and **end with a pull request** so a whole tranche is reviewed in one place. First tranche (started 2026-06-12, branch `kb-expansion`): Session 0 bootstrap + the first guitar style cells, hourly for 8 hours, PR to `main` at the end.
### Definition of "next level" (success criteria)
- A jammer can glance at the app and call the loop in numbers ("it's a 1-5-4").
- Suggestions cover the genres people actually jam (funk/reggae/R&B/gospel included), not just pop/blues.
- A user can lay out their own progression, drag chords around, and see 3+ ways to voice every chord on their instrument.
- The Learn section gives an intermediate guitarist, pianist, or bassist a *specific* next drill in the key they're jamming in right now — and at least one drill where the app verifies them by listening.
+65
View File
@@ -0,0 +1,65 @@
# KB Expansion Backlog
The queue for the `/kb-expand` loop. One cell per session, top-to-bottom. Protocol and schema: [`docs/kb-plan.md`](kb-plan.md). Statuses: `todo``in-progress``done (YYYY-MM-DD, coverage)`.
## Phase 0 — Foundation (must be first)
| # | Cell | Status |
|---|---|---|
| 0 | Bootstrap: `src/data/kb/` + `SCHEMA.md` + `scripts/validate-kb.mjs` + `kb/index.js` + **jazz/guitar gold standard** | done (2026-06-12, iteration 1) |
## Guitar
| # | Style | Status |
|---|---|---|
| 1 | Jazz (part of bootstrap) | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 2 | Blues | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 3 | Rock | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 4 | Bossa Nova | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 5 | Funk | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 6 | Reggae | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 7 | Country / Folk | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 8 | R&B / Neo-soul | done (2026-06-12, 5 progressions × 2 plays, validator ✓) |
| 9 | Gospel | todo |
| 10 | Pop | todo |
## Piano
| # | Style | Status |
|---|---|---|
| 11 | Jazz | todo |
| 12 | Blues | todo |
| 13 | Bossa Nova | todo |
| 14 | Gospel | todo |
| 15 | R&B / Neo-soul | todo |
| 16 | Pop | todo |
| 17 | Rock | todo |
| 18 | Funk | todo |
| 19 | Country / Folk | todo |
| 20 | Reggae | todo |
## Bass
| # | Style | Status |
|---|---|---|
| 21 | Blues | todo |
| 22 | Jazz | todo |
| 23 | Funk | todo |
| 24 | Reggae | todo |
| 25 | Rock | todo |
| 26 | Bossa Nova | todo |
| 27 | R&B / Neo-soul | todo |
| 28 | Country / Folk | todo |
| 29 | Gospel | todo |
| 30 | Pop | todo |
## UI milestones (interleave when their data exists)
| Milestone | Depends on | Status |
|---|---|---|
| Jam Guide MVP (panel, matching, `ChordDiagram.jsx`, live sync) | cell 0 | todo |
| `MiniPiano.jsx` + recipe resolver | cell 11 | todo |
| Bass pattern renderer | cell 21 | todo |
| Improv layer (licks/tabs display) | a few guitar cells | todo |
> Notes for sessions: piano style order front-loads the styles where piano voicings differ most (jazz/gospel/neo-soul); bass order front-loads line-driven styles (blues/jazz/funk). Adjust freely — order is a default, not a rule.
+223
View File
@@ -0,0 +1,223 @@
# Knowledgebase Plan — Styles × Instruments × Progressions × Voicings
The plan for building JamBuddy's **jam knowledgebase**: an intermediate guide to the standard progressions of each style (Jazz, Blues, Rock, Bossa Nova, …) and the different ways to *play* them per instrument (guitar first, then piano, then bass) — expandable one session at a time via a repeatable loop, and rendered live in a large **Jam Guide** panel at the bottom of the app.
Three principles drive everything:
1. **Key-agnostic data.** Everything is stored as scale degrees and movable shapes, never absolute chords. The app detects the key; one KB entry renders in all 12 keys. This is the same convention `PROGRESSIONS.degrees` and the movable shapes in `voicings.js` already use.
2. **Machine-verifiable quality.** A validator proves every voicing actually contains the chord's tones before content lands. That's what makes agent-generated content trustworthy over many loop iterations.
3. **One bounded cell per session.** Each expansion session completes exactly one style × instrument cell (researched, authored, validated, committed). Small enough to review, big enough to matter.
---
## 1. Architecture
```
src/data/kb/
index.js — registry aggregating all styles (UI reads only this)
SCHEMA.md — the authoring contract (formats below, with one full example)
jazz/
meta.js — { id, label, feel, tempoRange, character }
progressions.js — the style's standard progressions (instrument-independent)
guitar.js — guitar pack: plays + comping + improv
piano.js — piano pack
bass.js — bass pack
blues/ … — same shape per style
scripts/
validate-kb.mjs — quality gate, run with `node scripts/validate-kb.mjs`
docs/
kb-backlog.md — the cell matrix with statuses (the loop's queue)
```
`index.js` imports whatever style folders exist — the Jam Guide's style tabs grow automatically as the loop fills cells. A style is usable for one instrument before the others exist (guitar-first rollout).
### Progression entry (per style)
```js
// kb/jazz/progressions.js
export default [
{
id: 'jazz-251-major',
name: 'iiVI',
rn: ['ii7', 'V7', 'Imaj7'],
degrees: [2, 7, 0], // semitone offsets from key root
qualities: ['min7', 'dom7', 'maj7'], // keys of CHORD_TYPES in theory.js
bars: [1, 1, 2],
mode: 'major',
songs: ['Autumn Leaves', 'All The Things You Are'],
tip: 'The 7th of each chord resolves down a half-step to the 3rd of the next.',
},
// … 4-8 progressions per style (see docs/progression-repertoire.md §1 for the lists)
]
```
### Instrument pack — guitar
```js
// kb/jazz/guitar.js
export default {
styleIntro: '2-3 sentences on the guitarist's role in this style.',
comping: [{ label: 'Four-to-the-bar (Freddie Green)', rhythm: ' ', description: '' }],
plays: {
'jazz-251-major': [ // ≥2 "ways to play" per progression
{
label: 'Shell voicings',
level: 'intermediate',
chords: [ // one entry per progression step
{ shape: { rootStr: 5, offsets: ['x', 0, 'x', 0, 1, 'x'], fingers: [0,1,0,2,3,0] },
note: 'root73' },
// …
],
tips: 'Stay light; the 3rds and 7ths do all the work.',
},
{ label: 'Drop-2 on top four strings', /* … */ },
],
},
improv: {
scales: [{ over: 'ii7', scale: 'dorian', why: '' }],
targetNotes: 'Land the 3rd of each chord on beat 1.',
licks: [{ tab: 'e|---', description: '', over: 'jazz-251-major' }],
},
}
```
**Shape format** follows the existing `voicings.js` convention so the renderer is shared: movable shapes use `rootStr` + `offsets` relative to the root fret (renders in any key); open shapes use absolute `frets` + `onlyRoot` (pitch class) and only render when the key matches. Strings are arrays of 6, low-E first, `'x'` = muted.
### Instrument pack — piano
Voicings are **interval recipes** resolved per chord quality (no fingering data needed):
```js
plays: {
'jazz-251-major': [
{
label: 'Rootless A/B alternation',
level: 'intermediate',
chords: [
{ recipe: { LH: ['3', '5', '7', '9'] }, note: 'Type A' }, // ii7
{ recipe: { LH: ['7', '9', '3', '13'] }, note: 'Type B' }, // V7
{ recipe: { LH: ['3', '5', '7', '9'] }, note: 'Type A' }, // Imaj7
],
register: 'top note between C4 and C5',
tips: 'Alternate types so inner voices barely move.',
},
],
}
```
Degrees are chord-degree strings (`'1' '3' 'b7' '9' '13'`); the resolver maps them through the chord quality's intervals (which `theory.js` chord templates already encode).
### Instrument pack — bass
Line patterns per progression step, in degrees plus approach annotations:
```js
plays: {
'blues-12bar': [
{
label: 'Walking, chromatic approach',
level: 'intermediate',
bars: [{ beats: ['R', '3', '5', 'chrom→next'] } /* … per bar */],
tips: 'Beat 1 is always the new root; beat 4 walks into it.',
},
],
}
```
---
## 2. Quality gates
### Mechanical — `scripts/validate-kb.mjs` (must pass before any commit)
- ids unique; every `plays` key references an existing progression id; `chords`/`bars` length matches the progression length
- `degrees` ∈ 011; `qualities` are keys of `CHORD_TYPES`; `mode` is a known mode
- guitar shapes: 6 entries per array, frets 015, **fret span ≤ 4** (intermediate hands), and — the strong check — the shape's computed pitch classes (standard tuning EADGBE) must contain the chord's root and defining tones (3rd/7th or quality equivalent) and contain **no out-of-chord tones**
- piano recipes: every degree resolvable for that chord quality
- coverage per cell: ≥ 4 progressions, ≥ 2 plays per progression, improv section present (guitar/piano), styleIntro present
### Musician checklist (human/agent self-review, in SCHEMA.md)
- Are the plays *idiomatically different* (register, density, difficulty), not just transpositions of each other?
- Is each play genuinely intermediate — no 5-fret stretches, no 2-octave rootless clusters?
- Does the style actually sound like the style (bossa ≠ jazz with different labels: distinct rhythm descriptions)?
- Do tips teach a *transferable* idea (voice leading, register, space), not just "play this"?
---
## 3. The expansion loop
### The queue
`docs/kb-backlog.md` holds the matrix of cells with statuses (`todo` / `in-progress` / `done` + date + coverage). Order: **all guitar cells first** (most voicing complexity — it sets the quality bar), then piano, then bass. Style priority within each instrument: jazz → blues → rock → bossa → funk → reggae → country/folk → R&B/neo-soul → gospel → pop.
### The session protocol (encoded as the `/kb-expand` project skill)
Each session:
1. **Orient** — read this plan, `SCHEMA.md`, the backlog, and the gold-standard cell (`kb/jazz/guitar.js`, the first one built).
2. **Claim** — take the first `todo` cell, mark it `in-progress`.
3. **Research** — dispatch web-research agent(s) for that style × instrument: the style's standard progressions (cross-check against `docs/progression-repertoire.md`), the 2-3 idiomatic intermediate ways to play each, comping rhythms, improv approach. Named sources required.
4. **Author** — write `progressions.js` (if the style is new) and the instrument pack, conforming to SCHEMA.md.
5. **Validate** — run `node scripts/validate-kb.mjs`; fix until green; run the musician checklist.
6. **Integrate** — register the style in `kb/index.js`; `npm run build` must pass.
7. **Record** — mark the cell `done` with date + coverage stats in the backlog; commit (`kb: add <style> <instrument> pack`).
8. **Report** — summarize what was added and name the next cell.
**Session 0 (bootstrap):** if `src/data/kb/`, `SCHEMA.md`, or the validator don't exist yet, the first session builds them *plus* the jazz/guitar gold-standard cell. Every later session imitates that exemplar.
### How to run it
- One session: type **`/kb-expand`** — does exactly one cell.
- Several in a row: `/loop /kb-expand` and let it self-pace, or run `/kb-expand` whenever there's time.
- Review cadence: cells are individual commits on a branch — review/merge per instrument tranche if preferred.
30 cells ≈ 30 short sessions; guitar's 10 cells deliver user-visible value immediately because the Jam Guide reads whatever exists.
---
## 4. The Jam Guide panel (UI)
A large panel at the **bottom of the main scroll** — while jamming you scroll down and the current progression's playbook is laid out to fit the screen.
```
┌─ JAM GUIDE ─────────────────────────────── [Guitar|Piano|Bass] [Jazz][Blues][Rock][Bossa]… ─┐
│ Matched: iiVI in G major your loop: Am7 → D7 → Gmaj7 │
│ │
│ Am7 (ii7) D7 (V7) Gmaj7 (Imaj7) │
│ ▼ playing now │
│ Shells [diagram] [diagram] [diagram] root37, four-to-the-bar │
│ Drop-2 [diagram] [diagram] [diagram] top-4 strings, stays high │
│ Triads 1-3 [diagram] [diagram] [diagram] fills between vocal lines │
│ ───────────────────────────────────────────────────────────────────────────── │
│ IMPROV D dorian → G mixo → G major · target the 3rds: C → F# → B · lick ▸ tab… │
└──────────────────────────────────────────────────────────────────────────────────────────────┘
```
- **Component:** `JamGuide.jsx`, mounted last in `App.jsx`; collapsed header always visible, expands to ~70vh.
- **Inputs:** `keyInfo`, `detectedProgression`, `currentChord` — plus instrument + style selection (persisted in settings; style tabs are generated from `kb/index.js`, so the panel grows as the loop runs).
- **Matching:** convert the detected loop to degrees relative to the key root, match against the selected style's progressions **rotation-invariantly** (same canonicalization idea as `detectRepeatingProgression`). No match → fallback: per-chord voicing alternatives from `voicings.js`, so the panel is never empty.
- **Live sync:** the active chord column highlights using the loop-position logic in `ProgressionBanner.jsx` (`findLoopPosition` — extract it to a shared util). The player reads the *next* voicing in time, in rhythm with the band.
- **Diagrams:** new small renderers — `ChordDiagram.jsx` (6-string × 5-fret SVG grid, consumes the shape format), `MiniPiano.jsx` (~2-octave SVG, highlights resolved recipe notes), bass patterns as degree badges (R · 3 · 5 · ♭7) over a mini string diagram. Reuse design tokens (`bg-panel`, `border-border`, accent purple for chord tones).
- **Smart fit:** CSS grid — columns = progression chords (46), rows = plays; rows beyond what fits collapse behind "more ways ▾"; diagrams scale to column width; on narrow windows the grid flips to one play per row, chords scrolling horizontally.
- **Key-aware rendering:** movable shapes get their fret position computed from the detected key; open shapes appear only when the chord's root matches; piano recipes resolve through the chord quality. All 12 keys for free, per principle 1.
---
## 5. Phases
| Phase | What | Outcome |
|---|---|---|
| 0 | Foundation: `kb/` dirs, `SCHEMA.md`, validator, backlog, `/kb-expand` skill, jazz/guitar gold standard | The loop exists and has an exemplar |
| 1 | Jam Guide MVP: panel + matching + guitar `ChordDiagram` + live sync | jazz/guitar visible in the app while jamming |
| 2 | Loop guitar cells: blues, rock, bossa, funk, reggae, country, R&B, gospel, pop | Full guitar guide across styles |
| 3 | Piano: `MiniPiano` renderer + recipe resolver, loop piano cells | Second instrument live |
| 4 | Bass: pattern renderer, loop bass cells | Third instrument live |
| 5 | Polish: improv layer with tabs/licks, Progression Builder integration (GOAL G3), ToneGym-style tap-to-hear | Guide ↔ Builder round-trip |
### Success criteria
- During a jam, scrolling to the Jam Guide shows ≥ 3 ways to play the detected progression on the selected instrument, in the detected key, with the active chord highlighted in time.
- `/kb-expand` completes a cell in one session with the validator green, no hand-holding.
- A new style added by the loop appears in the UI with **zero code changes** (data + registry only).
- An intermediate player can switch Jazz → Bossa over the same iiVI and see *genuinely different* voicings and rhythm guidance.
+129
View File
@@ -0,0 +1,129 @@
# Learn Curriculum — Intermediate, Jam-Ready Players
Research-backed training repertoire for the Learn section. Companion to [`GOAL.md`](../GOAL.md) Part 2. Audience: players who know the basics and can survive a jam — the goal is making them better *in* the jam. Not beginner material.
Across guitar, piano, and bass pedagogy the intermediate→advanced jump converges on four pillars: **instrument liberation** (play anything anywhere), **playing the changes** (chord-tone awareness), **ensemble skills** (space, register, pocket), and **functional ears** (hearing 1-5-6-4). The per-instrument curricula below feed both the Learn UI and the knowledgebase (see `docs/kb-plan.md`).
---
## Guitar
### Skill taxonomy (rough order)
**Tier A — Fretboard liberation**
1. CAGED system fluency — locate any chord in 5 places instantly (Fretboard Logic, Pickup Music)
2. Triads on string sets — major/minor triads + inversions on strings 1-3, 2-4, 3-5 (Justin Guitar Grade 5, Leavitt Vol. 2)
3. Connecting pentatonic boxes — the box 2↔3 seam is the documented weak point
4. Scale-over-chord mapping — seeing the chord *inside* the scale shape
**Tier B — Playing the changes**
5. Chord-tone / target-note soloing — land on a chord tone on beat 1 of each change
6. Guide tones (3rds & 7ths) — the 7th of one chord resolves to the 3rd of the next
7. Phrasing across positions
**Tier C — Ensemble skills**
8. Comping with small triad voicings — stay out of the vocalist's/keys' register
9. Internal time — metronome on beats 2 & 4, then no click (Tomo Fujita's core emphasis)
10. Ear-led playing — "let your ears lead you instead of your eyes" (Fujita)
**Tier D — Functional ears**
11. Progression recognition by ear — track the bass line first
12. Modal awareness — how Dorian/Mixolydian overlap shapes you already know
13. Transcribing & daily riff-writing — the recurring plateau fix
### Top drills
1. **Triad voice-leading over 12-bar blues** — only close triads on one string set; on every change move each finger to the *nearest* note of the next triad. Forces inversions + minimal-motion voice leading at once.
2. **One-CAGED-position soloing** — improvise using only one grip's chord tones + surrounding scale notes; shift position each chorus. Welds chord, arpeggio, and scale into one visual unit.
3. **Target-note drill** — first note after each chord change must be the 3rd (then 7ths, then 7th→3rd resolutions); pentatonic filler in between. Pure pentatonic playing suddenly "follows the changes".
4. **Pentatonic seam drill** — ascend box 1, exit through a named seam note into box 2, etc. Shifts become melodic destinations.
5. **Metronome on 2 & 4** — click as the snare backbeat; progress to click once per bar, then none.
6. **Comping ladder** — comp behind a recorded soloist using only 3-string triads above fret 5, varying rhythm/dynamics, never register-clashing.
7. **Daily progression dictation** — 10-15 min naming I-IV-V vs vi-IV-I-V vs ii-V-I from songs, bass line first.
### Sources
Fretboard Logic (Bill Edwards) · Justin Guitar Grades 46 · Tomo Fujita *Accelerate Your Guitar Playing* (Berklee) · Leavitt *A Modern Method for Guitar* Vol. 2 · Absolutely Understand Guitar · Pickup Music CAGED pathway · fundamental-changes.com (guide tones) · TrueFire (box connection, plateaus) · Premier Guitar "Rhythm Rules" · zotzinguitarlessons.com (triads in 12 keys) · ToneGym / tonedear.com · stringshock.com & jazzguitartoday.com (jam etiquette)
---
## Piano / Keys
### Skill taxonomy (rough order)
**Tier 1 — Harmonic vocabulary**
1. Triad inversions in all 12 keys — grab any chord near the current hand position
2. Voice leading — minimum-distance inversion choice; the biggest "amateur → pro" jump
3. Shell voicings (root37) — light, clear, gateway to comping (Open Studio, PianoGroove)
4. Sus2/sus4/add9 colors and slash chords — pop/worship vocabulary
5. Rootless voicings — Type A (3-5-7-9), Type B (7-9-3-5); top note between C4C5
**Tier 2 — Rhythm & ensemble role**
6. Comping rhythms — Charleston, reverse Charleston, Red Garland pattern, anticipations
7. Register discipline — LH stays above ~G3 when a bassist is present
8. Density discipline ("rule of 1") — in a 5-piece band, play 1/5 of the music
9. Hand-role splitting — LH harmony/groove anchor, RH color and answers
**Tier 3 — Functional/ear skills**
10. Thinking in numbers (Nashville Number System / Roman numerals)
11. Progression recognition by ear — bass line + emotional flow of each degree
12. Transposition fluency — known songs in all 12 keys via the number method
13. Sight-comping — realize an unfamiliar lead sheet at tempo (Berklee keyboard method)
**Tier 4 — Bandstand**
14. Form-keeping under pressure — never lose bar 1
15. Improvising over changes — chord tones → pentatonics → scale tones
16. Repertoire in 2-3 keys from memory
### Top drills
1. **Voice-led progression loop in 12 keys** — IVviIV with minimum hand movement (C → G/B → Am → F/A), through the circle of fifths. Self-grading: you can see and hear when you jump.
2. **Shell iiVI cycle** — root+3+7 through all keys, alternating types so 3rds/7ths swap and resolve by half-step. The core voice-leading mechanic made physical.
3. **Charleston metronome ladder** — one syncopation pattern to automaticity at 80→160 BPM; comping failure in jams is usually rhythmic, not harmonic.
4. **Backing-track subtraction** — chorus 1 whole notes only; chorus 2 LH only above G3, no roots; chorus 3 RH colors only; chorus 4 two hits per bar. Simulates bandmates occupying frequency space.
5. **Bass-line ear training** — hum the bass note of each chord in a pop song, convert to numbers, play it.
6. **One song, twelve keys** — number-chart a known song, new key daily.
7. **Cold lead-sheet sight-comping** — slow metronome, once through the form, never stopping. Rehearses the actual jam failure mode.
### Sources
Berklee Online Keyboard Method · Mark Levine *The Jazz Piano Book* · Open Studio Piano Pathway · PianoGroove (rootless voicings, comping) · The Jazz Piano Site (jam prep) · Piano With Jonny (voicings, transposing) · Jens Larsen (comping rhythms) · Pianote (band guide, NNS) · Worship Online / Musicademy / Sweetwater (band role) · ToneDear / ToneGym / Musical U / trainear.com (ear training)
---
## Bass
### Skill taxonomy (rough order)
1. Fretboard zone mastery — every note to fret 12, lines through each zone (Friedland)
2. Root-fifth-octave vocabulary — the "safe but musical" jam fallback
3. Chord-tone fluency — R-3-5-7 of maj/min/dom/m7♭5 anywhere (TalkingBass: chord tones *before* scales)
4. Scale-tone vs chord-tone discrimination — outline on strong beats, connect on weak
5. Approach-note technique — chromatic from above/below, W|H|H walkup, dominant approach
6. Walking bass construction — root on 1, chord tones on 1 & 3, approach into the next root on 4
7. Subdivision command — straight 8ths / swing / shuffle / 16th funk, switching mid-groove
8. Pocket / drummer lock — kick matching, ghost notes, dynamic mirroring
9. Functional ear training — root movement, I/IV/V/vi by function
10. Real-time harmonic prediction — the V "pushes home", reacting within one pass of the form
11. Dynamics, touch, space — most cited intermediate→pro separator
12. Fills and form awareness — fills at bars 4/8 phrase boundaries
### Top drills
1. **Root-only song stripping** — play only the root of each change by ear; add 5ths and octaves on later passes. Strips songs to harmonic skeleton.
2. **Arpeggiate the progression** — R-3-5(-7) over I-V-vi-IV in several keys, then inversions, then other neck zones.
3. **W|H|H chromatic walkup** — between chords a 4th apart: root, whole, half, half (C-D-E♭-E→F). Formulaic forward motion that telegraphs the next chord.
4. **Walking 12-bar / 1-6-2-5 loop** — a decision every beat about chord vs passing tone (Friedland, SBL 5-step formula).
5. **2-bar loop challenge** — one groove for 5+ minutes changing only tone/dynamics/note length. Pocket training; exposes drift.
6. **Subdivision switching** — 2 bars 8ths / 2 bars 16ths at 60-80 BPM; click on 2&4 only; mute the click 4 bars and check.
7. **Sing-then-play root movement** — sing the roots before touching the bass, then 3rds/5ths/7ths.
### Sources
Scott's Bass Lessons (Players Path, Groove Trainer) · TalkingBass Chord Tone Essentials · Ed Friedland *Building Walking Bass Lines* · Hal Leonard Bass Method · Berklee Practice Method: Bass · Bass Musician Magazine (drummer lock) · Premier Guitar (jam survival) · StudyBass · Learn Jazz Standards · Jazz Night School (chromatic 4) · onlinebasscourses.com · Functional Ear Trainer
---
## How the app supports this (detection-powered training)
These map to GOAL.md L1L4; the app's unfair advantage is that it *hears* the player.
1. **Target-note highlighting** — on each detected chord change, flash the new chord's 3rd/7th on the fretboard/piano (guitar drill 3, piano drill 2). Later: score whether the first detected note after the change was a chord tone.
2. **Voice-leading coach (piano view)** — highlight the *nearest inversion* to the previous chord, common tones marked "hold"; score total semitone travel per progression.
3. **Next-chord preview tier (bass)** — when a loop is detected, highlight the upcoming chord's root plus its chromatic approach notes a half-step above/below — the walking-line scaffold, one beat ahead.
4. **Progression ear-trainer on your own jam** — hide the chord banner, ask for the numbers (vi-IV-I-V), reveal. Uses chord history + `toRomanNumeral`; contextual beats abstract drills.
5. **Pocket report** — extend the onset/BPM histogram to show beat-phase drift (rushing/dragging), plus a 2-&-4-only click synced to the detected tempo.
6. **Mode-difference teaching** — when the user manually switches mode (the K-S limitation), briefly highlight the difference notes (minor → Dorian = raised 6th).
+149
View File
@@ -0,0 +1,149 @@
# 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 |
|---|---|
| IVviIV | "Axis of Awesome" — #1 in Hooktheory's corpus of 75k+ analyzed songs |
| viIVIV | Same loop rotated to start on vi ("pessimistic axis") |
| IviIVV | "Doo-wop" / "'50s progression" |
| IIVviV | Common variant (Africa chorus) |
| IVViiivi | "Royal Road" — J-pop/anime staple, spreading into Western pop |
### Rock
| Progression | Name / notes |
|---|---|
| IIVV | Foundation of rock/blues/country |
| I–♭VIIIV(I) | Mixolydian rock cliché (Sweet Home Alabama as VIVI rotation) |
| i–♭VII–♭VI(V) | Andalusian-derived minor loop; with V = full Andalusian cadence |
| I–♭IIIIV | 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" |
| ii7V7 in bars 910, turnaround IVI7iiV7 | Jazz blues |
| i7iv7i7 … ♭VI7V7i7 | Minor blues (The Thrill Is Gone) |
| IVIVIVIVIV | 8-bar blues (Key to the Highway) |
### Jazz
| Progression | Name / notes |
|---|---|
| ii7V7Imaj7 | The fundamental cadence |
| IviiiV (also iiiviiiV) | Rhythm changes A / turnaround |
| III7VI7II7V7 | Rhythm changes bridge (circle of dominants) |
| iim7♭5V7♭9i | Minor iiVi |
| ii7–♭II7Imaj7 | Tritone-sub cadence |
| ivm7–♭VII7Imaj7 | "Backdoor" progression |
### Folk / Country
| Progression | Name / notes |
|---|---|
| IIVV(I) | Core of both genres |
| IVIIV | Two/three-chord verse pattern |
| i–♭VII–♭VI | Minor folk descent (AmGF) |
| IVviiiiIVIIVV | Pachelbel progression |
| III7VI | Classic country secondary-dominant (V/V) move |
### Funk
| Progression | Name / notes |
|---|---|
| I7 vamp | James Brown static dominant, voiced as 9th |
| i7IV7 | Dorian two-chord vamp — the most common funk pair |
| i7 / m11 vamp | Minor one-chord groove |
| ii7V7 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 |
|---|---|
| IV or IIV | Two-chord skank vamps |
| IVviIV | No Woman No Cry |
| i–♭VII(–♭VI) | Minor roots-reggae vamp |
| IIVV | Ska/rocksteady standard |
### R&B / Neo-soul
| Progression | Name / notes |
|---|---|
| ii7V7Imaj7 (with 9/11/13 extensions) | Core cadence |
| iii7vi7ii7V7 | Circle movement from the mediant — neo-soul staple |
| viiiVI | "6-2-5-1" cyclical soul loop |
| Imaj7IVmaj7 / Imaj7iii7 | Two-chord vamps |
| i7iv7 | Dorian D'Angelo-style minor vamp |
### Gospel
| Progression | Name / notes |
|---|---|
| ii7V7I | The gospel "2-5-1", often chained: 6-2-5-1, 3-6-2-5-1 |
| II7IV | Tonicizing IV (V7/IV "amen" setup) |
| IVivI | 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 (IVviIV ≡ viIVIV). 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–♭VII7I.
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 C4C5; 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)
+192
View File
@@ -0,0 +1,192 @@
// KB quality gate — validates src/data/kb/ against the contract in src/data/kb/SCHEMA.md.
// Run: node scripts/validate-kb.mjs (exit 1 on any error)
import { readdirSync, existsSync } from 'node:fs'
import { fileURLToPath, pathToFileURL } from 'node:url'
import { dirname, join } from 'node:path'
import { CHORD_TYPES } from '../src/lib/theory.js'
const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..')
const KB = join(ROOT, 'src', 'data', 'kb')
const MODES = ['major', 'minor', 'dorian', 'phrygian', 'lydian', 'mixolydian']
const OPEN_PC = [4, 9, 2, 7, 11, 4] // EADGBe low-E first
const PERFECT_FIFTH = 7
const BASS_TOKENS = ['R', 'b3', '3', '5', '6', 'b7', '7', '9', 'O', 'chrom>', 'chrom<', '5>', 'x', '-']
const MIN_PROGRESSIONS = 4
const MIN_PLAYS = 2
const MAX_SPAN = 4
const errors = []
const err = (where, msg) => errors.push(`${where}: ${msg}`)
// Resolve a degree string ('3', 'b9', '13'…) to a pitch class relative to the
// chord root, through the quality's intervals where the degree is quality-dependent.
function resolveDegree(deg, quality) {
const iv = CHORD_TYPES[quality].intervals
const fixed = { 1: 0, b9: 1, 9: 2, '#9': 3, 11: 5, '#11': 6, b5: 6, b13: 8, 13: 9, 6: 9, b3: 3, b7: 10 }
if (deg === '3') return iv.find(i => i === 3 || i === 4) ?? iv.find(i => i === 2 || i === 5) ?? null
if (deg === '5') return iv.find(i => i === 6 || i === 7 || i === 8) ?? null
if (deg === '7') return iv.find(i => i === 9 || i === 10 || i === 11) ?? null
return fixed[deg] ?? null
}
function checkGuitarShape(where, chordStep, quality) {
const { shape, extensions = [] } = chordStep
if (!shape) return err(where, 'missing shape')
const strings = shape.offsets ?? shape.frets
if (!Array.isArray(strings) || strings.length !== 6)
return err(where, 'offsets/frets must be an array of 6 (low E first)')
const isMovable = !!shape.offsets
if (isMovable) {
if (!(shape.rootStr >= 1 && shape.rootStr <= 6)) return err(where, `bad rootStr ${shape.rootStr}`)
if (strings[6 - shape.rootStr] !== 0) return err(where, 'offset on the root string must be 0')
} else {
if (!(shape.onlyRoot >= 0 && shape.onlyRoot <= 11)) return err(where, 'open shape needs onlyRoot (pc 0-11)')
}
const fretted = strings.filter(f => f !== 'x')
if (fretted.some(f => !Number.isInteger(f) || f < -2 || f > 15))
return err(where, `bad fret values: ${JSON.stringify(strings)}`)
const nonOpen = fretted.filter(f => f !== 0)
if (nonOpen.length && Math.max(...nonOpen) - Math.min(...nonOpen) > MAX_SPAN)
return err(where, `fret span > ${MAX_SPAN} — not intermediate-friendly`)
// Pitch-class verification: every sounded note must belong to the chord
// (quality intervals + declared extensions); defining tones must be present.
const iv = CHORD_TYPES[quality].intervals
const allowed = new Set(iv)
for (const ext of extensions) {
const pc = resolveDegree(ext, quality)
if (pc === null) return err(where, `unresolvable extension '${ext}' for ${quality}`)
allowed.add(pc)
}
const rootRel = isMovable ? (12 - OPEN_PC[6 - shape.rootStr]) % 12 : null
const sounded = new Set()
strings.forEach((f, i) => {
if (f === 'x') return
const pc = isMovable
? (OPEN_PC[i] + rootRel + f + 24) % 12
: (OPEN_PC[i] + f - shape.onlyRoot + 24) % 12
sounded.add(pc)
})
for (const pc of sounded)
if (!allowed.has(pc)) return err(where, `sounded pc ${pc} is not in ${quality} (+ext) — shape misspells the chord`)
const required = iv.filter(i =>
i !== PERFECT_FIFTH
&& !(chordStep.rootless && i === 0)
&& !(chordStep.omit3 && (i === 3 || i === 4)))
for (const pc of required)
if (!sounded.has(pc)) return err(where, `defining tone pc ${pc} of ${quality} missing from shape`)
}
function checkPianoRecipe(where, chordStep, quality) {
const { recipe } = chordStep
if (!recipe) return err(where, 'missing recipe')
for (const hand of ['LH', 'RH']) {
const degs = recipe[hand]
if (degs === undefined) continue
if (!Array.isArray(degs) || !degs.length) return err(where, `${hand} must be a non-empty array`)
if (degs.length > 5) return err(where, `${hand} has ${degs.length} notes — one hand, max 5`)
for (const d of degs)
if (resolveDegree(d, quality) === null) err(where, `unresolvable degree '${d}' for ${quality}`)
}
if (recipe.LH === undefined && recipe.RH === undefined) err(where, 'recipe needs LH and/or RH')
}
function checkBassPlay(where, play, prog) {
const totalBars = prog.bars.reduce((a, b) => a + b, 0)
if (!Array.isArray(play.bars) || play.bars.length !== totalBars)
return err(where, `bars length ${play.bars?.length} ≠ progression total ${totalBars}`)
play.bars.forEach((bar, i) => {
if (!Array.isArray(bar.beats) || !bar.beats.length) return err(`${where} bar ${i}`, 'missing beats')
for (const b of bar.beats)
if (!BASS_TOKENS.includes(b)) err(`${where} bar ${i}`, `unknown beat token '${b}'`)
})
}
async function loadModule(path) {
return (await import(pathToFileURL(path).href)).default
}
const styleDirs = readdirSync(KB, { withFileTypes: true }).filter(d => d.isDirectory()).map(d => d.name)
if (!styleDirs.length) { console.error('No style folders in src/data/kb/'); process.exit(1) }
const registry = existsSync(join(KB, 'index.js')) ? await loadModule(join(KB, 'index.js')) : null
if (!registry) err('kb/index.js', 'registry missing')
const allIds = new Set()
let totals = { styles: 0, progressions: 0, plays: 0 }
for (const style of styleDirs) {
const dir = join(KB, style)
const w = `kb/${style}`
if (registry && !registry[style]) err('kb/index.js', `style '${style}' not registered`)
const meta = existsSync(join(dir, 'meta.js')) ? await loadModule(join(dir, 'meta.js')) : null
if (!meta) { err(w, 'meta.js missing'); continue }
if (meta.id !== style) err(`${w}/meta.js`, `id '${meta.id}' ≠ folder '${style}'`)
for (const f of ['label', 'feel', 'character']) if (!meta[f]) err(`${w}/meta.js`, `missing ${f}`)
const progs = existsSync(join(dir, 'progressions.js')) ? await loadModule(join(dir, 'progressions.js')) : null
if (!Array.isArray(progs) || !progs.length) { err(w, 'progressions.js missing/empty'); continue }
if (progs.length < MIN_PROGRESSIONS) err(w, `${progs.length} progressions < ${MIN_PROGRESSIONS}`)
const progById = {}
for (const p of progs) {
const pw = `${w}/progressions.js [${p.id}]`
if (!p.id?.startsWith(`${style}-`)) err(pw, `id must start with '${style}-'`)
if (allIds.has(p.id)) err(pw, 'duplicate id'); allIds.add(p.id)
progById[p.id] = p
const n = p.degrees?.length
if (!n) { err(pw, 'degrees missing'); continue }
for (const [field, arr] of [['rn', p.rn], ['qualities', p.qualities], ['bars', p.bars]])
if (!Array.isArray(arr) || arr.length !== n) err(pw, `${field} length ≠ degrees length`)
if (p.degrees.some(d => !Number.isInteger(d) || d < 0 || d > 11)) err(pw, 'degrees must be ints 0-11')
for (const q of p.qualities ?? []) if (!CHORD_TYPES[q]) err(pw, `unknown quality '${q}'`)
if (!MODES.includes(p.mode)) err(pw, `unknown mode '${p.mode}'`)
if (!Array.isArray(p.songs) || !p.songs.length) err(pw, 'songs missing')
if (!p.tip) err(pw, 'tip missing')
}
totals.styles++; totals.progressions += progs.length
for (const inst of ['guitar', 'piano', 'bass']) {
const file = join(dir, `${inst}.js`)
if (!existsSync(file)) continue
const pack = await loadModule(file)
const iw = `${w}/${inst}.js`
if (!pack.styleIntro) err(iw, 'styleIntro missing')
if (!Array.isArray(pack.comping) || !pack.comping.length) err(iw, 'comping missing')
if (inst !== 'bass' && (!pack.improv?.scales?.length || !pack.improv?.targetNotes))
err(iw, 'improv.scales / improv.targetNotes required')
for (const p of progs)
if ((pack.plays?.[p.id]?.length ?? 0) < MIN_PLAYS)
err(iw, `progression '${p.id}' has < ${MIN_PLAYS} plays`)
for (const [pid, plays] of Object.entries(pack.plays ?? {})) {
const prog = progById[pid]
if (!prog) { err(iw, `plays key '${pid}' is not a progression of this style`); continue }
plays.forEach((play, pi) => {
const lw = `${iw} ${pid} play[${pi}] "${play.label ?? '?'}"`
if (!play.label || !play.level || !play.tips) err(lw, 'label/level/tips required')
totals.plays++
if (inst === 'bass') return checkBassPlay(lw, play, prog)
if (!Array.isArray(play.chords) || play.chords.length !== prog.degrees.length)
return err(lw, `chords length ≠ progression length ${prog.degrees.length}`)
play.chords.forEach((step, ci) => {
const cw = `${lw} chord[${ci}] (${prog.rn[ci]})`
if (inst === 'guitar') checkGuitarShape(cw, step, prog.qualities[ci])
else checkPianoRecipe(cw, step, prog.qualities[ci])
})
})
}
}
}
if (errors.length) {
console.error(`✗ KB validation failed — ${errors.length} error(s):\n`)
for (const e of errors) console.error(' ' + e)
process.exit(1)
}
console.log(`✓ KB valid — ${totals.styles} style(s), ${totals.progressions} progressions, ${totals.plays} plays`)
+136
View File
@@ -0,0 +1,136 @@
# KB Authoring Contract
Every knowledgebase cell must conform to this schema and pass `node scripts/validate-kb.mjs`. The gold-standard exemplar is `jazz/` — imitate it. Background and rationale: `docs/kb-plan.md`.
## Layout
```
src/data/kb/<style>/
meta.js — style identity
progressions.js — the style's standard progressions (instrument-independent)
guitar.js — instrument packs (piano.js, bass.js as cells are completed)
```
Register each style in `src/data/kb/index.js`. The UI reads only the registry.
## Hard rules
1. **Key-agnostic.** Degrees and movable shapes only — never absolute chord names in data. Open guitar shapes are the one exception (they declare `onlyRoot`, a pitch class, and render only in matching keys).
2. **Qualities** must be keys of `CHORD_TYPES` in `src/lib/theory.js` (`maj`, `min`, `dom7`, `maj7`, `min7`, `dim`, `dim7`, `half_dim`, `aug`, `sus4`, `sus2`, `maj6`, `min6`, `add9`).
3. **Intermediate level.** Guitar: fret span ≤ 4 within a shape. Piano: one hand per recipe stays within a 10th. If a play is harder, provide an easier alternative in the same play set.
4. Plays for the same progression must be **idiomatically different** (register, density, technique) — not transpositions of each other.
## meta.js
```js
export default {
id: 'jazz', // folder name
label: 'Jazz',
feel: 'swing', // swing | straight | shuffle | 16th | bossa…
tempoRange: [110, 230],
character: 'One sentence on what makes the style sound like itself.',
}
```
## progressions.js
```js
export default [
{
id: 'jazz-251-major', // '<style>-<slug>', globally unique
name: 'iiVI',
rn: ['ii7', 'V7', 'Imaj7'], // display numerals
degrees: [2, 7, 0], // semitone offsets from key root, 011
qualities: ['min7', 'dom7', 'maj7'],
bars: [1, 1, 2], // same length as degrees
mode: 'major', // major | minor | dorian | mixolydian | …
songs: ['Autumn Leaves'],
tip: 'One transferable idea.',
},
]
```
48 progressions per style. Cross-check `docs/progression-repertoire.md` §1.
## Instrument packs
Common envelope:
```js
export default {
styleIntro: '2-3 sentences on this instrument's role in the style.',
comping: [{ label, rhythm, description }], // ≥1 named rhythm
plays: { '<progression-id>': [ <play>, <play> ] }, // ≥2 plays per progression
improv: { // guitar/piano; optional for bass
scales: [{ over: 'ii7', scale: 'dorian', why }],
targetNotes: '',
licks: [{ tab/notation, description, over: '<progression-id>', source }],
},
}
```
### Guitar play
```js
{
label: 'Shell voicings',
level: 'intermediate',
chords: [ // one per progression step
{
shape: {
// movable: fret offsets relative to the root fret; 'x' = muted
rootStr: 6, // string carrying the root, 6 = low E
offsets: [0, 'x', 0, 0, 'x', 'x'], // ALWAYS 6 entries, low E first
fingers: [1, 0, 2, 3, 0, 0],
// open shapes instead use: frets: [...absolute], onlyRoot: <pc 0-11>
},
extensions: ['9'], // declared color tones beyond the quality (validator allows only these)
// declared omissions (honest data, surfaced by the UI):
// rootless: true — shape omits the root (e.g. guide-tone grips)
// omit3: true — shape omits the 3rd (e.g. power chords; works over major or minor)
note: 'root–♭7–♭3',
},
// …
],
tips: 'Voice-leading or ensemble advice.',
}
```
### Piano play
Voicings are degree recipes resolved through the chord quality. Degrees: `'1' '3' '5' '7'` resolve per quality (e.g. `'3'` → ♭3 for min7); altered/extended degrees are explicit: `'b9' '9' '#9' '11' '#11' 'b13' '13' '6'`.
```js
{
label: 'Rootless A/B alternation',
level: 'intermediate',
chords: [
{ recipe: { LH: ['3', '5', '7', '9'] }, note: 'Type A' },
{ recipe: { LH: ['7', '9', '3', '13'] }, note: 'Type B' },
],
register: 'top note between C4 and C5',
tips: '…',
}
```
### Bass play
```js
{
label: 'Walking, chromatic approach',
level: 'intermediate',
bars: [{ beats: ['R', '3', '5', 'chrom>'] }], // per bar of the progression
// beat tokens: R 3 5 7 (chord degrees) · 'chrom>' / 'chrom<' (chromatic into next root
// from below/above) · '5>' (dominant approach) · 'x' (ghost) · '-' (hold)
tips: '…',
}
```
## Musician checklist (self-review before committing)
- [ ] Plays per progression genuinely differ in register/density/technique
- [ ] Every shape/recipe is playable by intermediate hands (rule 3)
- [ ] The style is recognizable from the rhythm descriptions alone (bossa ≠ jazz with new labels)
- [ ] Every tip teaches a transferable idea (voice leading, register, space), not just "play this"
- [ ] Songs/licks have sources; nothing invented
- [ ] `node scripts/validate-kb.mjs` green; `npm run build` green
+233
View File
@@ -0,0 +1,233 @@
// Blues guitar pack. Shapes verified by note-spelling against: guitarworld.com
// (13th chords, Jimmy Reed rhythm), fundamental-changes.com (SRV/Freddie King 9ths,
// turnarounds), truefire.com (Texas comping, chord-tone targeting), jazzguitar.be
// (tritone shells), guitarplayer.com (B.B. box, turnarounds).
// Big barre grips — full-band downbeat hits.
const E_BARRE7 = { rootStr: 6, offsets: [0, 2, 0, 1, 0, 0], fingers: [1, 3, 1, 2, 1, 1] } // R-5-♭7-3-5-R
const A_BARRE7 = { rootStr: 5, offsets: ['x', 0, 2, 0, 2, 0], fingers: [0, 1, 3, 1, 4, 1] } // R-5-♭7-3-5
const MIN7_BARRE_6 = { rootStr: 6, offsets: [0, 2, 0, 0, 0, 0], fingers: [1, 3, 1, 1, 1, 1] } // Em-shape m7
const MIN7_BARRE_5 = { rootStr: 5, offsets: ['x', 0, 2, 0, 1, 0], fingers: [0, 1, 3, 1, 2, 1] } // Am-shape m7
// The blues colour chords — root on the A string.
const NINTH = { rootStr: 5, offsets: ['x', 0, -1, 0, 0, 0], fingers: [0, 2, 1, 3, 3, 3] } // R-3-♭7-9-5
const THIRTEEN = { rootStr: 5, offsets: ['x', 0, -1, 0, 0, 2], fingers: [0, 2, 1, 3, 3, 4] } // R-3-♭7-9-13
const THIRTEEN_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 2, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-3-13 (T-Bone register)
const HENDRIX = { rootStr: 5, offsets: ['x', 0, -1, 0, 1, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // 7#9 — ♭3 vs 3 in one grip
// Two-note-tritone shells — the Chicago comping grips.
const SHELL7_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 'x', 'x'], fingers: [1, 0, 2, 3, 0, 0] } // R-♭7-3
const SHELL7_5 = { rootStr: 5, offsets: ['x', 0, 'x', 0, 2, 'x'], fingers: [0, 1, 0, 2, 4, 0] } // R-♭7-3
const SHELL_M7_5 = { rootStr: 5, offsets: ['x', 0, -2, 0, 'x', 'x'], fingers: [0, 3, 1, 4, 0, 0] } // R-♭3-♭7
export default {
styleIntro:
'Blues rhythm guitar is a drum kit with pitch: the shuffle is the job, the chord is the decoration. Pick a lane — low boogie locked with the bass, or high 9th-chord stabs answering the vocal — and never both at once.',
comping: [
{
label: 'Jimmy Reed boogie shuffle',
rhythm: 'swung 8ths: R+5 / R+6 alternating',
description: 'Two-note dyads on the bottom strings, alternating the 5th and 6th above the root in swung eighths; move the same cell to the IV and V strings. Low register, dense — doubles the bass. The "second guitar" role Reed pioneered.',
},
{
label: '9th-chord stabs (Texas / SRV)',
rhythm: 'staccato hits, slide in from a half-step below',
description: 'Short muted stabs of the 9th grip, approached from one fret under (B♭9→B9). Mid-high register, sparse — leaves the low end to the bass. The Freddie King "Hide Away" sound.',
},
{
label: 'Slow blues 12/8',
rhythm: 'rolled chords on a triplet grid',
description: 'At ~60 BPM everything subdivides into triplets: arpeggiated 9ths, the 6↔9 rock on the top strings, fills answering the vocal. Density drops; space is the instrument.',
},
{
label: 'Stormy Monday walk-up',
rhythm: 'one chord per walking step, bars 78',
description: 'Diatonic chord climb I7→ii7→iii7 then chromatic back down — a bassline played as chords. Canonical on the Allman Brothers\' At Fillmore East.',
},
],
plays: {
'blues-12bar': [
{
label: 'Barre-chord shuffle',
level: 'intermediate',
chords: [
{ shape: E_BARRE7, note: 'I7 — root on the 6th string' },
{ shape: E_BARRE7, note: '' }, { shape: E_BARRE7, note: '' }, { shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'IV7 — same fret, root string up' },
{ shape: A_BARRE7, note: '' },
{ shape: E_BARRE7, note: '' }, { shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'V7 — two frets above the IV grip' },
{ shape: A_BARRE7, note: 'IV7' },
{ shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'V7 — push into the next chorus' },
],
tips: 'I, IV and V all live within two frets: 6th-string root, then 5th-string root at the same fret (IV) and two up (V). Strum short — the shuffle lives in the damping hand.',
},
{
label: '9th-chord stabs (Texas)',
level: 'intermediate',
chords: [
{ shape: NINTH, extensions: ['9'], note: 'slide in from one fret below' },
{ shape: NINTH, extensions: ['9'], note: '' }, { shape: NINTH, extensions: ['9'], note: '' }, { shape: NINTH, extensions: ['9'], note: '' },
{ shape: NINTH, extensions: ['9'], note: 'IV9' }, { shape: NINTH, extensions: ['9'], note: '' },
{ shape: NINTH, extensions: ['9'], note: '' }, { shape: NINTH, extensions: ['9'], note: '' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: 'V13 — pinky reaches the 13' },
{ shape: NINTH, extensions: ['9'], note: 'IV9' },
{ shape: NINTH, extensions: ['9'], note: '' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: 'V13' },
],
tips: 'Stab, mute, wait. The 13↔9 drop on the top string is a free melodic hook — comping that sounds like a horn section.',
},
],
'blues-quickchange': [
{
label: 'Tritone shells (Chicago)',
level: 'intermediate',
chords: [
{ shape: SHELL7_6, note: 'I7' },
{ shape: SHELL7_5, note: 'quick IV — only the inner pair moves' },
{ shape: SHELL7_6, note: '' }, { shape: SHELL7_6, note: '' },
{ shape: SHELL7_5, note: '' }, { shape: SHELL7_5, note: '' },
{ shape: SHELL7_6, note: '' }, { shape: SHELL7_6, note: '' },
{ shape: SHELL7_5, note: 'V7' },
{ shape: SHELL7_5, note: 'IV7' },
{ shape: SHELL7_6, note: '' },
{ shape: SHELL7_5, note: 'V7' },
],
tips: 'Three strings, two of them the chord-defining tritone. Drop the I7\'s inner pair one fret and you\'re already playing the IV7\'s guide tones — the quick change costs one finger.',
},
{
label: 'Big barres, quick four',
level: 'intermediate',
chords: [
{ shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'the quick change — bar 2' },
{ shape: E_BARRE7, note: '' }, { shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: '' }, { shape: A_BARRE7, note: '' },
{ shape: E_BARRE7, note: '' }, { shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'V7' },
{ shape: A_BARRE7, note: 'IV7' },
{ shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'V7' },
],
tips: 'Accent bar 2 slightly — telegraphing the quick change keeps the whole jam from splitting between the two 12-bar variants.',
},
],
'blues-8bar': [
{
label: 'Barres through the 8-bar form',
level: 'intermediate',
chords: [
{ shape: E_BARRE7, note: 'I7' },
{ shape: A_BARRE7, note: 'V7 already — count!' },
{ shape: A_BARRE7, note: 'IV7' }, { shape: A_BARRE7, note: '' },
{ shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'V7' },
{ shape: E_BARRE7, note: '' },
{ shape: A_BARRE7, note: 'V7 — turnaround' },
],
tips: 'Half the length, twice the changes per chorus. Lock the form before decorating it.',
},
{
label: '9ths and 13ths, uptown',
level: 'intermediate',
chords: [
{ shape: NINTH, extensions: ['9'], note: '' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: 'V13' },
{ shape: NINTH, extensions: ['9'], note: 'IV9' }, { shape: NINTH, extensions: ['9'], note: '' },
{ shape: NINTH, extensions: ['9'], note: '' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: '' },
{ shape: NINTH, extensions: ['9'], note: '' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: '' },
],
tips: 'The Key-to-the-Highway feel is gentle — roll the chords instead of stabbing them, triplet feel even at medium tempo.',
},
],
'blues-minor': [
{
label: 'm7 barres with the ♯9 climax',
level: 'intermediate',
chords: [
{ shape: MIN7_BARRE_6, note: 'i7' },
{ shape: MIN7_BARRE_6, note: '' }, { shape: MIN7_BARRE_6, note: '' }, { shape: MIN7_BARRE_6, note: '' },
{ shape: MIN7_BARRE_5, note: 'iv7' }, { shape: MIN7_BARRE_5, note: '' },
{ shape: MIN7_BARRE_6, note: '' }, { shape: MIN7_BARRE_6, note: '' },
{ shape: A_BARRE7, note: '♭VI7 — the drama bar' },
{ shape: HENDRIX, extensions: ['#9'], note: 'V7♯9 — the slow-blues scream' },
{ shape: MIN7_BARRE_6, note: '' }, { shape: MIN7_BARRE_6, note: '' },
],
tips: 'Save your dynamics for bars 910: the ♭VI7→V7♯9 half-step drop is the whole emotional payload of the form. Everything before it is patience.',
},
{
label: 'Upper-register minor comping',
level: 'intermediate',
chords: [
{ shape: MIN7_BARRE_5, note: 'i7 — A-string root, above the bass' },
{ shape: MIN7_BARRE_5, note: '' }, { shape: MIN7_BARRE_5, note: '' }, { shape: MIN7_BARRE_5, note: '' },
{ shape: SHELL_M7_5, note: 'iv7 — thin out, the singer is working' },
{ shape: SHELL_M7_5, note: '' },
{ shape: MIN7_BARRE_5, note: '' }, { shape: MIN7_BARRE_5, note: '' },
{ shape: THIRTEEN_6, extensions: ['13'], note: '♭VI13' },
{ shape: NINTH, extensions: ['9'], note: 'V9' },
{ shape: MIN7_BARRE_5, note: '' }, { shape: SHELL_M7_5, note: 'fade to the turnaround' },
],
tips: 'Minor blues is usually slow — 12/8 triplet grid, rolled chords, and at least one full bar per chorus where you play nothing at all.',
},
],
'blues-turnaround': [
{
label: 'Shell cycle',
level: 'intermediate',
chords: [
{ shape: SHELL7_6, note: 'I7' },
{ shape: SHELL7_5, note: 'VI7' },
{ shape: SHELL_M7_5, note: 'ii7' },
{ shape: SHELL7_6, note: 'V7' },
],
tips: 'Often two beats per chord, not a bar — practise it at both speeds. The roots fall in fifths from the VI on, so the grips alternate strings on their own.',
},
{
label: 'Uptown 9ths (T-Bone)',
level: 'intermediate',
chords: [
{ shape: NINTH, extensions: ['9'], note: 'I9' },
{ shape: NINTH, extensions: ['9'], note: 'VI9' },
{ shape: MIN7_BARRE_5, note: 'ii7' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: 'V13 — hold, then slide down a fret into the next chorus' },
],
tips: 'This is the Stormy Monday sound: every dominant becomes a 9th or 13th, approached chromatically. Roll them lazily on the triplet grid.',
},
],
},
improv: {
scales: [
{ over: 'I7', scale: 'mixolydian', why: 'Major pentatonic and Mixolydian shine over the I — the sweet B.B. King side of the coin.' },
{ over: 'IV7', scale: 'mixolydian', why: 'Switch to minor pentatonic (or think the IV\'s own Mixolydian) when the IV arrives — the key\'s major 3rd clashes with its ♭7.' },
{ over: 'V7', scale: 'mixolydian', why: 'Each chord gets its own Mixolydian; adjacent ones differ by one note, so really it\'s "follow the chord tones."' },
{ over: 'i7 (minor blues)', scale: 'minor', why: 'Minor pentatonic + the natural 6 over the iv; harmonic minor colour over the V7.' },
],
targetNotes:
'The 3rd of the current chord at every change is the whole game; hit the ♭7 of the I in bar 4 to announce the IV. The blues curl — a quarter-step bend of the ♭3 toward the major 3 — is the signature ornament.',
licks: [
{
over: 'blues-12bar',
description: 'Classic descending turnaround in E (Robert Johnson "Kind Hearted Woman" lineage): ♭76–♭65 under a high-E pedal, swung triplets, resolving to B7.',
tab: 'e|--0---0---0---0--------2--\nB|--3---2---1---0--------0--\nG|-----------------------2--\nD|-----------------------1--\nA|-----------------------2--\nE|--------------------------\n D C# C B → B7',
source: 'GuitarPlayer "Blues Turnarounds Pt 1"; Fundamental Changes "Blues Turnarounds for Guitar"',
},
{
over: 'blues-12bar',
description: 'B.B. King box lick in C: major-pentatonic box around frets 810 with the signature 2→3 whole-step bend (D bent to E, the 3rd of C7).',
tab: 'e|--8--10b12--10--8---------------\nB|------------------10--8---------\nG|------------------------9-------\n C D→E D C A G E',
source: 'GuitarPlayer "12 Killer Blues Licks"; Guitar World (B.B. box, R-2-4-5-6)',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'blues',
label: 'Blues',
feel: 'shuffle',
tempoRange: [60, 180],
character: 'Dominant 7ths on every chord, swung eighths or 12/8 triplets, and the ♭3-against-3 tension that makes it talk — form is sacred, everything else is conversation.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'blues-12bar',
name: 'Standard 12-bar',
rn: ['I7', 'I7', 'I7', 'I7', 'IV7', 'IV7', 'I7', 'I7', 'V7', 'IV7', 'I7', 'V7'],
degrees: [0, 0, 0, 0, 5, 5, 0, 0, 7, 5, 0, 7],
qualities: ['dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7'],
bars: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
mode: 'major',
songs: ['Sweet Home Chicago', 'Pride and Joy — Stevie Ray Vaughan', 'Johnny B. Goode — Chuck Berry'],
tip: 'Bar 12 is the V7 launching the next chorus — never let it resolve flat. The form is a wheel, and bar 12 is where you push it.',
},
{
id: 'blues-quickchange',
name: 'Quick-change 12-bar',
rn: ['I7', 'IV7', 'I7', 'I7', 'IV7', 'IV7', 'I7', 'I7', 'V7', 'IV7', 'I7', 'V7'],
degrees: [0, 5, 0, 0, 5, 5, 0, 0, 7, 5, 0, 7],
qualities: ['dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7'],
bars: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
mode: 'major',
songs: ['Dust My Broom — Elmore James', 'Hide Away — Freddie King', 'Crossroads — Cream'],
tip: 'One bar of IV in bar 2, then home. Listen for it in the first seconds of a jam — guessing wrong here is the most common train wreck in blues.',
},
{
id: 'blues-8bar',
name: '8-bar blues',
rn: ['I7', 'V7', 'IV7', 'IV7', 'I7', 'V7', 'I7', 'V7'],
degrees: [0, 7, 5, 5, 0, 7, 0, 7],
qualities: ['dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7'],
bars: [1, 1, 1, 1, 1, 1, 1, 1],
mode: 'major',
songs: ['Key to the Highway — Big Bill Broonzy', 'It Hurts Me Too — Elmore James'],
tip: 'The V arrives in bar 2 — much sooner than a 12-bar. Count the form out loud the first chorus; 8-bar tunes wrong-foot 12-bar reflexes.',
},
{
id: 'blues-minor',
name: 'Minor blues',
rn: ['i7', 'i7', 'i7', 'i7', 'iv7', 'iv7', 'i7', 'i7', '♭VI7', 'V7', 'i7', 'i7'],
degrees: [0, 0, 0, 0, 5, 5, 0, 0, 8, 7, 0, 0],
qualities: ['min7', 'min7', 'min7', 'min7', 'min7', 'min7', 'min7', 'min7', 'dom7', 'dom7', 'min7', 'min7'],
bars: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
mode: 'minor',
songs: ['The Thrill Is Gone — B.B. King', 'As the Years Go Passing By — Albert King'],
tip: 'Bars 910 are the whole drama: ♭VI sliding down a half-step to V7. (B.B.\'s recording makes the ♭VI a maj7 — try both colours.)',
},
{
id: 'blues-turnaround',
name: 'Turnaround cycle (IVIiiV)',
rn: ['I7', 'VI7', 'ii7', 'V7'],
degrees: [0, 9, 2, 7],
qualities: ['dom7', 'dom7', 'min7', 'dom7'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['Call It Stormy Monday — T-Bone Walker (intro)', 'jazz-blues bars 1112 everywhere'],
tip: 'The jazz handshake inside the blues — often squeezed into two bars (two beats per chord). Loop it as a vamp and you\'ve learned bars 1112 of every uptown blues.',
},
]
+227
View File
@@ -0,0 +1,227 @@
// Bossa nova guitar pack. Grips verified by note-spelling against: jazzguitar.be
// (Ipanema chords), jenslarsen.nl (bossa patterns, 5 levels), thejazzpianosite.com
// (rhythm layers), Nelson Faria "The Brazilian Guitar Book" (canonical grip source),
// mdecksmusic.com (Ipanema analysis), jazz-circle.com (Blue Bossa, Black Orpheus).
//
// Construction: thumb takes the root on string 6 or 5; fingers take 3-4 notes on
// D-G-B(-e). Every grip movable. Two plays per progression = the two root-string
// sets, because that's how bossa voice-leads: adjacent chords trade root strings
// so inner voices move by one fret ("two fingers move, the chord transforms").
// Root on the low E string (thumb).
const M7_6 = { rootStr: 6, offsets: [0, 'x', 0, 0, 0, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-♭3-5
const MAJ7_6 = { rootStr: 6, offsets: [0, 'x', 1, 1, 0, 'x'], fingers: [1, 0, 3, 4, 2, 0] } // R-7-3-5
const DOM7_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 0, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-3-5
const DOM13_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 2, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-3-13
const DOM7B9_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 0, 1], fingers: [1, 0, 2, 3, 1, 4] } // R-♭7-3-5-♭9
const M7B5_6 = { rootStr: 6, offsets: [0, 'x', 0, 0, -1, 'x'], fingers: [2, 0, 3, 4, 1, 0] } // R-♭7-♭3-♭5
const M6_6 = { rootStr: 6, offsets: [0, 'x', -1, 0, 0, 'x'], fingers: [2, 0, 1, 3, 4, 0] } // R-6-♭3-5
const DIM7_6 = { rootStr: 6, offsets: [0, 'x', -1, 0, -1, 'x'], fingers: [2, 0, 1, 3, 1, 0] } // R-♭♭7-♭3-♭5
const DOM7S11_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, -1, 'x'], fingers: [2, 0, 3, 4, 1, 0] } // R-♭7-3-♯11 (the tritone-sub grip)
// Root on the A string (thumb).
const M7_5 = { rootStr: 5, offsets: ['x', 0, 2, 0, 1, 'x'], fingers: [0, 1, 3, 2, 4, 0] } // R-5-♭7-♭3
const M7_5C = { rootStr: 5, offsets: ['x', 0, -2, 0, 1, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // R-♭3-♭7-♭3 compact grab
const MAJ9_5 = { rootStr: 5, offsets: ['x', 0, -1, 1, 0, 'x'], fingers: [0, 2, 1, 4, 3, 0] } // R-3-7-9
const DOM9_5 = { rootStr: 5, offsets: ['x', 0, -1, 0, 0, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // R-3-♭7-9
const DOM7B9_5 = { rootStr: 5, offsets: ['x', 0, -1, 0, -1, 'x'], fingers: [0, 3, 1, 4, 2, 0] } // R-3-♭7-♭9
const M7B5_5 = { rootStr: 5, offsets: ['x', 0, 1, 0, 1, 'x'], fingers: [0, 1, 3, 2, 4, 0] } // R-♭5-♭7-♭3
const M6_5 = { rootStr: 5, offsets: ['x', 0, -2, -1, -2, 'x'], fingers: [0, 4, 1, 3, 2, 0] } // R-♭3-6-R
const DIM7_5 = { rootStr: 5, offsets: ['x', 0, 1, -1, 1, 'x'], fingers: [0, 2, 3, 1, 4, 0] } // R-♭5-♭♭7-♭3
export default {
styleIntro:
'The bossa guitarist is the whole rhythm section: thumb plays the surdo drum (root on 1, fifth on 3, never syncopated), fingers play the chord block on the anticipations. Quiet is louder — the genre was invented at apartment volume, and intensity comes from rhythmic placement and harmonic colour, never from strumming harder.',
comping: [
{
label: 'Thumb bass (the surdo)',
rhythm: 'B . . . B . . . — root on 1, fifth on 3',
description: 'Metronomic, soft, every bar, under everything. The one layer that is never syncopated. With a bassist: drop it entirely and play only the upper notes.',
},
{
label: 'One-bar starter pattern',
rhythm: 'X . . X . . X . — hits on 1, and-of-2, 4',
description: 'The training-wheels comp: chord block on 1, the and-of-2, and 4 over the steady thumb. Master this before the two-bar pattern.',
},
{
label: 'Two-bar João Gilberto pattern',
rhythm: 'X . . X . . . X~ | . . . X . . X . — the 4& ties over the barline',
description: 'Bar 2 has no downbeat chord — the tied and-of-4 carries across. The anticipation is the hardest and most essential bossa skill. Gilberto drifted between patterns freely; treat it as a motif, not a loop.',
},
{
label: 'Partido alto (the samba cousin — for contrast)',
rhythm: '. X . X X . . X — lands HARD on beat 3',
description: 'Percussive, chopped, with muted ghost-strums — the opposite aesthetic. Bossa never accents beat 3: that beat belongs to the bass register (the surdo). Hammering it squares the lilt into a polka.',
},
],
plays: {
'bossa-ipanema': [
{
label: 'Low-E roots (the João position)',
level: 'intermediate',
chords: [
{ shape: MAJ7_6, note: 'Imaj7' },
{ shape: DOM13_6, extensions: ['13'], note: 'II7(13) — the Lydian ♭7 colour' },
{ shape: M7_6, note: 'ii7' },
{ shape: DOM7S11_6, extensions: ['#11'], note: '♭II7(♯11) — tritone sub of V' },
{ shape: MAJ7_6, note: 'home' },
{ shape: DOM7S11_6, extensions: ['#11'], note: 'and the ♭II7 again — Jobim never quite lets go' },
],
tips: 'The whole A-section lives in a four-fret window: each change moves the thumb a fret or two and one or two fingers inside the grip. If a finger jumps more than two frets, you took a wrong turn.',
},
{
label: 'A-string roots, colour-tone set',
level: 'intermediate',
chords: [
{ shape: MAJ9_5, extensions: ['9'], note: 'Imaj9' },
{ shape: DOM9_5, extensions: ['9'], note: 'II9' },
{ shape: M7_5, note: 'ii7' },
{ shape: DOM9_5, extensions: ['9'], note: '♭II9' },
{ shape: MAJ9_5, extensions: ['9'], note: '' },
{ shape: DOM9_5, extensions: ['9'], note: '' },
],
tips: 'Same progression, one string set higher and sweeter — 9ths everywhere. Use this set when another guitarist or pianist already owns the low-E register. (If the band plays a plain major tonic, the 6/9 grab — drop the 7th for the 6 — is the classic bossa colour.)',
},
],
'bossa-minor-251': [
{
label: 'Low-E roots with the ♭9',
level: 'intermediate',
chords: [
{ shape: M7_6, note: 'i7' },
{ shape: M7B5_6, note: 'iiø7 — the ♭5 on the B string is the saudade note' },
{ shape: DOM7B9_6, extensions: ['b9'], note: 'V7♭9 — the ♭5 you just played, reinterpreted' },
{ shape: M6_6, note: 'i6 — resolve to the sixth, not the seventh' },
],
tips: 'One pitch threads the middle of the progression: the iiø7\'s ♭5 IS the V7\'s ♭9. Find it, hold it, let the thumb do the moving.',
},
{
label: 'A-string roots, compact grabs',
level: 'intermediate',
chords: [
{ shape: M7_5C, note: 'compact i7 — no 5th, pure bossa economy' },
{ shape: M7B5_5, note: 'iiø7' },
{ shape: DOM7B9_5, extensions: ['b9'], note: 'V7♭9' },
{ shape: M6_5, note: 'i6' },
],
tips: 'Black Orpheus oscillates between this cell and the relative major\'s iiVI — learn both as one hand pattern and the whole tune is two moves.',
},
],
'bossa-blue': [
{
label: 'Thumb-bass through the form',
level: 'intermediate',
chords: [
{ shape: M7_6, note: 'i7' }, { shape: M7_6, note: '' },
{ shape: M7_5, note: 'iv7 — A-string root, same fret region' }, { shape: M7_5, note: '' },
{ shape: M7B5_5, note: 'iiø7' },
{ shape: DOM7B9_6, extensions: ['b9'], note: 'V7♭9' },
{ shape: M7_6, note: '' }, { shape: M7_6, note: '' },
{ shape: M7_6, note: '♭iii7 — the excursion begins' },
{ shape: DOM9_5, extensions: ['9'], note: '♭VI9' },
{ shape: MAJ9_5, extensions: ['9'], note: '♭IImaj9 — a major-key vacation' },
{ shape: MAJ9_5, extensions: ['9'], note: '' },
{ shape: M7B5_5, note: 'iiø7 — back to reality' },
{ shape: DOM7B9_6, extensions: ['b9'], note: 'V7♭9' },
{ shape: M7_6, note: '' }, { shape: M7_6, note: '' },
],
tips: 'i and iv sit on adjacent root strings in one position, like a blues. The bars 912 excursion is a normal major iiVI — play it sweeter, then darken again for the iiø7.',
},
{
label: 'Colour set (9ths and the 6/9 cadence)',
level: 'intermediate',
chords: [
{ shape: M7_5C, note: '' }, { shape: M7_5C, note: '' },
{ shape: M7_6, note: 'iv7 low' }, { shape: M7_6, note: '' },
{ shape: M7B5_6, note: '' },
{ shape: DOM7B9_5, extensions: ['b9'], note: '' },
{ shape: M7_5C, note: '' }, { shape: M7_5C, note: '' },
{ shape: M7_5C, note: '' },
{ shape: DOM13_6, extensions: ['13'], note: '♭VI13' },
{ shape: MAJ9_5, extensions: ['9'], note: '♭IImaj9' },
{ shape: MAJ9_5, extensions: ['9'], note: '' },
{ shape: M7B5_6, note: '' },
{ shape: DOM7B9_5, extensions: ['b9'], note: '' },
{ shape: M7_5C, note: '' }, { shape: M7_5C, note: '' },
],
tips: 'Blue Bossa\'s tonic is a true m7 — save the m6 colour for tunes that ask for it (see the minor iiVi cell). Keep all of it at whisper volume.',
},
],
'bossa-one-note': [
{
label: 'Two grips falling by half-steps (A-string roots)',
level: 'intermediate',
chords: [
{ shape: M7_5, note: 'iii7' },
{ shape: DOM9_5, extensions: ['9'], note: '♭III9 — same fret region, one finger reshapes' },
{ shape: M7_5, note: 'ii7 — whole grip slides down' },
{ shape: DOM9_5, extensions: ['9'], note: '♭II9' },
],
tips: 'The entire progression is two grips alternating while the thumb walks down chromatically. Hold one melody note on top if you can reach it — that\'s the whole point of the tune.',
},
{
label: 'Low-E roots with 13s',
level: 'intermediate',
chords: [
{ shape: M7_6, note: '' },
{ shape: DOM13_6, extensions: ['13'], note: '♭III13' },
{ shape: M7_6, note: '' },
{ shape: DOM13_6, extensions: ['13'], note: '♭II13' },
],
tips: 'The 13 on top of each dominant descends in parallel with the bass — two chromatic lines moving in lockstep, which is why this progression sounds inevitable.',
},
],
'bossa-corcovado': [
{
label: 'Chromatic staircase, low-E roots',
level: 'intermediate',
chords: [
{ shape: M6_6, note: 'iii6' },
{ shape: DIM7_6, note: 'passing °7 — one fret down' },
{ shape: M7_6, note: 'ii7 — one more' },
{ shape: DOM7S11_6, extensions: ['#11'], note: '♭II7(♯11) — tritone sub' },
{ shape: MAJ7_6, note: 'Imaj7 — arrival' },
],
tips: 'The low E string walks down one fret per bar — let that bassline sing through the grips. This is the same passing-diminished device as How Insensitive; learn it once, hear it everywhere in Jobim.',
},
{
label: 'A-string set with the 6/9 landing',
level: 'intermediate',
chords: [
{ shape: M6_5, note: 'iii6' },
{ shape: DIM7_5, note: '°7' },
{ shape: M7_5C, note: 'ii7' },
{ shape: DOM7B9_5, extensions: ['b9'], note: '♭II7(♭9)' },
{ shape: MAJ9_5, extensions: ['9'], note: 'Imaj9 — arrival' },
],
tips: 'When the singer holds the tonic, swap the maj9 for a 6/9 grab (7th down to the 6) — no leading tone to fight them. Over a detected maj7, stay with the maj9.',
},
],
},
improv: {
scales: [
{ over: 'ii7 / i7 / iv7', scale: 'dorian', why: 'All the minor 7ths take Dorian — bossa is jazz harmony in a swimsuit.' },
{ over: 'V7 → major I', scale: 'mixolydian', why: 'Plain Mixolydian when resolving to major; add the 13 — it\'s the genre\'s favourite colour.' },
{ over: 'II7 / ♭II7 (tritone subs)', scale: 'lydian', why: 'Lydian dominant (melodic minor from the 5th) — the ♯11 is already in the chord grip.' },
{ over: 'V7♭9 → minor i', scale: 'phrygian', why: 'Phrygian dominant (harmonic minor from the V) for the ♭9; the altered scale if you want more trouble.' },
{ over: 'iiø7', scale: 'locrian', why: 'Locrian, or raise the 2 (melodic-minor mode 6) for a smoother colour.' },
],
targetNotes:
'Bossa solos are melody-first: hold or repeat a small cell and let the CHORDS recontextualise it — One Note Samba is the method stated as a song title. Target the colour tones (9, 13, ♯11) and the 3rd/7th guide-tone line; avoid sitting on roots. Phrase behind the beat and leave bar-length gaps.',
licks: [
{
over: 'bossa-ipanema',
description: 'The Ipanema opening cell: the melody sits on the 9th and major 7th of the Imaj7 — never the root. The identical two notes work over the II7 bars, where they become root and 13.',
tab: 'e|--3--------------3-----------\nB|------5--5--3--------5--5----\n G E E D G E E\n (9) (7)(7)(6) (9) (7)(7) over Fmaj7',
source: '"Garota de Ipanema" — Jobim/de Moraes (Real Book lead sheet; mDecks harmonic analysis)',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'bossa',
label: 'Bossa Nova',
feel: 'bossa',
tempoRange: [110, 160],
character: 'A whole samba band condensed into one quiet guitar: metronomic thumb bass, syncopated chord block that never accents beat 3, and jazz harmony at conversation volume.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'bossa-ipanema',
name: 'Ipanema A-section (Imaj7II7ii7–♭II7)',
rn: ['Imaj7', 'II7', 'ii7', '♭II7', 'Imaj7', '♭II7'],
degrees: [0, 2, 2, 1, 0, 1],
qualities: ['maj7', 'dom7', 'min7', 'dom7', 'maj7', 'dom7'],
bars: [2, 2, 1, 1, 1, 1],
mode: 'major',
songs: ['The Girl from Ipanema — Jobim', 'Desafinado (same II7 colour)'],
tip: 'The II7 is a true dominant-II (Lydian ♭7 colour), and the ♭II7 is the tritone sub of V — the bass slides home by half-step instead of jumping a fifth.',
},
{
id: 'bossa-minor-251',
name: 'Minor iiVi (Black Orpheus)',
rn: ['i7', 'iiø7', 'V7♭9', 'i6'],
degrees: [0, 2, 7, 0],
qualities: ['min7', 'half_dim', 'dom7', 'min6'],
bars: [1, 1, 1, 1],
mode: 'minor',
songs: ['Manhã de Carnaval (Black Orpheus) — Luiz Bonfá', 'How Insensitive — Jobim (same engine)'],
tip: 'The bossa minor tonic is the m6, not the m7 — that major sixth is the saudade. The ♭5 of the iiø7 returns as the ♭9 of the V7.',
},
{
id: 'bossa-blue',
name: 'Blue Bossa (16-bar form)',
rn: ['i7', 'i7', 'iv7', 'iv7', 'iiø7', 'V7', 'i7', 'i7', '♭iii7', '♭VI7', '♭IImaj7', '♭IImaj7', 'iiø7', 'V7', 'i7', 'i7'],
degrees: [0, 0, 5, 5, 2, 7, 0, 0, 3, 8, 1, 1, 2, 7, 0, 0],
qualities: ['min7', 'min7', 'min7', 'min7', 'half_dim', 'dom7', 'min7', 'min7', 'min7', 'dom7', 'maj7', 'maj7', 'half_dim', 'dom7', 'min7', 'min7'],
bars: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
mode: 'minor',
songs: ['Blue Bossa — Kenny Dorham'],
tip: 'iiviiø–V in minor, then a complete iiVI excursion a half-step up (♭II major) in bars 912. The jam-session bossa: everyone knows it, nobody minds another chorus.',
},
{
id: 'bossa-one-note',
name: 'Chromatic iiV chain (One Note Samba)',
rn: ['iii7', '♭III7', 'ii7', '♭II7'],
degrees: [4, 3, 2, 1],
qualities: ['min7', 'dom7', 'min7', 'dom7'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['One Note Samba — Jobim'],
tip: 'iiiVIiiV with both dominants tritone-subbed: the bass walks straight down by half-steps while one melody note holds on top. Two grips, alternating, falling.',
},
{
id: 'bossa-corcovado',
name: 'Corcovado descent',
rn: ['iii6', '♭iii°7', 'ii7', '♭II7', 'Imaj7'],
degrees: [4, 3, 2, 1, 0],
qualities: ['min6', 'dim7', 'min7', 'dom7', 'maj7'],
bars: [1, 1, 1, 1, 2],
mode: 'major',
songs: ['Corcovado (Quiet Nights) — Jobim', 'How Insensitive — Jobim (same passing-dim device)'],
tip: 'A chromatic staircase into the I: m6 → passing diminished → ii → tritone sub. (Charts vary on bar 2 — some write a II7(13) instead of the ♭iii°7; both are in circulation.)',
},
]
+230
View File
@@ -0,0 +1,230 @@
// Country/folk guitar pack. Shapes verified by note-spelling against:
// acousticguitar.com (boom-chuck, bass runs, Travis picking), fretjam.com
// (alternate bass map), hvbluegrass.org (the Lester Flatt G-run), premierguitar.com
// (double-stops), wernickmethod.org & drbanjo.com (jam etiquette), andyguitar.co.uk
// (train beat), untidymusic.com (anchor-finger folk chords).
// Open shapes — the genre's home. Render only when the chord root matches.
const OPEN_G_FOLK = { onlyRoot: 7, frets: [3, 2, 0, 0, 3, 3], fingers: [2, 1, 0, 0, 3, 4] } // big ringing folk G
const OPEN_C = { onlyRoot: 0, frets: ['x', 3, 2, 0, 1, 0], fingers: [0, 3, 2, 0, 1, 0] }
const OPEN_CADD9 = { onlyRoot: 0, frets: ['x', 3, 2, 0, 3, 3], fingers: [0, 2, 1, 0, 3, 4] }
const OPEN_D = { onlyRoot: 2, frets: ['x', 'x', 0, 2, 3, 2], fingers: [0, 0, 0, 1, 3, 2] }
const OPEN_D7 = { onlyRoot: 2, frets: ['x', 'x', 0, 2, 1, 2], fingers: [0, 0, 0, 2, 1, 3] }
const OPEN_A7 = { onlyRoot: 9, frets: ['x', 0, 2, 0, 2, 0], fingers: [0, 0, 1, 0, 2, 0] }
const OPEN_G7 = { onlyRoot: 7, frets: [3, 2, 0, 0, 0, 1], fingers: [3, 2, 0, 0, 0, 1] }
const OPEN_E = { onlyRoot: 4, frets: [0, 2, 2, 1, 0, 0], fingers: [0, 2, 3, 1, 0, 0] }
const OPEN_EM7 = { onlyRoot: 4, frets: [0, 2, 2, 0, 3, 3], fingers: [0, 1, 2, 0, 3, 4] }
const OPEN_AM = { onlyRoot: 9, frets: ['x', 0, 2, 2, 1, 0], fingers: [0, 0, 2, 3, 1, 0] }
const OPEN_F = { onlyRoot: 5, frets: ['x', 'x', 3, 2, 1, 1], fingers: [0, 0, 3, 2, 1, 1] }
// Movable barres — for when the capo can't save you.
const BARRE_MAJ_6 = { rootStr: 6, offsets: [0, 2, 2, 1, 0, 0], fingers: [1, 3, 4, 2, 1, 1] }
const BARRE_MAJ_5 = { rootStr: 5, offsets: ['x', 0, 2, 2, 2, 0], fingers: [0, 1, 2, 3, 4, 1] }
const BARRE_MIN_6 = { rootStr: 6, offsets: [0, 2, 2, 0, 0, 0], fingers: [1, 3, 4, 1, 1, 1] }
const BARRE_DOM7_6 = { rootStr: 6, offsets: [0, 2, 0, 1, 0, 0], fingers: [1, 3, 1, 2, 1, 1] }
const BARRE_DOM7_5 = { rootStr: 5, offsets: ['x', 0, 2, 0, 2, 0], fingers: [0, 1, 3, 1, 4, 1] }
export default {
styleIntro:
'In a folk circle you accompany the singer; in a bluegrass jam you ARE the drums — bass notes on 1 and 3 (kick), crisp strums on 2 and 4 (snare), bass runs announcing every change, and the capo moving your open shapes to whatever key the singer holds up fingers for.',
comping: [
{
label: 'Boom-chick (alternating bass)',
rhythm: 'B . X . B . X . — root bass, strum, 5th bass, strum',
description: 'The engine: picked bass note (root on 1, fifth on 3 — each open chord has its alternation map), down-strum chick between. Add an up-strum after each chick for "boom chick-a".',
},
{
label: 'Carter bass runs',
rhythm: 'runs replace beats 34 before a change',
description: 'G→C: walk GAB into the C. C→G: walk back down. G→D: GABC♯. The run tells the whole circle the change is coming — in bluegrass it\'s practically mandatory.',
},
{
label: 'Travis picking',
rhythm: 'thumb: steady quarters on alternating bass; fingers: syncopated treble',
description: 'Thumb never stops (the §boom-chick map), index/middle pick G and B strings between, pinch on beat 1. Freight Train is the curriculum.',
},
{
label: 'Train beat (Cash)',
rhythm: 'D D U D U D U with accents on 2 & 4, half-muted',
description: 'Strings damped just enough to fake a snare; keep the boom note clean, mute only the chicks. Folsom Prison at any tempo.',
},
{
label: 'Waltz boom-chick-chick',
rhythm: '3/4: B X X — bass, strum, strum',
description: 'Bass note on 1, two strums after, alternating root/5th by bar. Tennessee Waltz, Amazing Grace — every jam has them.',
},
],
plays: {
'country-145': [
{
label: 'Open G-family, boom-chick',
level: 'intermediate',
chords: [
{ shape: OPEN_G_FOLK, note: 'I — bass alternates low-E G / open-D D' },
{ shape: OPEN_G_FOLK, note: '' },
{ shape: OPEN_C, extensions: [], note: 'IV — bass: A-string C / low-E G' },
{ shape: OPEN_G_FOLK, note: 'walk back down CBAG' },
{ shape: OPEN_G_FOLK, note: '' },
{ shape: OPEN_G_FOLK, note: '' },
{ shape: OPEN_D7, note: 'V7 — bass: open D / open A' },
{ shape: OPEN_G_FOLK, note: 'home, G-run on the phrase end' },
],
tips: 'This is the key-of-G home position; for the singer\'s key, move the capo, not the shapes (A = capo 2, B♭ = capo 3, B = capo 4 — the G-run survives the capo, a barre kills it).',
},
{
label: 'Barre shapes (capo-proof)',
level: 'intermediate',
chords: [
{ shape: BARRE_MAJ_6, note: 'I' },
{ shape: BARRE_MAJ_6, note: '' },
{ shape: BARRE_MAJ_5, note: 'IV — same fret, next string' },
{ shape: BARRE_MAJ_6, note: '' },
{ shape: BARRE_MAJ_6, note: '' },
{ shape: BARRE_MAJ_6, note: '' },
{ shape: BARRE_DOM7_5, note: 'V7 — two frets up from the IV' },
{ shape: BARRE_MAJ_6, note: '' },
],
tips: 'For keys where no capo position gives you open strings. You lose the ringing folk voice — keep the alternating-bass right hand so you don\'t lose the genre.',
},
],
'country-folk-axis': [
{
label: 'Anchor-finger folk set',
level: 'intermediate',
chords: [
{ shape: OPEN_G_FOLK, note: 'I — ring+pinky stay planted on the top two strings' },
{ shape: OPEN_D, note: 'V' },
{ shape: OPEN_EM7, extensions: ['b7'], note: 'vi as Em7 — two fingers move, anchors hold' },
{ shape: OPEN_CADD9, extensions: ['9'], note: 'IV as Cadd9 — same anchors again' },
{ shape: OPEN_G_FOLK, note: '' },
{ shape: OPEN_D, note: '' },
{ shape: OPEN_CADD9, extensions: ['9'], note: '' },
{ shape: OPEN_CADD9, extensions: ['9'], note: 'two bars of IV — let it ring' },
],
tips: 'The modern-folk G-family sound: the top two strings drone through every chord while two fingers do the changes. Wagon Wheel is capo 2 with exactly these grips.',
},
{
label: 'Barre version',
level: 'intermediate',
chords: [
{ shape: BARRE_MAJ_6, note: 'I' },
{ shape: BARRE_MAJ_5, note: 'V' },
{ shape: BARRE_MIN_6, note: 'vi' },
{ shape: BARRE_MAJ_5, note: 'IV' },
{ shape: BARRE_MAJ_6, note: '' },
{ shape: BARRE_MAJ_5, note: '' },
{ shape: BARRE_MAJ_5, note: '' },
{ shape: BARRE_MAJ_5, note: '' },
],
tips: 'When the song lands in a capo-hostile key. Lighten the left hand between strums — folk barres should breathe, not sustain like rock.',
},
],
'country-ragtime': [
{
label: 'Open C-family (Alice\'s Restaurant grips)',
level: 'intermediate',
chords: [
{ shape: OPEN_C, note: 'I' },
{ shape: OPEN_A7, note: 'VI7 — the ragtime surprise' },
{ shape: OPEN_D7, note: 'II7' },
{ shape: OPEN_G7, note: 'V7 — and the sled arrives home' },
],
tips: 'Each dominant pulls into the next — lean on the bass notes (C→A→D→G is itself a circle of fifths) and the progression plays itself. Capo 2 = the Alice\'s Restaurant recording.',
},
{
label: 'Barre circle',
level: 'intermediate',
chords: [
{ shape: BARRE_MAJ_6, note: 'I' },
{ shape: BARRE_DOM7_5, note: 'VI7' },
{ shape: BARRE_DOM7_6, note: 'II7' },
{ shape: BARRE_DOM7_5, note: 'V7' },
],
tips: 'Roots alternate 6th and 5th strings around the circle, so the hand barely travels. Swing the strums — this family is ragtime\'s grandchild.',
},
],
'country-rising-sun': [
{
label: 'The Animals grips (6/8 arpeggios)',
level: 'intermediate',
chords: [
{ shape: OPEN_AM, note: 'i — arpeggiate low to high, one sweep per bar' },
{ shape: OPEN_C, note: 'III' },
{ shape: OPEN_D, note: 'IV — the borrowed Dorian colour' },
{ shape: OPEN_F, note: 'VI' },
{ shape: OPEN_AM, note: '' },
{ shape: OPEN_E, note: 'V — the harmonic-minor pull home' },
],
tips: 'Six chords, one arpeggio pattern: bass note then climb the strings in 6/8. The D major is the chord that makes it haunting — don\'t flatten it to Dm.',
},
{
label: 'Barre version',
level: 'intermediate',
chords: [
{ shape: BARRE_MIN_6, note: 'i' },
{ shape: BARRE_MAJ_6, note: 'III' },
{ shape: BARRE_MAJ_5, note: 'IV' },
{ shape: BARRE_MAJ_6, note: 'VI' },
{ shape: BARRE_MIN_6, note: '' },
{ shape: BARRE_MAJ_6, note: 'V' },
],
tips: 'Keeps the climb available in any key — arpeggiate the barres rather than strumming them or the 6/8 lilt disappears.',
},
],
'country-bluegrass-cycle': [
{
label: 'G shapes, jam-circle standard',
level: 'intermediate',
chords: [
{ shape: OPEN_G_FOLK, note: 'I' },
{ shape: OPEN_C, note: 'IV — walk up GAB into it' },
{ shape: OPEN_G_FOLK, note: 'walk back down' },
{ shape: OPEN_D, note: 'V — chromatic walk GABC♯ if you\'re feeling it' },
],
tips: 'Bluegrass keys are called in fiddle terms: A = capo 2, B = capo 4, all G shapes. Bass on 1 & 3 locks with the upright; your 2 & 4 strums ARE the snare — there is no drummer.',
},
{
label: 'C shapes (for keys C, D via capo)',
level: 'intermediate',
chords: [
{ shape: OPEN_C, note: 'I' },
{ shape: OPEN_F, note: 'IV — small F, top four strings' },
{ shape: OPEN_C, note: '' },
{ shape: OPEN_G7, extensions: ['b7'], note: 'V played as V7 — the bluegrass default' },
],
tips: 'The C family gives different bass runs (CDE into F) — worth owning both families so the capo choice is about the singer, not your habits.',
},
],
},
improv: {
scales: [
{ over: 'I / major vamps', scale: 'major', why: 'Major pentatonic is the country default — the Don Rich/Buck Owens sweetness.' },
{ over: 'I with attitude', scale: 'mixolydian', why: 'The "country composite": major pentatonic + the ♭3 blue note, always resolved up to the major 3rd.' },
{ over: 'i (minor folk)', scale: 'minor', why: 'Natural minor with the harmonic-minor leading tone saved for when the V chord arrives.' },
{ over: 'V7 / II7 (ragtime circle)', scale: 'mixolydian', why: 'Each dominant gets its own Mixolydian; target the 3rd of each as the circle turns.' },
],
targetNotes:
'Country fills are double-stops: 3rds on the G+B pair, 6ths on G+e (hybrid-picked for the snap), slid or hammered into chord tones on the beat. End phrases with the G-run — it is the genre\'s punctuation mark.',
licks: [
{
over: 'country-bluegrass-cycle',
description: 'THE G-run (Lester Flatt): the canonical bluegrass phrase-ending tag — hammer through the blue note and land on the open G chord on the downbeat.',
tab: 'e|----------------------------3--\nB|----------------------------0--\nG|---------------------0------0--\nD|---------------0--2---------0--\nA|--0--h1--2------------------2--\nE|----------------------------3--\n A A# B D E G (G chord on 1)',
source: 'hvbluegrass.org "The Truth About the Lester Flatt G Run"; artistworks.com essential bluegrass licks',
},
{
over: 'country-bluegrass-cycle',
description: 'The original two-note Flatt run for flying tempos: E up to G at the phrase end — "an exclamation point at the end of a paragraph."',
tab: 'G|--------0-- (open G)\nD|--2-------- (E)',
source: 'hvbluegrass.org / nativeground.com (Flatt & Scruggs history)',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'country',
label: 'Country / Folk',
feel: 'boom-chick',
tempoRange: [80, 160],
character: 'Open strings, alternating bass, and the capo as a transposition machine: the guitar is the band\'s kick drum and snare, and every chord change gets announced by a bass run.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'country-145',
name: 'Country IIVV (8-bar form)',
rn: ['I', 'I', 'IV', 'I', 'I', 'I', 'V7', 'I'],
degrees: [0, 0, 5, 0, 0, 0, 7, 0],
qualities: ['maj', 'maj', 'maj', 'maj', 'maj', 'maj', 'dom7', 'maj'],
bars: [1, 1, 1, 1, 1, 1, 1, 1],
mode: 'major',
songs: ['Will the Circle Be Unbroken', 'Ring of Fire — Johnny Cash'],
tip: 'The placement is the convention: IV arrives mid-phrase, V7 on the last line pulling home. Learn where the changes BREATHE, not just what they are.',
},
{
id: 'country-folk-axis',
name: 'Folk axis (Wagon Wheel loop)',
rn: ['I', 'V', 'vi', 'IV', 'I', 'V', 'IV', 'IV'],
degrees: [0, 7, 9, 5, 0, 7, 5, 5],
qualities: ['maj', 'maj', 'min', 'maj', 'maj', 'maj', 'maj', 'maj'],
bars: [1, 1, 1, 1, 1, 1, 1, 1],
mode: 'major',
songs: ['Wagon Wheel — Old Crow Medicine Show (G shapes, capo 2)'],
tip: 'The pop axis loop in folk clothes — note the second half lands on IVIV instead of viIV. Capo 2 with G shapes is the canonical version.',
},
{
id: 'country-ragtime',
name: 'Ragtime circle (IVI7II7V7)',
rn: ['I', 'VI7', 'II7', 'V7'],
degrees: [0, 9, 2, 7],
qualities: ['maj', 'dom7', 'dom7', 'dom7'],
bars: [2, 2, 2, 2],
mode: 'major',
songs: ['Salty Dog Blues — Flatt & Scruggs', "Alice's Restaurant — Arlo Guthrie", 'Tennessee Waltz (bridge)'],
tip: 'Every chord is the dominant of the next — a circle-of-fifths sled ride home. The truncated III7VI ("Hey, Good Lookin\'") is the same device minus the VI7.',
},
{
id: 'country-rising-sun',
name: 'Rising Sun (6/8 minor climb)',
rn: ['i', 'III', 'IV', 'VI', 'i', 'V'],
degrees: [0, 3, 5, 8, 0, 7],
qualities: ['min', 'maj', 'maj', 'maj', 'min', 'maj'],
bars: [1, 1, 1, 1, 1, 1],
mode: 'minor',
songs: ['House of the Rising Sun — The Animals'],
tip: 'Not the Andalusian descent people assume: it CLIMBS, and the major IV is borrowed Dorian colour. 6/8 time, arpeggiated, every chord one sweep of the arm.',
},
{
id: 'country-bluegrass-cycle',
name: 'Bluegrass cycle (IIVIV)',
rn: ['I', 'IV', 'I', 'V'],
degrees: [0, 5, 0, 7],
qualities: ['maj', 'maj', 'maj', 'maj'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['Nine Pound Hammer — Merle Travis'],
tip: 'The jam-circle workhorse: back to I between every excursion. Kick it off with the last line of the chorus, end every phrase with a G-run.',
},
]
+188
View File
@@ -0,0 +1,188 @@
// Funk guitar pack. Shapes verified by note-spelling against: justinguitar.com
// (E9 "the funk chord"), fundamental-changes.com (funk chords, JB E9-D9 accents),
// yourguitaracademy.com (Sex Machine pattern), musicradar.com (Nile Rodgers grips),
// ethanhein.com (Chameleon Dorian analysis), Wikipedia (Jimmy Nolen chicken scratch).
// 5th-string-root colour chords — the Nolen vocabulary.
const NINE = { rootStr: 5, offsets: ['x', 0, -1, 0, 0, 0], fingers: [0, 2, 1, 3, 3, 3] } // R-3-♭7-9-5: THE funk chord
const THIRTEEN = { rootStr: 5, offsets: ['x', 0, -1, 0, 0, 2], fingers: [0, 2, 1, 3, 3, 4] } // 9 grip, pinky takes 5→13
const NINESUS = { rootStr: 5, offsets: ['x', 0, 0, 0, 0, 0], fingers: [0, 1, 1, 1, 1, 1] } // full barre: R-4-♭7-9-5
const HENDRIX = { rootStr: 5, offsets: ['x', 0, -1, 0, 1, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // 7♯9 — ♭3 grit over a dominant
const M9 = { rootStr: 5, offsets: ['x', 0, -2, 0, 0, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // R-♭3-♭7-9
const MAJ7_5 = { rootStr: 5, offsets: ['x', 0, 2, 1, 2, 'x'], fingers: [0, 1, 3, 2, 4, 0] } // R-5-7-3
// 6th-string-root grips.
const M7_6 = { rootStr: 6, offsets: [0, 'x', 0, 0, 0, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-♭3-5 (the Le Freak Am7)
const M11_BARRE = { rootStr: 6, offsets: [0, 0, 0, 0, 0, 0], fingers: [1, 1, 1, 1, 1, 1] } // one-finger m11 (D'Angelo)
const THIRTEEN_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 2, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-3-13
// Top-4 fragments — above the bass, out of the keys' mid-range.
const M7_TOP4 = { rootStr: 1, offsets: ['x', 'x', 0, 0, 0, 0], fingers: [0, 0, 1, 1, 1, 1] } // ♭7-♭3-5-R barre
const MAJ7_TOP4 = { rootStr: 1, offsets: ['x', 'x', 1, 1, 0, 0], fingers: [0, 0, 2, 3, 1, 1] } // 7-3-5-R
export default {
styleIntro:
'The funk guitarist is a percussionist who happens to know chords: the strumming arm plays constant sixteenths like a hi-hat, and the fret hand decides which of them speak. Play the gaps the bass leaves, keep voicings small and high, and serve The One.',
comping: [
{
label: '16th-note scratch foundation',
rhythm: '1e&a 2e&a 3e&a 4e&a — DUDU, never stops',
description: 'Mute everything with the fret hand and strum constant sixteenths — pure percussion first. Voiced hits are added by pressing the chord only on chosen slots, releasing pressure immediately after (the choke).',
},
{
label: 'Chicken scratch ("chika")',
rhythm: 'muted down-up 16th pairs',
description: 'Jimmy Nolen\'s signature: strings pressed just enough for a pitchless scratch, strummed near the bridge. The texture between the hits IS the part.',
},
{
label: 'JB one-bar cell',
rhythm: 'C x x x x x x x x x C x x x x x — hits on 1 and the &-of-3',
description: 'Chord stab on the One (always the One), a second on the and-of-3, ghosts everywhere else. The school pattern behind a hundred James Brown grooves.',
},
{
label: 'Sex Machine pattern',
rhythm: '9 . . . 9 . . . 13 . . . . . . 9',
description: 'I9 on beats 1 and 2, I13 on beat 3, an upstroke 9 at the bar\'s tail — the documented Eb9/Eb13 figure. The top note rocking 5↔13 is the hook.',
},
{
label: 'Nile Rodgers selective 16ths',
rhythm: 'arm = metronome; the pick chooses string groups',
description: 'Down-up sixteenths never stop, whether or not strings are struck. Accents come from catching the bottom of the grip vs the top-3 fragment, plus fret-hand chucks. Built on what he doesn\'t play.',
},
],
plays: {
'funk-one-chord': [
{
label: 'The Nolen cycle (9 → 13 → 9sus4)',
level: 'intermediate',
chords: [
{ shape: NINE, extensions: ['9'], note: 'I9 — the funk chord' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: 'pinky stretches 5→13' },
{ shape: NINESUS, extensions: ['b7', '9'], note: 'one-finger barre — the lift' },
{ shape: NINE, extensions: ['9'], note: 'and home' },
],
tips: 'Three grips, one fret position, zero chord changes — the whole arrangement is the top two strings breathing. Choke every hit; the scratch between them never stops.',
},
{
label: 'Grit set (7♯9 stabs)',
level: 'intermediate',
chords: [
{ shape: HENDRIX, extensions: ['#9'], note: 'I7♯9 — major and minor third at once' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: '' },
{ shape: NINESUS, extensions: ['b7', '9'], note: '' },
{ shape: NINE, extensions: ['9'], note: '' },
],
tips: 'The ♯9 is the blues clash built into one grip — use it for the stabs you want to hurt, the clean 9 for the ones that groove. Sparser than the Nolen cycle: half the hits, twice the silence.',
},
],
'funk-dorian-vamp': [
{
label: 'Chameleon pair (m9 + 9)',
level: 'intermediate',
chords: [
{ shape: M9, extensions: ['9'], note: 'i9' },
{ shape: NINE, extensions: ['9'], note: 'IV9 — same fret region, one string set' },
],
tips: 'Both grips share the A-string root region — the change is two fingers, not a position. Sixteenth scratch throughout; voice the chords only on the accents the bass leaves open.',
},
{
label: 'D\'Angelo barre (m11 wash)',
level: 'intermediate',
chords: [
{ shape: M11_BARRE, extensions: ['11'], note: 'i11 — one finger, all six strings' },
{ shape: THIRTEEN_6, extensions: ['13'], note: 'IV13' },
],
tips: 'The one-finger m11 is the deepest chord in funk for the least effort — lay it across and let the fret hand bounce for the rhythm. Keep it short; six strings of m11 sustained is soup.',
},
],
'funk-25-loop': [
{
label: 'Le Freak grips',
level: 'intermediate',
chords: [
{ shape: M7_6, note: 'ii7 — 6th-string root' },
{ shape: NINE, extensions: ['9'], note: 'V9 — 5th-string root, same position' },
],
tips: 'The Chic move: full grip held, pick selecting string groups in constant 16ths. Freak out on the mutes, not the volume.',
},
{
label: 'Smooth set (m9 + 13)',
level: 'intermediate',
chords: [
{ shape: M9, extensions: ['9'], note: 'ii9' },
{ shape: THIRTEEN, extensions: ['9', '13'], note: 'V13' },
],
tips: 'The Stevie Wonder colour: 9ths on both sides of the loop. Push the V13 an eighth early every second bar and the loop starts to roll forward.',
},
],
'funk-bvii-move': [
{
label: 'One grip, whole-step slide',
level: 'intermediate',
chords: [
{ shape: NINE, extensions: ['9'], note: 'I9' },
{ shape: NINE, extensions: ['9'], note: '♭VII9 — two frets down, same grip' },
],
tips: 'The E9→D9 figure: the move is the slide itself — keep light finger pressure during the shift so the landing speaks. Snap back up to the I ON the One.',
},
{
label: 'Grit on the I, clean below',
level: 'intermediate',
chords: [
{ shape: HENDRIX, extensions: ['#9'], note: 'I7♯9' },
{ shape: NINE, extensions: ['9'], note: '♭VII9' },
],
tips: 'Contrast as arrangement: the ♯9 bites on home, the plain 9 relaxes a whole step down. Save this pairing for the bridge or the last vamp out.',
},
],
'funk-smooth-loop': [
{
label: 'A-string roots (September set)',
level: 'intermediate',
chords: [
{ shape: MAJ7_5, note: 'IVmaj7' },
{ shape: M9, extensions: ['9'], note: 'iii9' },
{ shape: M9, extensions: ['9'], note: 'ii9 — whole grip down two frets' },
{ shape: M9, extensions: ['9'], note: 'back up' },
],
tips: 'The loop is one m9 grip walking between iii and ii under a stationary maj7 anchor. Clean tone, light palm mute, hits shorter than you think.',
},
{
label: 'Top-4 shimmer (with keys/horns)',
level: 'intermediate',
chords: [
{ shape: MAJ7_TOP4, note: 'IVmaj7 — top four strings only' },
{ shape: M7_TOP4, note: 'iii7 — one-finger barre' },
{ shape: M7_TOP4, note: 'ii7' },
{ shape: M7_TOP4, note: '' },
],
tips: 'When keys and horns are present this register is yours and nothing below it. The barre fragments slide as one shape — think of it as playing the top of the arrangement, not chords.',
},
],
},
improv: {
scales: [
{ over: 'i7IV7 vamps', scale: 'dorian', why: 'The whole vamp is one Dorian scale — Chameleon\'s entire harmony fits inside it. The natural 6 is the funk note.' },
{ over: 'I9 one-chord vamps', scale: 'mixolydian', why: 'Mixolydian plus the minor-pentatonic/blues blend — the 7♯9 chord literally spells that major/minor mix.' },
{ over: 'ii7V9 loops', scale: 'dorian', why: 'Dorian on the ii covers both chords; it\'s the same dyad as the minor vamp heard from the ii.' },
{ over: 'maj7 loops', scale: 'major', why: 'Diatonic major/pentatonic — the EWF horn-line sweetness. Target 9ths and 6ths, not roots.' },
],
targetNotes:
'Funk solos are mostly chord fragments: the 3+♭7 tritone pair and the ♭7+9 pair of the 9 grip, slid in from a half-step below. Over static harmony, develop RHYTHM — state a short motif, displace it inside the 16th grid, add and remove ghosts. The harmony will not save you; the pocket will.',
licks: [
{
over: 'funk-dorian-vamp',
description: 'Cissy Strut main line (The Meters, 1969): a descending Cm7 arpeggio answered by double-stop stabs — upper-structure fragments of the i11.',
tab: 'e|------------------|---------------6-6--5-5--\nB|------------------|---------------6-6--6-6--\nG|--5--3--0---------|---------------7-7--5-5--\nD|-----------1b-----|-------------------------\nA|--------------3---|--1--3--1--3-------------\n C Bb G Eb C Bb C Bb C (stab pairs)',
source: 'The Meters, "Cissy Strut" (1969); spytunes.com & pianote.com analyses (Cm7 arpeggio construction)',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'funk',
label: 'Funk',
feel: '16th',
tempoRange: [90, 120],
character: 'One or two chords, sixteen subdivisions: harmony freezes so rhythm can talk. The guitar is a drum with pitch — most strokes are muted, and colour lives in the chord quality (9, 13, ♯9), not the changes.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'funk-one-chord',
name: 'One-chord I9 vamp (James Brown)',
rn: ['I9', 'I13', 'I9sus4', 'I9'],
degrees: [0, 0, 0, 0],
qualities: ['dom7', 'dom7', 'sus4', 'dom7'],
bars: [1, 1, 1, 1],
mode: 'mixolydian',
songs: ['Get Up (Sex Machine) — James Brown', 'Cold Sweat — James Brown', "Papa's Got a Brand New Bag"],
tip: 'The harmony never moves — the chord QUALITY does: 9 → 13 → 9sus4 → 9 is the whole arrangement. Funk colour lives in the voicing, not the progression.',
},
{
id: 'funk-dorian-vamp',
name: 'Dorian two-chord vamp (i7IV7)',
rn: ['i9', 'IV9'],
degrees: [0, 5],
qualities: ['min7', 'dom7'],
bars: [1, 1],
mode: 'dorian',
songs: ['Chameleon — Herbie Hancock', 'Use Me — Bill Withers', 'Cissy Strut — The Meters (i7 side)'],
tip: 'THE funk pair: both chords live inside one Dorian scale, so soloists never have to switch. The major IV is what makes it Dorian, not sad.',
},
{
id: 'funk-25-loop',
name: 'Disco loop (ii7V9, never resolves)',
rn: ['ii7', 'V9'],
degrees: [2, 7],
qualities: ['min7', 'dom7'],
bars: [1, 1],
mode: 'major',
songs: ['Le Freak — Chic', 'Good Times — Chic', 'I Wish — Stevie Wonder'],
tip: 'A iiV that never finds its I — the resolution is the dance floor. Same two-chord dyad as the Dorian vamp, heard from the other side.',
},
{
id: 'funk-bvii-move',
name: 'I9–♭VII9 figure',
rn: ['I9', '♭VII9'],
degrees: [0, 10],
qualities: ['dom7', 'dom7'],
bars: [1, 1],
mode: 'mixolydian',
songs: ['the James Brown E9→D9 figure', 'countless JB-school vamps'],
tip: 'One grip sliding down a whole step and back. The ♭VII is borrowed Mixolydian gravity — it falls back to the I on its own.',
},
{
id: 'funk-smooth-loop',
name: 'Smooth maj7 loop (EWF)',
rn: ['IVmaj7', 'iii7', 'ii7', 'iii7'],
degrees: [5, 4, 2, 4],
qualities: ['maj7', 'min7', 'min7', 'min7'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['September — Earth, Wind & Fire'],
tip: 'Starts on the IVmaj7 and orbits the iii — home is implied, never stated. (Every third pass, September turns the iii into V/vi for the lift.)',
},
]
+69
View File
@@ -0,0 +1,69 @@
// KB registry — the UI reads only this. Each style folder registers here;
// instruments appear as their cells are completed (see docs/kb-backlog.md).
import jazzMeta from './jazz/meta.js'
import jazzProgressions from './jazz/progressions.js'
import jazzGuitar from './jazz/guitar.js'
import bluesMeta from './blues/meta.js'
import bluesProgressions from './blues/progressions.js'
import bluesGuitar from './blues/guitar.js'
import rockMeta from './rock/meta.js'
import rockProgressions from './rock/progressions.js'
import rockGuitar from './rock/guitar.js'
import bossaMeta from './bossa/meta.js'
import bossaProgressions from './bossa/progressions.js'
import bossaGuitar from './bossa/guitar.js'
import funkMeta from './funk/meta.js'
import funkProgressions from './funk/progressions.js'
import funkGuitar from './funk/guitar.js'
import reggaeMeta from './reggae/meta.js'
import reggaeProgressions from './reggae/progressions.js'
import reggaeGuitar from './reggae/guitar.js'
import countryMeta from './country/meta.js'
import countryProgressions from './country/progressions.js'
import countryGuitar from './country/guitar.js'
import rnbMeta from './rnb/meta.js'
import rnbProgressions from './rnb/progressions.js'
import rnbGuitar from './rnb/guitar.js'
export default {
jazz: {
meta: jazzMeta,
progressions: jazzProgressions,
instruments: { guitar: jazzGuitar },
},
blues: {
meta: bluesMeta,
progressions: bluesProgressions,
instruments: { guitar: bluesGuitar },
},
rock: {
meta: rockMeta,
progressions: rockProgressions,
instruments: { guitar: rockGuitar },
},
bossa: {
meta: bossaMeta,
progressions: bossaProgressions,
instruments: { guitar: bossaGuitar },
},
funk: {
meta: funkMeta,
progressions: funkProgressions,
instruments: { guitar: funkGuitar },
},
reggae: {
meta: reggaeMeta,
progressions: reggaeProgressions,
instruments: { guitar: reggaeGuitar },
},
country: {
meta: countryMeta,
progressions: countryProgressions,
instruments: { guitar: countryGuitar },
},
rnb: {
meta: rnbMeta,
progressions: rnbProgressions,
instruments: { guitar: rnbGuitar },
},
}
+216
View File
@@ -0,0 +1,216 @@
// Jazz guitar pack — gold-standard KB cell. Shapes verified by note-spelling
// against: jazzguitar.be (shell chords, drop-2, comping rhythms), freddiegreen.org,
// jenslarsen.nl (comping rhythms, voice leading), premierguitar.com (drop-2).
// Shell voicings (Freddie Green style) — root + 3rd + 7th, fifths omitted.
const SHELL_6 = { // root on low E string
maj7: { rootStr: 6, offsets: [0, 'x', 1, 1, 'x', 'x'], fingers: [1, 0, 3, 4, 0, 0] }, // R73
dom7: { rootStr: 6, offsets: [0, 'x', 0, 1, 'x', 'x'], fingers: [1, 0, 2, 3, 0, 0] }, // R–♭73
min7: { rootStr: 6, offsets: [0, 'x', 0, 0, 'x', 'x'], fingers: [1, 0, 2, 3, 0, 0] }, // R–♭7–♭3
half_dim: { rootStr: 6, offsets: [0, 'x', 0, 0, -1, 'x'], fingers: [2, 0, 3, 4, 1, 0] }, // R–♭7–♭3–♭5
}
const SHELL_5 = { // root on A string
maj7: { rootStr: 5, offsets: ['x', 0, -1, 1, 'x', 'x'], fingers: [0, 2, 1, 4, 0, 0] }, // R37
dom7: { rootStr: 5, offsets: ['x', 0, -1, 0, 'x', 'x'], fingers: [0, 2, 1, 3, 0, 0] }, // R3–♭7
min7: { rootStr: 5, offsets: ['x', 0, -2, 0, 'x', 'x'], fingers: [0, 3, 1, 4, 0, 0] }, // R–♭3–♭7
half_dim: { rootStr: 5, offsets: ['x', 0, 1, 0, 1, 'x'], fingers: [0, 1, 3, 2, 4, 0] }, // R–♭5–♭7–♭3
}
// Drop-2 voicings on the top four strings (DGBe) — stays out of the bass register.
const DROP2 = {
maj7Root: { rootStr: 4, offsets: ['x', 'x', 0, 2, 2, 2], fingers: [0, 0, 1, 3, 3, 3] }, // R573
dom7Root: { rootStr: 4, offsets: ['x', 'x', 0, 2, 1, 2], fingers: [0, 0, 1, 3, 2, 4] }, // R5–♭73
min7Root: { rootStr: 4, offsets: ['x', 'x', 0, 2, 1, 1], fingers: [0, 0, 1, 4, 2, 3] }, // R5–♭7–♭3
halfDimRoot: { rootStr: 4, offsets: ['x', 'x', 0, 1, 1, 1], fingers: [0, 0, 1, 2, 3, 4] }, // R–♭5–♭7–♭3
min7Inv3: { rootStr: 1, offsets: ['x', 'x', 0, 0, 0, 0], fingers: [0, 0, 1, 1, 1, 1] }, // ♭7–♭35R (one-finger barre)
dom7Inv2: { rootStr: 2, offsets: ['x', 'x', 1, 2, 0, 2], fingers: [0, 0, 2, 3, 1, 4] }, // 3–♭7R5
maj7Inv2: { rootStr: 1, offsets: ['x', 'x', 1, 1, 0, 0], fingers: [0, 0, 2, 3, 1, 1] }, // 735R
}
export default {
styleIntro:
'In a jazz jam the guitar is part of the rhythm section: small voicings built on 3rds and 7ths, placed around the soloist, never on top of the piano. The fifths and often the roots are someone else\'s job — your two guide tones carry the whole harmony.',
comping: [
{
label: 'Four-to-the-bar (Freddie Green)',
rhythm: '♩ ♩ ♩ ♩',
description: 'Short, percussive quarter-note strums on all four beats, slight accent on 2 and 4 — the Count Basie pulse. Damp the unused strings; the chunk matters more than the chord.',
},
{
label: 'Charleston',
rhythm: '𝅗𝅥. + "and of 2"',
description: 'Hit on beat 1 (held) plus a stab on the and-of-2 — the foundational syncopated comping cell. Displace it ("and of 1" + beat 3) for forward motion.',
},
{
label: 'The push (anticipated and-of-4)',
rhythm: 'tied from "and of 4"',
description: 'Strike the next bar\'s chord an eighth note early and tie it over the barline — the standard jazz anticipation. Telegraphs the change to the whole band.',
},
],
plays: {
'jazz-251-major': [
{
label: 'Shell voicings, guide-tone glue',
level: 'intermediate',
chords: [
{ shape: SHELL_5.min7, note: 'R–♭3–♭7' },
{ shape: SHELL_6.dom7, note: '♭7 of ii holds; ♭3 falls a half-step to become the 3rd' },
{ shape: SHELL_5.maj7, note: '♭7 of V falls a half-step to the 3rd; the other voice holds' },
],
tips: 'Only the roots jump — both upper voices move 0 or 1 fret across the whole progression. Watch the D and G strings: that two-note thread is the iiVI.',
},
{
label: 'Drop-2 in one position (top four strings)',
level: 'intermediate',
chords: [
{ shape: DROP2.min7Inv3, note: 'one-finger barre: ♭7–♭35R' },
{ shape: DROP2.dom7Inv2, note: 'every voice moves 02 frets' },
{ shape: DROP2.maj7Inv2, note: 'lands with the root on top' },
],
tips: 'The whole progression sits in one 3-fret window with no position jump — ideal when a piano is holding the low end. Great behind a singer: high, thin, out of the way.',
},
],
'jazz-251-minor': [
{
label: 'Shell voicings with the ♭5 voiced',
level: 'intermediate',
chords: [
{ shape: SHELL_6.half_dim, note: 'the ♭5 on the B string is the colour — don\'t skip it' },
{ shape: SHELL_5.dom7, extensions: ['b9'], note: 'add the ♭9 a fret above the root for the full minor-key sound' },
{ shape: SHELL_6.min7, note: 'home — resolve and get light' },
],
tips: 'The ♭5 of the iiø7 *is* the ♭9 of the V7 — same pitch, reinterpreted. Find it once, hold it through both chords.',
},
{
label: 'Drop-2, top-four strings',
level: 'intermediate',
chords: [
{ shape: DROP2.halfDimRoot, note: 'root + one-finger barre' },
{ shape: DROP2.dom7Inv2, note: '' },
{ shape: DROP2.min7Inv3, note: 'one-finger barre to rest on' },
],
tips: 'Both barre grips bookending this make the iiø7 the only real stretch — practise the V7 grip as the pivot between them.',
},
],
'jazz-rhythm-a': [
{
label: 'Shells, four-to-the-bar',
level: 'intermediate',
chords: [
{ shape: SHELL_6.maj7, note: '' },
{ shape: SHELL_5.min7, note: '' },
{ shape: SHELL_5.min7, note: 'same grip, two frets down from vi' },
{ shape: SHELL_6.dom7, note: '' },
],
tips: 'One chord per bar, four chunks per bar, Freddie Green style. At rhythm-changes tempo the small shapes are the only ones that keep up.',
},
{
label: 'Drop-2 turnaround, upper register',
level: 'intermediate',
chords: [
{ shape: DROP2.maj7Root, note: '' },
{ shape: DROP2.min7Inv3, note: '' },
{ shape: DROP2.min7Root, note: '' },
{ shape: DROP2.dom7Inv2, note: '' },
],
tips: 'A loop, not a line — bar 4 feeds bar 1. Practise it as one circular hand motion until the join disappears.',
},
],
'jazz-625': [
{
label: 'Shells, alternating root strings',
level: 'intermediate',
chords: [
{ shape: SHELL_6.min7, note: '' },
{ shape: SHELL_5.min7, note: '' },
{ shape: SHELL_6.dom7, note: '' },
{ shape: SHELL_5.maj7, note: '' },
],
tips: 'Roots falling in fifths alternate 6th string → 5th string at the same fret — the progression stays in one position by construction. This is why shells were built for circle-of-fifths tunes.',
},
{
label: 'Drop-2 circle, top-four strings',
level: 'intermediate',
chords: [
{ shape: DROP2.min7Inv3, note: '' },
{ shape: DROP2.min7Root, note: '' },
{ shape: DROP2.dom7Inv2, note: '' },
{ shape: DROP2.maj7Inv2, note: '' },
],
tips: 'Sing the top note of each grip as you move — drop-2 makes the melody line on the e string audible, and that line is what the soloist hears from you.',
},
],
'jazz-blues': [
{
label: 'Shells through the form',
level: 'intermediate',
chords: [
{ shape: SHELL_6.dom7, note: 'I7 — root on the 6th string' },
{ shape: SHELL_5.dom7, note: 'IV7 — same fret, root string up' },
{ shape: SHELL_6.dom7, note: '' },
{ shape: SHELL_6.dom7, note: '' },
{ shape: SHELL_5.dom7, note: '' },
{ shape: SHELL_5.dom7, note: '' },
{ shape: SHELL_6.dom7, note: '' },
{ shape: SHELL_5.dom7, note: 'VI7 — the jazz move; hear bar 8 coming' },
{ shape: SHELL_5.min7, note: 'ii7 of the turnaround' },
{ shape: SHELL_6.dom7, note: 'V7' },
{ shape: SHELL_6.dom7, note: 'home' },
{ shape: SHELL_6.dom7, note: 'V7 pickup into the next chorus' },
],
tips: 'I7 and IV7 sit at the same fret on adjacent root strings — the first four bars are a two-finger-move exercise. Keep everything within two frets of the I.',
},
{
label: 'Drop-2 blues, top-four strings',
level: 'intermediate',
chords: [
{ shape: DROP2.dom7Root, note: '' },
{ shape: DROP2.dom7Inv2, note: 'IV7 without leaving the position' },
{ shape: DROP2.dom7Root, note: '' },
{ shape: DROP2.dom7Root, note: '' },
{ shape: DROP2.dom7Inv2, note: '' },
{ shape: DROP2.dom7Inv2, note: '' },
{ shape: DROP2.dom7Root, note: '' },
{ shape: DROP2.dom7Inv2, note: 'VI7' },
{ shape: DROP2.min7Inv3, note: '' },
{ shape: DROP2.dom7Inv2, note: '' },
{ shape: DROP2.dom7Root, note: '' },
{ shape: DROP2.dom7Inv2, note: '' },
],
tips: 'Comping above the 7th fret leaves the whole low end to bass and piano — the classic organ-trio guitar register. Charleston rhythm, not four-to-the-bar, up here.',
},
],
},
improv: {
scales: [
{ over: 'ii7', scale: 'dorian', why: 'Minor 7 chords in a major key take Dorian — the natural 6 keeps it from sounding sad.' },
{ over: 'V7', scale: 'mixolydian', why: 'The ♭7 is built in; in minor keys use Phrygian dominant (harmonic minor from the V) for the ♭9 sound.' },
{ over: 'Imaj7', scale: 'major', why: 'Plain major works; avoid sitting on the 4th over the maj7.' },
{ over: 'I7 (blues)', scale: 'mixolydian', why: 'Mix with the blues scale — Mixolydian for the changes, blues scale for the attitude.' },
{ over: 'iiø7', scale: 'locrian', why: 'Target the ♭3 or ♭5; the ♭5 becomes the ♭9 of the next V7.' },
],
targetNotes:
'Land the 3rd of each chord on the downbeat of the change. In any iiVI the 7th of one chord falls a half-step to the 3rd of the next — that two-note rail is the whole map.',
licks: [
{
over: 'jazz-251-major',
description: '"The Lick" — the most famous iiV cliché in jazz (Parker, Coltrane, everyone). Degrees 12–♭342–♭71 over the ii chord.',
tab: 'e|--------------------------\nB|--------------------------\nG|--------------------------\nD|----2--3--5--2------------\nA|-5--------------3--5------\nE|--------------------------\n D E F G E C D (over Dm7 in C)',
source: 'Wikipedia: "The Lick"; Alex Heitlinger compilation (2011)',
},
{
over: 'jazz-251-major',
description: 'Stock bebop iiVI: ii arpeggio up, then the 35–♭7–♭9 diminished arpeggio over the V7 (BDFA♭ over G7), resolving half-step into the I.',
tab: 'e|--------------------------|------------4--3---------|--------\nB|----------------5--3------|----3--6----------6--3----|--1-----\nG|-------------5---------5--|-4---------------------4--|--------\nD|----3--7---------------7--|--------------------------|--------\nA|-5------------------------|--------------------------|--------\nE|--------------------------|--------------------------|--------\n Dm7 arpeggio + 9th G7: 3-5-♭7-♭9 dim arp Cmaj7',
source: 'David Baker, How to Play Bebop Vol. 1; jazzguitar.be "50 Bebop Licks"',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'jazz',
label: 'Jazz',
feel: 'swing',
tempoRange: [110, 230],
character: 'Harmony in constant motion — 7th chords everywhere, 3rds and 7ths doing the voice-leading work, rhythm section breathing around the soloist.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'jazz-251-major',
name: 'iiVI',
rn: ['ii7', 'V7', 'Imaj7'],
degrees: [2, 7, 0],
qualities: ['min7', 'dom7', 'maj7'],
bars: [1, 1, 2],
mode: 'major',
songs: ['All The Things You Are', 'Tune Up — Miles Davis', 'Honeysuckle Rose'],
tip: 'The 7th of each chord resolves down a half-step to the 3rd of the next — that two-note thread is the whole progression.',
},
{
id: 'jazz-251-minor',
name: 'minor iiVi',
rn: ['iiø7', 'V7', 'i7'],
degrees: [2, 7, 0],
qualities: ['half_dim', 'dom7', 'min7'],
bars: [1, 1, 2],
mode: 'minor',
songs: ['Autumn Leaves (bridge)', 'Blue Bossa', 'Beautiful Love'],
tip: 'Same engine as the major iiVI, darker fuel: the ♭5 of the iiø7 is the ♭9 colour waiting to happen on the V7.',
},
{
id: 'jazz-rhythm-a',
name: 'Rhythm changes turnaround',
rn: ['Imaj7', 'vi7', 'ii7', 'V7'],
degrees: [0, 9, 2, 7],
qualities: ['maj7', 'min7', 'min7', 'dom7'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['I Got Rhythm — Gershwin', 'Oleo — Sonny Rollins', 'Blue Moon'],
tip: 'A loop, not a line — bar 4 hands you straight back to bar 1. Learn it as one circular shape your hands repeat.',
},
{
id: 'jazz-625',
name: 'viiiVI circle',
rn: ['vi7', 'ii7', 'V7', 'Imaj7'],
degrees: [9, 2, 7, 0],
qualities: ['min7', 'min7', 'dom7', 'maj7'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['Fly Me to the Moon', 'Autumn Leaves (A section, relative view)'],
tip: 'Pure circle-of-fifths motion: every root falls a fifth. If you can hear this one, you can predict half the jazz repertoire.',
},
{
id: 'jazz-blues',
name: 'Jazz blues (12-bar)',
rn: ['I7', 'IV7', 'I7', 'I7', 'IV7', 'IV7', 'I7', 'VI7', 'ii7', 'V7', 'I7', 'V7'],
degrees: [0, 5, 0, 0, 5, 5, 0, 9, 2, 7, 0, 7],
qualities: ['dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'dom7', 'min7', 'dom7', 'dom7', 'dom7'],
bars: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
mode: 'major',
songs: ["Billie's Bounce — Charlie Parker", "Now's the Time — Charlie Parker", 'Tenor Madness — Sonny Rollins'],
tip: 'A 12-bar blues wearing a suit: bars 8-10 swap the plain V-IV for a VI7 → iiV turnaround. Hear bar 8 coming and you sound like a jazz player.',
},
]
+182
View File
@@ -0,0 +1,182 @@
// Reggae guitar pack. Shapes verified by note-spelling against: guitarwiz.app
// (skank voicings, bubble grid), guitarworld.com (Marley rhythm lesson),
// guitarkitchen.com (Stir It Up / Get Up Stand Up lessons), Wikipedia ("Ska
// stroke", "One drop rhythm"), ethanhein.com (Stir It Up hook analysis).
// Top-3-string triads — the classic skank register (above the bubble, far above the bass).
const TOP3_MAJ = { rootStr: 1, offsets: ['x', 'x', 'x', 1, 0, 0], fingers: [0, 0, 0, 2, 1, 1] } // 3-5-R
const TOP3_MIN = { rootStr: 1, offsets: ['x', 'x', 'x', 0, 0, 0], fingers: [0, 0, 0, 1, 1, 1] } // ♭3-5-R barre
// Middle-string triads (strings 4-3-2) — the Wailers chop register.
const MID_MAJ = { rootStr: 3, offsets: ['x', 'x', 0, 0, 0, 'x'], fingers: [0, 0, 1, 1, 1, 0] } // 5-R-3
const MID_MIN = { rootStr: 3, offsets: ['x', 'x', 0, 0, -1, 'x'], fingers: [0, 0, 2, 3, 1, 0] } // 5-R-♭3
// Top-4 partial barres — fuller chop, still no low strings.
const TOP4_MAJ = { rootStr: 4, offsets: ['x', 'x', 0, -1, -2, -2], fingers: [0, 0, 4, 3, 1, 1] } // R-3-5-R
const TOP4_MIN = { rootStr: 4, offsets: ['x', 'x', 0, -2, -2, -2], fingers: [0, 0, 4, 1, 1, 1] } // R-♭3-5-R
// Quality-neutral 5th+root dyad (strings B+e) — works over major or minor.
const DYAD_5R = { rootStr: 1, offsets: ['x', 'x', 'x', 'x', 0, 0], fingers: [0, 0, 0, 0, 1, 1] }
export default {
styleIntro:
'The reggae guitarist plays one thing and plays it perfectly: the skank — a small, high, choked chord chop strictly on the offbeats. Beat 1 is sacred silence (the one drop), beat 3 belongs to the drums, the low end belongs to the bass. Strike, choke, wait.',
comping: [
{
label: 'One-drop skank',
rhythm: '. . X . | . . X . — chops on 2 and 4 only',
description: 'The core part. Strike the chord, release fret pressure instantly (fingers stay touching, off the frets), silence until the next chop. Downstroke-dominant in reggae. Counted double-time it becomes the and-of-every-beat.',
},
{
label: 'Double skank (Stir It Up)',
rhythm: '. . D U | . . D U — down-up pair on 2 and 4',
description: 'Each chop splits into a two-hit "chak-a": downstroke on the beat, upstroke on its and. The rockers-era intensifier — same placement, doubled motion.',
},
{
label: 'Ska upstroke',
rhythm: '. U . U . U . U — every offbeat 8th, bright and fast',
description: 'The same offbeat principle at 120180 BPM: upstrokes on every "and". Rocksteady is this relaxed; roots reggae is this halved. The placement never changes across the whole family — only the drums do.',
},
{
label: 'The bubble (only without keys)',
rhythm: '. . X X . . X X . . X X . . X X — the "& a" of every beat',
description: 'Normally the organ\'s job (Jackie Mittoo): a palm-muted continuous offbeat pulse in the midrange. Cover it on guitar only when there is no keyboardist — never alongside one.',
},
],
plays: {
'reggae-stir': [
{
label: 'Top-3 triads (the classic skank)',
level: 'intermediate',
chords: [
{ shape: TOP3_MAJ, note: 'I' },
{ shape: TOP3_MAJ, note: 'IV — same shape up the neck' },
{ shape: TOP3_MAJ, note: 'V — two frets above the IV' },
],
tips: 'One shape, three positions, chop on 2 and 4. The chop must die immediately — if a chord rings into the next beat, that\'s a rock strum, not a skank.',
},
{
label: 'Middle-string set (Wailers register)',
level: 'intermediate',
chords: [
{ shape: MID_MAJ, note: 'I — strings 4-3-2' },
{ shape: MID_MAJ, note: 'IV' },
{ shape: MID_MAJ, note: 'V' },
],
tips: 'A warmer chop one string set down — the Marley band register. Use it when a second guitar or keys already occupy the top strings.',
},
],
'reggae-two-chord': [
{
label: 'Top-3 triads',
level: 'intermediate',
chords: [
{ shape: TOP3_MAJ, note: 'I' },
{ shape: TOP3_MAJ, note: 'IV — five frets up, or two down on the next string set' },
],
tips: 'Two chords for the whole tune means the skank IS your entire job: identical length, identical volume, every chop. Boredom is the test — pass it.',
},
{
label: 'Top-4 partial barres',
level: 'intermediate',
chords: [
{ shape: TOP4_MAJ, note: 'I' },
{ shape: TOP4_MAJ, note: 'IV' },
],
tips: 'The fuller chop for when the band is sparse — still nothing below the D string. Half-press the barre (Marley style) and the chop turns almost fully percussive.',
},
],
'reggae-minor-vamp': [
{
label: 'Top-3 triads',
level: 'intermediate',
chords: [
{ shape: TOP3_MIN, note: 'i — one-finger barre' },
{ shape: TOP3_MAJ, note: '♭VII — a passing breath, two frets down' },
],
tips: 'Treat the ♭VII as ornament, not destination — Get Up Stand Up is functionally one chord, and the groove is the message. The intro hook (♭7→root on the G string) doubles the bass.',
},
{
label: 'Middle-string set',
level: 'intermediate',
chords: [
{ shape: MID_MIN, note: 'i' },
{ shape: MID_MAJ, note: '♭VII' },
],
tips: 'Lower, darker chop for the heavier roots feel. Keep the choke brutal at slow tempos — space is the instrument at 75 BPM.',
},
],
'reggae-nwnc': [
{
label: 'Top-3 triads with the bass walk',
level: 'intermediate',
chords: [
{ shape: TOP3_MAJ, note: 'I' },
{ shape: TOP3_MAJ, note: 'V — the bass plays its 3rd underneath; your triad doesn\'t change' },
{ shape: TOP3_MIN, note: 'vi' },
{ shape: TOP3_MAJ, note: 'IV' },
],
tips: 'The V⁶\'s descending bass (root→7th of the scale→6th) is the bassist\'s line — your job is to NOT double it. Stay high, stay small, let the walk happen below you.',
},
{
label: 'Neutral 5+R dyads',
level: 'intermediate',
chords: [
{ shape: DYAD_5R, omit3: true, note: 'I' },
{ shape: DYAD_5R, omit3: true, note: 'V' },
{ shape: DYAD_5R, omit3: true, note: 'vi — same dyad; the bass supplies the minor' },
{ shape: DYAD_5R, omit3: true, note: 'IV' },
],
tips: 'Two strings, no 3rd — quality-neutral, so one dyad shape skanks the whole progression while bass and vocals colour it. The most transparent part you can play behind a singer.',
},
],
'reggae-rocksteady': [
{
label: 'Top-3 triads, doo-wop sweetness',
level: 'intermediate',
chords: [
{ shape: TOP3_MAJ, note: 'I' },
{ shape: TOP3_MIN, note: 'ii' },
{ shape: TOP3_MIN, note: 'iii — two frets up' },
{ shape: TOP3_MIN, note: 'ii' },
],
tips: 'A diatonic staircase: the minor barre walks up two frets and back while the I anchors. Rocksteady tempo (~86 BPM) sits between ska\'s sprint and roots\' crawl — relax the chop accordingly.',
},
{
label: 'Top-4 partial barres',
level: 'intermediate',
chords: [
{ shape: TOP4_MAJ, note: 'I' },
{ shape: TOP4_MIN, note: 'ii' },
{ shape: TOP4_MIN, note: 'iii' },
{ shape: TOP4_MIN, note: 'ii' },
],
tips: 'The soul-ballad version of the skank — slightly fuller, still bass-free. Good under a falsetto lead vocal where top-3 triads would crowd the singer\'s register.',
},
],
},
improv: {
scales: [
{ over: 'major vamps', scale: 'major', why: 'Major pentatonic fills in the gaps AFTER vocal lines — call and response, never over the singer.' },
{ over: 'i–♭VII vamps', scale: 'minor', why: 'Minor pentatonic answer phrases; the ♭7 doubles as the ♭VII chord\'s root — the free note of roots reggae.' },
{ over: 'any vamp (riddim role)', scale: 'minor', why: 'The classic second-guitar job is doubling the bass melody in unison, palm-muted for a dull attack — locked exactly, not approximately.' },
],
targetNotes:
'Reggae lead is economy: short pentatonic answers in vocal gaps, high picked arpeggios of the current chord with 16th-note pickups, or unison bass-doubling. If you\'re not sure whether to play — don\'t. Beat 1 stays empty even for the soloist\'s instincts.',
licks: [
{
over: 'reggae-stir',
description: 'The Stir It Up hook (reconstruction from Ethan Hein\'s published note-by-note analysis, not a record transcription): an ornamented rise A→C♯→D over the I, then arpeggios of the IV and V with 16th-note pickups carrying the swing.',
tab: ' A (I) D (IV) E (V)\ne|--------------------|----2----5---|----4----7----\nB|---------2----3-----|--3----------|--5-----------\nG|----2---------------|-------------|--------------\n A C# D D F# A E G# B',
source: 'ethanhein.com "Musical simples: Stir It Up"; Bob Marley & The Wailers (1973)',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'reggae',
label: 'Reggae',
feel: 'one drop',
tempoRange: [70, 95],
character: 'Strict role separation and sacred negative space: bass owns the melody, drums drop beat one entirely, and the guitar is a choked offbeat chop that never, ever lands on 1 or 3.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'reggae-stir',
name: 'Circular IIVV vamp',
rn: ['I', 'IV', 'V'],
degrees: [0, 5, 7],
qualities: ['maj', 'maj', 'maj'],
bars: [2, 1, 1],
mode: 'major',
songs: ['Stir It Up — Bob Marley & The Wailers'],
tip: 'Not a cadence — a wheel: a full bar of I, then IV and V share a bar, forever. The V never "resolves"; it just hands back to the I.',
},
{
id: 'reggae-two-chord',
name: 'Two-chord IIV vamp',
rn: ['I', 'IV'],
degrees: [0, 5],
qualities: ['maj', 'maj'],
bars: [2, 2],
mode: 'major',
songs: ['Lively Up Yourself — Bob Marley'],
tip: 'Two chords for an entire song. The interest is the interlock — every instrument in its own time slot — not the harmony.',
},
{
id: 'reggae-minor-vamp',
name: 'Minor vamp (i–♭VII)',
rn: ['i', '♭VII'],
degrees: [0, 10],
qualities: ['min', 'maj'],
bars: [3, 1],
mode: 'minor',
songs: ['Get Up, Stand Up — Bob Marley', 'Them Belly Full — Bob Marley (chorus)'],
tip: 'Get Up Stand Up is arguably ONE chord — the ♭VII is a passing breath, not a destination. Roots reggae treats harmony as a drone with occasional weather.',
},
{
id: 'reggae-nwnc',
name: 'Roots ballad (IV⁶–viIV)',
rn: ['I', 'V⁶', 'vi', 'IV'],
degrees: [0, 7, 9, 5],
qualities: ['maj', 'maj', 'min', 'maj'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['No Woman, No Cry — Bob Marley'],
tip: 'Major key despite the tears: the V carries its 3rd in the bass (G/B in C), walking the bassline down by step into the vi. The descent is the emotion.',
},
{
id: 'reggae-rocksteady',
name: 'Rocksteady climb (Iiiiiiii)',
rn: ['I', 'ii', 'iii', 'ii'],
degrees: [0, 2, 4, 2],
qualities: ['maj', 'min', 'min', 'min'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['Queen Majesty — The Techniques (1967)'],
tip: 'Rocksteady grew from doo-wop covers, and it shows: a gentle diatonic staircase up and back at ~86 BPM. Soul harmony with the bass carrying the tune.',
},
]
+192
View File
@@ -0,0 +1,192 @@
// R&B / neo-soul guitar pack. Shapes verified by note-spelling against:
// pickupmusic.com (m9/maj9 grips, slide-into-chords), fundamental-changes.com
// (The Neo-Soul Guitar Book vocabulary, hammer-ons inside shapes),
// premierguitar.com (Curtis Mayfield figures — standard-tuning adaptations;
// originals are in open F# tuning), justinguitar.com (Mayfield/Hendrix fills),
// musicradar.com (D'Angelo Brown Sugar breakdown), landr.com & hearandplay.com
// (gospel borrowed-iv), brltheory.com (the Dilla feel).
// The core neo-soul grips.
const M9_5 = { rootStr: 5, offsets: ['x', 0, -2, 0, 0, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // R-♭3-♭7-9
const M9_6 = { rootStr: 6, offsets: [0, 'x', 0, 0, 0, 2], fingers: [1, 0, 2, 3, 3, 4] } // R-♭7-♭3-5-9
const M11_C = { rootStr: 6, offsets: [0, 'x', 0, 0, -2, 'x'], fingers: [2, 0, 3, 4, 1, 0] } // R-♭7-♭3-11 compact
const M11_BARRE = { rootStr: 6, offsets: [0, 0, 0, 0, 0, 0], fingers: [1, 1, 1, 1, 1, 1] } // one-finger m11
const MAJ9_5 = { rootStr: 5, offsets: ['x', 0, -1, 1, 0, 'x'], fingers: [0, 2, 1, 4, 3, 0] } // R-3-7-9
const MAJ7_5 = { rootStr: 5, offsets: ['x', 0, 2, 1, 2, 'x'], fingers: [0, 1, 3, 2, 4, 0] } // R-5-7-3
const MAJ7_BARRE_6 = { rootStr: 6, offsets: [0, 2, 1, 1, 0, 0], fingers: [1, 4, 2, 3, 1, 1] } // E-shape maj7 (embellishment host)
const DOM9_5 = { rootStr: 5, offsets: ['x', 0, -1, 0, 0, 0], fingers: [0, 2, 1, 3, 3, 3] } // R-3-♭7-9-5
const DOM13_6 = { rootStr: 6, offsets: [0, 'x', 0, 1, 2, 'x'], fingers: [1, 0, 2, 3, 4, 0] } // R-♭7-3-13
const NINESUS = { rootStr: 5, offsets: ['x', 0, 0, 0, 0, 0], fingers: [0, 1, 1, 1, 1, 1] } // R-4-♭7-9-5 (the 9sus barre)
const HENDRIX = { rootStr: 5, offsets: ['x', 0, -1, 0, 1, 'x'], fingers: [0, 2, 1, 3, 4, 0] } // 7♯9
const SIX9_5 = { rootStr: 5, offsets: ['x', 0, -1, -1, 0, 0], fingers: [0, 3, 1, 2, 4, 4] } // R-3-6-9-5 (Motown I-colour)
const M6_4 = { rootStr: 4, offsets: ['x', 'x', 0, -2, 0, -2], fingers: [0, 0, 3, 1, 4, 2] } // R-♭3-6-R (the borrowed iv)
const TOP3_MAJ = { rootStr: 1, offsets: ['x', 'x', 'x', 1, 0, 0], fingers: [0, 0, 0, 2, 1, 1] } // plain triad, top strings
export default {
styleIntro:
'Against keys-heavy neo-soul arrangements the guitar is a colourist: small rootless grips on the top strings, double-stop fills between vocal phrases, and chord stabs placed just behind the drums. Agree on extensions with the keys player, stay out of their octave, and treat silence as part of the part.',
comping: [
{
label: 'Pluck and mute',
rhythm: 'fingerstyle stabs + muted ghost 16ths',
description: 'Pluck the grip with thumb and fingers, release fret pressure instantly for the staccato, fill between hits with muted ghost strums. Per-note dynamic control is why the genre is fingerstyle.',
},
{
label: 'The neo-soul slide',
rhythm: 'grip formed a half-step away, slid in on the beat',
description: 'Assemble the full chord shape a half-step below (or above) the target, pluck, slide the whole grip in. The signature move — most common on the m9 and maj9 grips.',
},
{
label: 'Mayfield hammer vocabulary',
rhythm: 'one finger moves inside a held shape',
description: 'Hold the barre, hammer single embellishments: 9→3 on the B string (A-shape), 5→6 on the B string (the My Girl move), ♭3→11 on the G string (minor shapes). Little Wing is this vocabulary at ballad tempo.',
},
{
label: 'Cropper 6ths',
rhythm: 'diatonic 6ths slid in from a fret below',
description: 'Double-stop 6ths on the G+e string pair walking the scale — the Soul Man hook. One ladder per fill, then get out of the vocal\'s way.',
},
{
label: 'The Dilla feel',
rhythm: 'everything a hair behind the grid',
description: 'Lay stabs slightly behind the drums and keep ghost 16ths even — displaced by less than a subdivision, drifting back across the phrase. Never rush a fill; "perfectly imperfect."',
},
],
plays: {
'rnb-mediant-circle': [
{
label: 'm9 circle, slid into',
level: 'intermediate',
chords: [
{ shape: M9_5, extensions: ['9'], note: 'iii9 — slide in from a half-step below' },
{ shape: M9_5, extensions: ['9'], note: 'vi9' },
{ shape: M9_5, extensions: ['9'], note: 'ii9' },
{ shape: DOM13_6, extensions: ['13'], note: 'V13' },
],
tips: 'One grip walks the whole circle — the move IS the slide into each new root. Keep every stab behind the beat; the drums are ahead of you on purpose.',
},
{
label: 'm11 colour set',
level: 'intermediate',
chords: [
{ shape: M11_C, extensions: ['11'], note: 'iii11' },
{ shape: M9_6, extensions: ['9'], note: 'vi9 — 9 on top' },
{ shape: M11_C, extensions: ['11'], note: 'ii11' },
{ shape: HENDRIX, extensions: ['#9'], note: 'V7♯9 — the soul exclamation' },
],
tips: 'The 11 grips are darker and hollower than the 9s — use this set on the verse, the m9 set on the hook. The ♯9 V is the once-per-chorus spice, not the default.',
},
],
'rnb-6251': [
{
label: 'Stevie cadence (9s and the 9sus)',
level: 'intermediate',
chords: [
{ shape: M9_5, extensions: ['9'], note: 'vi9' },
{ shape: DOM9_5, extensions: ['9'], note: 'II9 — the secondary dominant' },
{ shape: NINESUS, extensions: ['b7', '9'], note: 'V9sus — one-finger barre, suspended sweetness' },
{ shape: SIX9_5, extensions: ['6', '9'], note: 'I6/9 — resolve without a leading tone' },
],
tips: 'The 9sus never sharpens into a plain dominant — it melts. Resolve to the 6/9 rather than a maj7 and the cadence lands like a sigh instead of a full stop.',
},
{
label: 'Verse set with the ♯9 lift',
level: 'intermediate',
chords: [
{ shape: M11_C, extensions: ['11'], note: 'vi11' },
{ shape: HENDRIX, extensions: ['#9'], note: 'II7♯9 — grit before the suspension' },
{ shape: NINESUS, extensions: ['b7', '9'], note: 'V9sus' },
{ shape: TOP3_MAJ, note: 'plain triad on top — let the bass own the root' },
],
tips: 'Ending on a bare high triad after three extended chords is the dynamic trick: the simplest chord in the progression hits hardest because of what preceded it.',
},
],
'rnb-maj7-vamp': [
{
label: 'maj9 pair',
level: 'intermediate',
chords: [
{ shape: MAJ9_5, extensions: ['9'], note: 'Imaj9' },
{ shape: MAJ9_5, extensions: ['9'], note: 'IVmaj9 — same grip, five frets up (or string set over)' },
],
tips: 'Two grips, four bars, infinite patience. Vary the pluck pattern, not the harmony — and if a keys player holds these voicings, drop to double-stop 6ths fills instead.',
},
{
label: 'Embellished barres (Mayfield/Hendrix)',
level: 'intermediate',
chords: [
{ shape: MAJ7_BARRE_6, note: 'Imaj7 — hammer 5→6 on the B string, 9→3 inside' },
{ shape: MAJ7_5, note: 'IVmaj7 — answer with the A-shape hammers' },
],
tips: 'The chord is a house and the hammers are someone moving around inside it. One embellishment per bar maximum — Castles Made of Sand is mostly air.',
},
],
'rnb-dorian': [
{
label: "D'Angelo pair",
level: 'intermediate',
chords: [
{ shape: M9_5, extensions: ['9'], note: 'i9' },
{ shape: DOM9_5, extensions: ['9'], note: 'IV9 — the raised 6th lives here' },
],
tips: 'Same dyad as the funk vamp at two-thirds the tempo: drag every hit behind the kick, ghost the 16ths unevenly, and let the pocket wobble — that wobble is the genre.',
},
{
label: 'Barre wash (m11 + 13)',
level: 'intermediate',
chords: [
{ shape: M11_BARRE, extensions: ['11'], note: 'i11 — one finger, lay it across' },
{ shape: DOM13_6, extensions: ['13'], note: 'IV13' },
],
tips: 'The lazy-looking version that sounds the deepest. Half-press the barre between hits for the pitchless scratch — texture first, harmony second.',
},
],
'rnb-gospel-amen': [
{
label: 'The Amen cadence',
level: 'intermediate',
chords: [
{ shape: MAJ7_5, note: 'IVmaj7' },
{ shape: M6_4, note: 'iv6 — the borrowed minor, one semitone falls' },
{ shape: MAJ9_5, extensions: ['9'], note: 'Imaj9 — home, with the 9 glowing on top' },
],
tips: 'Voice-lead the 3rd of the IV down a semitone and hold everything else — the whole cadence is one finger\'s journey. Slow it down further than feels right.',
},
{
label: 'Barre version with the high iv',
level: 'intermediate',
chords: [
{ shape: MAJ7_BARRE_6, note: 'IVmaj7' },
{ shape: M6_4, note: 'iv6 on the top four strings' },
{ shape: MAJ7_5, note: 'Imaj7' },
],
tips: 'For the gospel walk, insert a passing diminished between any two diatonic chords a step apart (I→♯i°→ii) — same borrowed-from-the-choir logic as the iv.',
},
],
},
improv: {
scales: [
{ over: 'i9 / m9 vamps', scale: 'dorian', why: 'The neo-soul default — Brown Sugar is pure E Dorian. ("Neo-soul scale" in lesson jargon ≈ minor pentatonic + the 9; an alias, not a different scale.)' },
{ over: 'maj7 / maj9 vamps', scale: 'major', why: 'Major pentatonic with the 9th and 6th emphasized — land on colours, not roots.' },
{ over: 'V9sus / II9', scale: 'mixolydian', why: 'Mixolydian of each dominant; over the 9sus avoid the 3rd entirely — the suspension is the point.' },
{ over: 'iiv minor vamps', scale: 'minor', why: 'Aeolian when the iv is minor (Didn\'t Cha Know) — the ♭6 differentiates it from the Dorian vamps.' },
],
targetNotes:
'Target the 9ths and 13ths, never the roots — over a m9 land on its 9, over a 13 land on its 13. The melodic vocabulary is double-stops (3rds, 4ths, 6ths) slid in from a fret below, and pentatonics stacked in 4ths for the modern sound.',
licks: [
{
over: 'rnb-maj7-vamp',
description: 'Curtis Mayfield figure (standard-tuning adaptation — Mayfield tuned to open F♯): hammer cells inside the held shape, landing on the 3rd and the 9th. The direct ancestor of Little Wing.',
tab: ' Figure A (land on the 3rd) Figure B (land on the 9th→7th)\ne|---5h7p5--------| e|--5-------5------5------\nB|----------7-----| B|-----5h7-----p5---------\nG|----------------| G|---------------------6--\n A B A F# (A) E F# E C# (in D major)',
source: 'Premier Guitar "Digging Deeper: Curtis Mayfield"; JustinGuitar "Mayfield & Hendrix Style Fills" (RF-101)',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'rnb',
label: 'R&B / Neo-soul',
feel: 'laid-back 16th',
tempoRange: [65, 100],
character: 'Extended chords as the baseline (9ths are the floor, not the ceiling), grips slid into from a half-step away, and everything placed slightly behind the drums — the Dilla feel: the precise right amount of wrong.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'rnb-mediant-circle',
name: 'Mediant circle (iii7vi7ii7V)',
rn: ['iii7', 'vi7', 'ii7', 'V13'],
degrees: [4, 9, 2, 7],
qualities: ['min7', 'min7', 'min7', 'dom7'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['September — Earth, Wind & Fire (rotation family)', 'the soul turnaround started from the iii'],
tip: 'The 1-6-2-5 family entered from the mediant — home is implied for three bars before the V finally points at it. Neo-soul lives in that deferral.',
},
{
id: 'rnb-6251',
name: 'Soul 6-2-5-1 (with dominant II)',
rn: ['vi7', 'II9', 'V9sus', 'I'],
degrees: [9, 2, 7, 0],
qualities: ['min7', 'dom7', 'sus4', 'maj'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ["Isn't She Lovely — Stevie Wonder"],
tip: 'The II is a secondary dominant (not the polite ii), and the V arrives as a 9sus — suspended, never quite dominant, melting into the I. Stevie\'s whole cadence language in four chords.',
},
{
id: 'rnb-maj7-vamp',
name: 'Two-chord maj7 vamp (Imaj7IVmaj7)',
rn: ['Imaj7', 'IVmaj7'],
degrees: [0, 5],
qualities: ['maj7', 'maj7'],
bars: [2, 2],
mode: 'major',
songs: ['Waiting in Vain — Bob Marley', "Cruisin' — Smokey Robinson (Iii7 variant)"],
tip: 'Two lush chords trading forever — the song is the texture. The same vamp underpins half of modern bedroom R&B; colour it differently every two bars.',
},
{
id: 'rnb-dorian',
name: 'Dorian vamp (i7IV9, D\'Angelo school)',
rn: ['i9', 'IV9'],
degrees: [0, 5],
qualities: ['min7', 'dom7'],
bars: [1, 1],
mode: 'dorian',
songs: ["Spanish Joint — D'Angelo", "Didn't Cha Know — Erykah Badu (iiv minor variant)", "Brown Sugar — D'Angelo (E Dorian loop)"],
tip: 'The IV9 carries the raised 6th that makes it Dorian — the same pair as the funk vamp, slowed to 70 BPM and dragged behind the beat.',
},
{
id: 'rnb-gospel-amen',
name: 'Gospel Amen (IVivI)',
rn: ['IVmaj7', 'iv6', 'Imaj7'],
degrees: [5, 5, 0],
qualities: ['maj7', 'min6', 'maj7'],
bars: [1, 1, 2],
mode: 'major',
songs: ['the gospel "Amen" cadence', 'countless soul ballad turnarounds (borrowed iv)'],
tip: 'The IV turns minor on its way home — borrowed from the parallel minor, the single most-borrowed chord in soul. One semitone (the 3rd of the IV falling) does all the work.',
},
]
+212
View File
@@ -0,0 +1,212 @@
// Rock guitar pack. Shapes verified by note-spelling against: guitarplayer.com
// (Malcolm Young, Hendrix rhythm rules), musicradar.com (Keith Richards grips,
// Andy Summers add9), appliedguitartheory.com (triads on string sets),
// fundamental-changes.com (open-G translations), justinguitar.com (unison bends).
// Power chords — the rock engine room. omit3: works over major or minor.
const P5R_6 = { rootStr: 6, offsets: [0, 2, 2, 'x', 'x', 'x'], fingers: [1, 3, 4, 0, 0, 0] } // R-5-R
const P5R_5 = { rootStr: 5, offsets: ['x', 0, 2, 2, 'x', 'x'], fingers: [0, 1, 3, 4, 0, 0] }
// Full barres.
const E_BARRE_MAJ = { rootStr: 6, offsets: [0, 2, 2, 1, 0, 0], fingers: [1, 3, 4, 2, 1, 1] }
const A_BARRE_MAJ = { rootStr: 5, offsets: ['x', 0, 2, 2, 2, 0], fingers: [0, 1, 2, 3, 4, 1] }
const E_BARRE_MIN = { rootStr: 6, offsets: [0, 2, 2, 0, 0, 0], fingers: [1, 3, 4, 1, 1, 1] }
// Open-position big chords (Malcolm Young) — render only when the chord root matches.
const OPEN_A = { onlyRoot: 9, frets: ['x', 0, 2, 2, 2, 0], fingers: [0, 0, 1, 2, 3, 0] }
const OPEN_G = { onlyRoot: 7, frets: [3, 2, 0, 0, 0, 3], fingers: [2, 1, 0, 0, 0, 3] }
const OPEN_D = { onlyRoot: 2, frets: ['x', 'x', 0, 2, 3, 2], fingers: [0, 0, 0, 1, 3, 2] }
// Triads on the top string sets — the second-guitar register.
const TRIAD_GBE_MAJ = { rootStr: 3, offsets: ['x', 'x', 'x', 0, 0, -2], fingers: [0, 0, 0, 3, 4, 1] } // R-3-5
const TRIAD_GBE_MAJ_INV1 = { rootStr: 1, offsets: ['x', 'x', 'x', 1, 0, 0], fingers: [0, 0, 0, 2, 1, 1] } // 3-5-R
const TRIAD_GBE_MIN_INV1 = { rootStr: 1, offsets: ['x', 'x', 'x', 0, 0, 0], fingers: [0, 0, 0, 1, 1, 1] } // ♭3-5-R barre
const TRIAD_DGB_MAJ = { rootStr: 4, offsets: ['x', 'x', 0, -1, -2, 'x'], fingers: [0, 0, 3, 2, 1, 0] } // R-3-5
const TRIAD_DGB_MIN = { rootStr: 4, offsets: ['x', 'x', 0, -2, -2, 'x'], fingers: [0, 0, 3, 1, 1, 0] } // R-♭3-5
// Hendrix/Frusciante thumb-over E-shape — A string muted, fingers free to embellish.
const THUMB_E = { rootStr: 6, offsets: [0, 'x', 2, 1, 0, 0], fingers: [0, 0, 3, 2, 1, 1] }
// Police-style add9 stretches (clean arpeggio picking).
const ADD9_ARP = { rootStr: 6, offsets: [0, 'x', 2, 1, 0, 2], fingers: [1, 0, 3, 2, 1, 4] } // R-R-3-5-9
const MADD9_ARP = { rootStr: 6, offsets: [0, 'x', 2, 0, 0, 2], fingers: [1, 0, 3, 1, 1, 4] } // R-R-♭3-5-9
export default {
styleIntro:
'Rock rhythm guitar is arrangement: the same chords played as muted chugs, open-string detonations, or high triad shimmer depending on the section. With two guitars, split the register — one low and thick, one high and thin — and never share an octave.',
comping: [
{
label: 'Straight-8ths downstroke drive',
rhythm: '♪♪♪♪♪♪♪♪ all downstrokes',
description: 'Relentless eighth-note downpicks on power chords, slight palm mute, no gaps — the punk/Ramones engine. Only works if the other guitar stays sparse or high.',
},
{
label: 'Malcolm Young space',
rhythm: 'accent hits + deliberate rests',
description: 'Big open-position chords hit hard with silence between — the rests ARE the hook. Low gain, all downstrokes, let the band breathe.',
},
{
label: 'Palm-muted chug with pushes',
rhythm: 'muted 8ths/16ths, lift on the and-of-4',
description: 'Muted root chug; lift the palm for full-ring accents on anticipations. High note-density, low spectral density — leaves room above.',
},
{
label: 'Keith Richards sus figure',
rhythm: 'hammer sus4/6 on the offbeats',
description: 'Hold the A-shape barre, hammer the sus4 (B string +1) and the 6th (top string +2) on the "ands", pull back to the triad. The Start Me Up / Brown Sugar move.',
},
{
label: 'Clean add9 arpeggio picking',
rhythm: 'steady picked 8ths, light mute',
description: 'Hold the add9 stretch and pick through it string by string — the Every Breath You Take verse texture everyone else lays out under.',
},
],
plays: {
'rock-mixo-vamp': [
{
label: 'Big open chords (Malcolm)',
level: 'intermediate',
chords: [
{ shape: OPEN_A, note: 'I — open A, all six strings of it' },
{ shape: OPEN_G, note: '♭VII — open G' },
{ shape: OPEN_D, note: 'IV — open D' },
],
tips: 'The open-chord version lives in the key of A (AGD). Hit hard, then shut up — the space between hits is the AC/DC trick. In other keys, use the barre or triad play.',
},
{
label: 'Second-guitar triads, top strings',
level: 'intermediate',
chords: [
{ shape: TRIAD_GBE_MAJ, note: 'I up high' },
{ shape: TRIAD_GBE_MAJ_INV1, note: '♭VII — nearest inversion, no jump' },
{ shape: TRIAD_GBE_MAJ, note: 'IV' },
],
tips: 'This is the guitar-2 part: triads above fret 5 while someone else owns the low end. Move to the nearest inversion, not the same shape up the neck.',
},
],
'rock-145': [
{
label: 'Barres, straight-8ths drive',
level: 'intermediate',
chords: [
{ shape: E_BARRE_MAJ, note: 'I — 6th-string root' },
{ shape: A_BARRE_MAJ, note: 'IV — same fret, root string up' },
{ shape: A_BARRE_MAJ, note: 'V — two frets up' },
],
tips: 'Same I/IV/V geometry as a blues: one position, two grips. Verse = palm-muted, chorus = open. The dynamic contrast is the part.',
},
{
label: 'Keith sus figure on the IV and V',
level: 'intermediate',
chords: [
{ shape: A_BARRE_MAJ, note: 'hammer the sus4 (B string +1) on the and-beats' },
{ shape: A_BARRE_MAJ, note: 'same figure — sus4 and 6th (top string +2) trading' },
{ shape: A_BARRE_MAJ, note: 'resolve the hammer INTO the change' },
],
tips: 'The grip stays still; two fingers do the talking. Swing the hammers slightly even over straight drums — that lag is the Stones feel.',
},
],
'rock-minor-descent': [
{
label: 'Barres walking down the 6th string',
level: 'intermediate',
chords: [
{ shape: E_BARRE_MIN, note: 'i' },
{ shape: E_BARRE_MAJ, note: '♭VII — two frets down' },
{ shape: E_BARRE_MAJ, note: '♭VI — two more' },
{ shape: E_BARRE_MAJ, note: 'V — one more half-step, the borrowed pull home' },
],
tips: 'The whole progression is the low-E string walking down: root, -2, -4, -5 frets. Let the audience hear that bassline inside your chords.',
},
{
label: 'High triads (Watchtower texture)',
level: 'intermediate',
chords: [
{ shape: TRIAD_DGB_MIN, note: 'i — middle-string triad' },
{ shape: TRIAD_DGB_MAJ, note: '♭VII' },
{ shape: TRIAD_DGB_MAJ, note: '♭VI' },
{ shape: TRIAD_DGB_MAJ, note: 'V' },
],
tips: 'Strum these as 16th-note skanks or let them ring — either way you\'re the texture, not the foundation. Classic when keys or a second guitar hold the low end.',
},
],
'rock-axis': [
{
label: 'Power-chord chug',
level: 'intermediate',
chords: [
{ shape: P5R_6, omit3: true, note: 'I' },
{ shape: P5R_6, omit3: true, note: 'V' },
{ shape: P5R_6, omit3: true, note: 'vi — same shape; the bass note carries the minor' },
{ shape: P5R_5, omit3: true, note: 'IV — 5th-string root keeps you in position' },
],
tips: 'No 3rds anywhere — major and minor come from the root motion, which is why one shape plays the whole loop. Save the full barres for the last chorus.',
},
{
label: 'Add9 arpeggio verse (Police)',
level: 'intermediate',
chords: [
{ shape: ADD9_ARP, extensions: ['9'], note: 'pick through, low to high, let it ring' },
{ shape: ADD9_ARP, extensions: ['9'], note: '' },
{ shape: MADD9_ARP, extensions: ['9'], note: 'minor add9 — one finger lifts' },
{ shape: ADD9_ARP, extensions: ['9'], note: '' },
],
tips: 'It\'s a stretch — practise the grip high on the neck first, then move down. Light palm mute, clean tone, metronomic 8ths: the part is a clock, not a riff.',
},
],
'rock-riff-cell': [
{
label: 'Power chords (Smoke on the Water)',
level: 'intermediate',
chords: [
{ shape: P5R_6, omit3: true, note: 'i' },
{ shape: P5R_6, omit3: true, note: '♭III — three frets up, same shape' },
{ shape: P5R_6, omit3: true, note: 'IV — two more' },
],
tips: 'Root–♭34 on one string is the riff; the power chords are it harmonised. The famous version is two-note 4ths on the middle strings — same cell.',
},
{
label: 'Thumb-over with embellishments',
level: 'intermediate',
chords: [
{ shape: E_BARRE_MIN, note: 'i' },
{ shape: THUMB_E, note: '♭III — thumb takes the bass, hammer the sus4 (G string +1)' },
{ shape: THUMB_E, note: 'IV — add the 9 with the pinky (top string +2)' },
],
tips: 'The Hendrix/Frusciante device: thumb frets the root, the freed fingers decorate inside the chord. The Dorian IV is where the colour lives — lean on it.',
},
],
},
improv: {
scales: [
{ over: 'i / I', scale: 'minor', why: 'Minor pentatonic box 1 plus the ♭5 (blues scale) is the rock default over almost everything.' },
{ over: 'I (country-rock)', scale: 'major', why: 'Major pentatonic for the Skynyrd/Allman sweetness — same box shape three frets down from the minor one.' },
{ over: 'I–♭VIIIV', scale: 'mixolydian', why: 'Major pentatonic + the ♭7 and 4. The ♭7 of the key IS the root of the ♭VII chord — free target note.' },
{ over: 'i–♭VII–♭VI', scale: 'minor', why: 'Natural minor (Aeolian): minor pentatonic + the 2 and ♭6 for the stepwise colour.' },
{ over: 'i–♭IIIIV', scale: 'dorian', why: 'The major IV asks for Dorian — minor pentatonic + the natural 6.' },
],
targetNotes:
'Root and 5th are safe everywhere; the 3rd of the chord of the moment is the pro move. Double-stops are rock\'s vocabulary: Berry 4ths on the top two strings, unison bends, and the quarter-step blues curl on the ♭3.',
licks: [
{
over: 'rock-145',
description: 'Chuck Berry double-stop intro figure (Johnny B. Goode device, shown in A): one-finger barre on the top two strings, slid in from below, hammered in triplets.',
tab: 'e|--5--5--5--5--5--5--5--5--5--5--5--5--\nB|3/5--5--5--5--5--5--5--5--5--5--5--5--\n (slide in; A on e + E on B = root+5th of A)',
source: 'Chuck Berry, "Johnny B. Goode" (1958); JustinGuitar song lesson SB-425',
},
{
over: 'rock-axis',
description: 'Box-1 unison bend cliché: bend the B-string ♭7 a whole step up to the root against the same note held on the top string (Hendrix "Purple Haze" outro, Page, May).',
tab: 'e|---5------5------5------5----\nB|--8b10---8b10---8b10---8b10--\n (G bent to A against the A on e-string 5)',
source: 'JustinGuitar unison bend technique BL-607; Happy Bluesman unison bends',
},
],
},
}
+7
View File
@@ -0,0 +1,7 @@
export default {
id: 'rock',
label: 'Rock',
feel: 'straight',
tempoRange: [80, 180],
character: 'Straight eighths, big chords, and arrangement-as-dynamics: the same progression whispered in the verse and detonated in the chorus.',
}
+57
View File
@@ -0,0 +1,57 @@
export default [
{
id: 'rock-mixo-vamp',
name: 'Mixolydian vamp (I–♭VIIIV)',
rn: ['I', '♭VII', 'IV'],
degrees: [0, 10, 5],
qualities: ['maj', 'maj', 'maj'],
bars: [2, 1, 1],
mode: 'mixolydian',
songs: ['Sweet Home Alabama — Lynyrd Skynyrd', 'Sympathy for the Devil — Rolling Stones'],
tip: 'The ♭VII is the rock sound — borrowed flat-seven instead of the polite V. (Sweet Home Alabama famously also parses as VIVI; the band played it I-centred.)',
},
{
id: 'rock-145',
name: 'IIVV',
rn: ['I', 'IV', 'V'],
degrees: [0, 5, 7],
qualities: ['maj', 'maj', 'maj'],
bars: [2, 1, 1],
mode: 'major',
songs: ['Wild Thing — The Troggs', 'Twist and Shout — The Beatles', 'La Bamba'],
tip: 'Three chords, no slack: the arrangement does the work. Decide per section how big each hit is — that decision is the song.',
},
{
id: 'rock-minor-descent',
name: 'Minor descent (i–♭VII–♭VIV)',
rn: ['i', '♭VII', '♭VI', 'V'],
degrees: [0, 10, 8, 7],
qualities: ['min', 'maj', 'maj', 'maj'],
bars: [1, 1, 1, 1],
mode: 'minor',
songs: ['Hit the Road Jack — Ray Charles', 'Sultans of Swing — Dire Straits (chorus tail)', 'All Along the Watchtower (without the V)'],
tip: 'A staircase to the V: the major V is borrowed from harmonic minor and is what yanks the loop home. Drop it and you get the floatier Watchtower version.',
},
{
id: 'rock-axis',
name: 'Axis (IVviIV)',
rn: ['I', 'V', 'vi', 'IV'],
degrees: [0, 7, 9, 5],
qualities: ['maj', 'maj', 'min', 'maj'],
bars: [1, 1, 1, 1],
mode: 'major',
songs: ['With or Without You — U2', 'Let It Be — The Beatles'],
tip: 'The same four chords carry a whisper or a stadium — rock\'s job is choosing which. Start the loop on the vi for the dark version.',
},
{
id: 'rock-riff-cell',
name: 'Riff cell (i–♭IIIIV)',
rn: ['i', '♭III', 'IV'],
degrees: [0, 3, 5],
qualities: ['min', 'maj', 'maj'],
bars: [2, 1, 1],
mode: 'dorian',
songs: ['Smoke on the Water — Deep Purple', 'Iron Man — Black Sabbath (spine of the riff)'],
tip: 'Root–♭34 is THE rock riff cell, lifted straight from minor pentatonic. The major IV makes it Dorian — the app\'s Dorian mode lights up exactly these notes.',
},
]