Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
35061e8
feat(editor): honor an authored instrument type over the name (keys/b…
Jul 20, 2026
252363b
feat(editor): consume the manifest instrument type on load + save
Jul 20, 2026
8bbd00d
feat(editor): canonical arrKind resolver + Tracks-view instrument badge
Jul 20, 2026
125b5a5
feat(editor): route the keys/drums view + audio sites through arrKind
Jul 20, 2026
660261e
feat(editor): route the string-count + import/export readers through …
Jul 20, 2026
9d2d8f6
feat(editor): typed tracks rename freely — the last identity readers …
Jul 20, 2026
e4d0e83
feat(editor): drums become a type:"drums" arrangement (model foundation)
Jul 20, 2026
da67204
feat(editor): drums are a selectable part in the arrangement switcher
Jul 20, 2026
ff7e91a
feat(editor): the drums track is an ordinary arr:<idx> mixer/Tracks c…
Jul 20, 2026
faaa7b4
feat(editor): a song can hold several drum parts
Jul 20, 2026
b01ccbf
fix(editor): audit S.arrangements consumers after materializing drums
byrongamatos Jul 20, 2026
035c99b
fix(editor): drop stale view lenses when switching parts in the switcher
byrongamatos Jul 20, 2026
c75d123
fix(editor): make drum-tab delete undo a true inverse (renumber arr k…
byrongamatos Jul 20, 2026
9c68ed8
feat(editor): add a per-arrangement instrument-type control
byrongamatos Jul 20, 2026
1f42870
fix(editor): persist the primary drum part's id so a promoted primary…
byrongamatos Jul 20, 2026
76d37ef
feat(editor): create-mode songs can hold several drum parts too
Jul 20, 2026
eaf318e
Hide string controls for non-fretted tracks
Jul 21, 2026
e2133e2
Merge remote-tracking branch 'origin/mt-instrument-type' into mt-drum…
Jul 21, 2026
8fa0341
Merge remote-tracking branch 'origin/mt-drums-p1' into mt-drums-p2
Jul 21, 2026
62a7b69
Merge remote-tracking branch 'origin/mt-drums-p2' into mt-drums-p2b
Jul 21, 2026
a79c653
Preserve materialized drum mixer strips
Jul 21, 2026
96bdbb4
Merge remote-tracking branch 'origin/mt-drums-p2b' into mt-drums-p3
Jul 21, 2026
a19fc99
Merge remote-tracking branch 'origin/mt-drums-p3' into mt-drums-p4
Jul 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,93 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- **Multiple drum parts now work when creating a new song too.** The several-
drum-parts feature previously covered only songs you re-open and Save; a
*create-mode* session (New Song from a Guitar Pro / MIDI import) was capped at
one drum chart. Now, once a melodic track exists, **+ Track ▸ Drums** adds
another drum part in a create session just like an existing one, and Building
the song persists every part (the first as the song-level drum tab today's
game plays, the rest as `type: drums` arrangement entries per feedpak-spec
1.17.0). A drums-only draft still holds one part until you add a melodic
track (drums are never the primary chart). Packs stay backward-compatible.

- **A song can hold several drum parts.** The payoff of the drums-as-arrangement
arc below: with drums already present, **+ Track ▸ Drums** adds *another* drum
part (a second drummer, an aux-percussion layer), and a GP/MIDI drum import is
**added** as a new Drums track instead of replacing the one you have. Each part
is its own **🥁 entry in the part dropdown** — pick one to open *its* grid — with
its own Tracks row, mixer strip, and multi-track playback channel (two parts
hitting the same drum at the same instant both sound). Deleting a part removes
just that part (undoable, exact); renaming follows the part. Saving persists
every part: the first as the song-level drum tab today's game plays (packs stay
fully backward-compatible — older readers simply see that one), the rest as
`type: drums` arrangement entries per feedpak-spec 1.17.0, and they all come
back on reload. Create-mode compose sessions keep the one-part rule for now
(their build path persists a single drum tab).

- **The drums track is now an ordinary mixer / Tracks channel.** Building on the
drums-as-arrangement work below, the drum chart's mixer strip and Tracks mix now
use the same per-arrangement channel address every other part does, instead of a
one-off "drums" slot. Mute / solo / volume on the drums strip behave exactly like
a pitched track's — including in multi-track ("play all") playback, where the drum
kit now follows its own strip — and the drum grid's guide claps follow that strip
too. With a single drum chart you won't see a difference (its durable track
identity is unchanged, so delete/undo, rename, and pairing all work as before);
this is the wiring that lets *several* drum charts each get their own strip.

