diff --git a/pop/MENU-WISHLIST.md b/pop/MENU-WISHLIST.md index b906cc68fb..c83c9a22e5 100644 --- a/pop/MENU-WISHLIST.md +++ b/pop/MENU-WISHLIST.md @@ -48,6 +48,11 @@ All from Abe's 2026-05-21 list. study reports: section timelines, band-balance heatmap, loudness small multiples, `COMPARISON.md` stat table. → `study/compare.py` +- 🟢 **study map** (`analysis.study-map`) — bar-by-bar song map from a + study report: downbeat-aligned chord lane (triad templates + diatonic + prior per phrase key), per-phrase keys, band heatmap, `MAP.md` with + degrees vs. the global key. + → `study/map.py` ### score — notation & sequencing - 🟢 **audio → rhythm sequence** (`score.audio-to-rhythm`) — onset-detect diff --git a/pop/lib/menu.mjs b/pop/lib/menu.mjs index cb2c90429f..a413dae389 100644 --- a/pop/lib/menu.mjs +++ b/pop/lib/menu.mjs @@ -152,6 +152,10 @@ export const MENU = { params: ["out"], blurb: "several study reports side by side — timelines, band balance, loudness", }, + "study-map": { + file: "study/map.py", + blurb: "bar-by-bar song map from a study report — chord lane, phrase keys, band heat", + }, }, vocal: { diff --git a/pop/study/README.md b/pop/study/README.md index dfa1e26c26..34d1737bdd 100644 --- a/pop/study/README.md +++ b/pop/study/README.md @@ -36,6 +36,18 @@ Compare several studied tracks: That writes `COMPARISON.md` plus section-timeline, band-balance, and loudness-small-multiple figures. +Map a studied track bar by bar (chords, phrase keys, energy): + +```fish +.venv/bin/python study/map.py study/out/track-slug/report.json +``` + +That writes `MAP.md`, `map.json`, and `fig-map.png` next to the report — +a per-bar chord lane (triad templates over harmonic chroma, downbeat +phase picked where chord changes land hardest, with a small diatonic +prior from each phrase's key), per-phrase keys, and the six-band heatmap +on one time axis. + ## honesty notes - Loudness range and true peak are **approximations** (RMS-window LRA,