From e910036e67181223e4095e1c50ce4b6254e3700b Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Fri, 30 Oct 2026 06:27:08 +0100 Subject: [PATCH] feat(align): SMF parser, role guess, reference manifest Co-Authored-By: Claude Sonnet 5.5 --- README.md | 5 ++ package.json | 3 +- src/align/cli.ts | 33 +++++++++ src/align/roles.ts | 17 +++++ src/align/smf.ts | 142 +++++++++++++++++++++++++++++++++++++ src/ref/manifest.ts | 50 +++++++++++++ tests/align/smf.test.ts | 116 ++++++++++++++++++++++++++++++ tests/ref/manifest.test.ts | 49 +++++++++++++ 8 files changed, 414 insertions(+), 1 deletion(-) create mode 100644 src/align/cli.ts create mode 100644 src/align/roles.ts create mode 100644 src/align/smf.ts create mode 100644 src/ref/manifest.ts create mode 100644 tests/align/smf.test.ts create mode 100644 tests/ref/manifest.test.ts diff --git a/README.md b/README.md index 6740a74..77f8e8d 100644 --- a/README.md +++ b/README.md @@ -35,3 +35,8 @@ The baseline is in `results/baseline-2026-10-30.md` (tier summaries plus a per-s - `oracle-stems` mode feeds the true per-track stems, which reveals the track count and roles, so part-split F1 under oracle-stems (and the oracle modes built on it) is not meaningful. - The SONiVOX guitar is partly routed to Demucs' piano stem, a synthetic-timbre gap that lowers full-mode guitar scores. - Fingering (string agreement) is informational, not pass/fail. + +## Reference songs (alignment) + +Team-supplied real recordings and Guitar Pro-exported MIDI live in the git-ignored `reference/` directory (never committed). +Register a song with `bun run align add