- **Drums are now a selectable part in the arrangement switcher.** Pick
**"🥁 Drums"** from the part dropdown to open the drum editor — exactly like
switching to Lead, Rhythm, or Bass. The drum chart is no longer a mode tucked
off to the side; it's a first-class part listed alongside the pitched ones (and
the 🥁 Edit Drums button and the Tracks row now keep the dropdown in sync).
Selecting a pitched part returns you to it as before — under the hood the drum
grid stays a view *over* the current pitched part, so nothing else about editing
changes. This is the visible step of the drums-as-arrangement work below, and the
set-up for having *more than one* drum chart to choose between.

- **Drums are now a first-class arrangement (groundwork for multiple drum charts).**
The single drum tab has always lived *outside* the arrangement list as a lone
off-array singleton — the one instrument that wasn't an ordinary track. It now
also lives *in* the arrangement list as a `type:"drums"` arrangement, migrated
in automatically when a song loads. Nothing changes for you yet: the drum grid,
the Tracks row, the mixer, and saving all behave exactly as before (a saved pack
is byte-for-byte identical — drums still persist as the song-level drum tab), and
the drum editor's undo history is untouched. This is the load-bearing model
change that lets a song hold *more than one* drum chart (two drummers, an aux-
percussion layer) in a following release, built on the new authored-instrument
`type` so a drums track is identified by what it *is*, never its name.

- **A track's instrument is now DATA, not a guess from its name.** The editor used
to infer whether a part was keys / bass / guitar from its *name*, in a dozen
places with two subtly disagreeing rules — the reason renaming a track could flip
its lane layout, and why the rename dialog has to refuse some names. The pack
format already records an authored instrument `type` per arrangement; the editor
now **reads it** (carrying it through load and save) and lets it drive *every*
identity decision — the keys/bass view, string counts, the guide-instrument
voice, the fretted-only Tab preview and Guitar-Pro export guards, and the
Parts-view silhouettes — falling back to the old name inference only when a
track is untyped. Existing songs open exactly as before — but a part named
against its instrument (a guitar called "Grand Piano") finally reads as, sounds
as, and exports as what it *is*. **The Tracks list now badges each transcription
track with its instrument** (GTR / BAS / KEY / DRM / VOX) instead of a generic
"MIDI", read from that same authoritative identity. And **renaming a typed track
is now free**: its identity is data, so the name is a pure display label and the
rename dialog no longer refuses a name that merely *looks* like another
instrument (untyped/legacy tracks keep the old kind-change guard, which protects
them from silently re-laning notes). Foundation for first-class drum tracks and
vocals.

- **A per-track instrument-type control (next to the arrangement selector).**
Now that the editor honors an authored instrument `type` above the name for the
first time, an already-saved pack whose fretted (string+fret) chart has a keys
word *mid-name* — "Electric Piano", "Lead Synth" — can open **piano-locked**:
string buttons hidden, view stuck on the roll, with previously no way to
override it. The new **Guitar / Bass / Keys** dropdown sets the track's type
directly, which wins over the name everywhere — so a mis-named fretted part can
be corrected back to Guitar and reopens in string view immediately. The change
is undoable (Ctrl+Z) and persists with the pack on save; switching type rebuilds
the chart in place with no note loss.

- **The piano roll stretches, compacts and scrolls.** Its lane height used to be
derived and untouchable — the whole pitch range packed into about 350px — so a
wide range collapsed to four pixels per semitone: passable for reading, useless
Expand Down
15 changes: 11 additions & 4 deletions docs/USER-GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,10 @@ defaults** puts everything back.
## 3. Play and navigate

- **Space** plays/stops from the playhead.
- **Follow playhead** (`Shift+L`) keeps the view with the playhead during
playback. By default the view jumps ahead a page when the playhead reaches
the edge; turn on **View ▸ Scroll in Play** to pin the playhead and glide the
timeline under it instead (Logic's continuous-scroll manner).
- **Follow playhead** (`Shift+L`) keeps the view with the playhead during
playback. By default the view jumps ahead a page when the playhead reaches
the edge; turn on **View ▸ Scroll in Play** to pin the playhead and glide the
timeline under it instead (Logic's continuous-scroll manner).
- **Loop A/B** (`Alt+B`) compares the recording against your guide so you can
hear whether the chart matches the take.
- **Count-in** adds a bar of clicks before playback so you can catch the entry.
Expand Down Expand Up @@ -376,6 +376,13 @@ piano roll, with each row labeled by its GM note number (the familiar DAW
drum-roll layout). The **drum limb lint** flags hits that would need three
hands — advisory only.

A song can hold **several drum parts** (a second drummer, an aux-percussion
layer): with drums already present, **+ Track ▸ Drums** adds another, and a
GP/MIDI drum import is added as a new Drums track instead of replacing. Each
part is its own 🥁 entry in the part dropdown — pick one to open *its* grid —
with its own Tracks row and mixer channel. All parts save with the song; the
first part is the one the game plays today.

---

## 8. Structure — sections, phrases, anchors, handshapes, tones
Expand Down
Loading