Skip to content

Wishlist

Wishlist

Living parking lot for features we haven’t picked up yet. Entries graduate out of this doc when they get scheduled into a phase plan; new entries land here whenever a triage decision says “Future” or “Drop”.

When a feature graduates, leave a one-line breadcrumb pointing at the phase plan that absorbed it. When a feature ships, remove the entry entirely.


Future Work — Likely

These are features we’d take if the time + design budget materialize.

Score rendering fixes

Phase 13 shipped a Verovio-based score viewer panel, but the rendered output had enough layout and SMuFL font-metric issues that we feature-flagged it off rather than ship it broken. The flag is GP_ENABLE_SCORE_VIEWER in CMakeLists.txt (default OFF); release builds do not include the panel.

The renderer integration itself works end-to-end (MusicXML in, juce::Drawable SVG out) — the failures are downstream of Verovio, in how its SVG output interacts with JUCE’s drawable parser and how SMuFL glyph metrics align with the surrounding text. Reviving the viewer means:

  • Re-examining MusicXmlEngraver’s EngraveResult SVG → Drawable hand-off and the embedded font references Verovio emits.
  • Resolving the SMuFL metric issues that originally drove the Phase 11 / 12 hand-rolled renderer’s failure.
  • Re-enabling GP_ENABLE_SCORE_VIEWER in releases and removing the OFF-by-default note from building.md / releases.md.

Picking this up also unblocks the play-from-cursor angle of the in-app MIDI playback entry below.

Apple Developer ID signing + notarisation

The macOS DMG ships unsigned today, which trips Gatekeeper warnings (“app is broken”) on user machines that never ran the binary themselves. Production-grade distribution needs an Apple Developer Program seat ($99/year), a Developer ID Application certificate, codesign integration in scripts/build-release.sh, and a notarytool step using an App Store Connect API key or app-specific password. Windows Authenticode is the equivalent on that side — out of scope until there’s a Windows-user with the same complaint.

In-app MIDI playback (PB1)

Route the export’s MidiMessageSequence to juce::MidiOutput so users can hear the result without bouncing through a DAW. ~100 LOC for system MIDI; ideally pairs with a hostable VST so playback uses the same keyswitched instrument.

This stands on its own — it doesn’t need the score viewer — but a play-from-cursor transport becomes the natural next step once the score-rendering fixes above land.

Multi-document / multi-window (AP2) — investigated, deferred

Today’s app is single-document — one Project per AppController, re-binding when the user opens a new file. AP2 would let multiple projects coexist in one process via juce::TabbedComponent.

Phase 10 F10.4 was a time-boxed spike. The investigation found nothing structurally hostile to multi-doc, but the work is a focused ~20-hour initiative (2-3 days), not the one-day spike the plan budgeted — notably because modal panel ownership (per-tab vs. process-global) is a UX decision rather than a mechanical refactor.

Full findings + entry-point sketch in multi-document-investigation.md. When the work is picked up: start with an AppShell class owning OwnedArray<AppController>, per-tab panel construction, then route MainWindow commands through appShell_->activeController().

Profile / project Git sync

Power users could link their profile directory to a Git repo and pull / push from the editor. Frames cloud-sync as a thin Git wrapper instead of a hosted service. Lower priority than the F9.7 zip archive, which already covers the “move my library to a new machine” case.


Future Work — Maybe

These are nice-to-haves that may never reach the bar.

.mscz (MuseScore) import (IM2)

MuseScore’s native compressed format. Different tool family; most users who’d want this also have a Guitar Pro -> MusicXML path that already works. Lower priority than the native .gp / .gpx import that already shipped in Phase 17.

Sanguine Bass profile

The six bundled VST profiles in resources/profiles/vst-presets/ cover the most common heavy-metal targets, but Sanguine Bass is still missing. Its keyswitch chart is only visible inside the running plugin, so the entry sits here until someone with the VST contributes a profile JSON — it’s a one-file PR once the chart is in hand.

Technique enum gaps — remaining

Phase 14 shipped NaturalHarmonic, PinchHarmonic, TremoloPick, and the muting / pluck / slap / pop family. Phase 17.3 added PickScrape with its native-GP Slide bit 0x40 / 0x80 detection. Phase 22 added AutoSlide for GP’s “host-decides-direction” legato slides. The remaining gaps are niche:

Rake

Deliberate muted strum into a target note. Shreddage uses velocity routing on the Sustain KS (vel 116-126); a separate Technique::Rake would let us emit that velocity band when MusicXML flags a rake.

Power-chord variants

Shreddage exposes Power Chord Sustain / Mute / Staccato as separate keyswitches — useful for distinguishing rhythm-section power chords from individual notes. Unlikely to need its own Technique value; better routed via a chord-detection pass that emits the right keyswitch based on simultaneous interval content.

FX / Buzz Trill

Catch-all keyswitches for noise effects. Probably never worth a dedicated enum value; users wanting these can open the editor and wire a free MIDI note manually (no parser detection needed).


Dropped

Decisions made during Phase 10 triage. These won’t ship; the entry persists so the rationale survives future “why don’t we just…?” conversations.

In-app sampler / synth (PB2)

Bundling a SoundFont (~tens of MB) or writing a JUCE Synthesiser wrapper to play exports without external MIDI routing. Superfluous and beyond the scope of the project — the user’s DAW or system MIDI synth is the listening surface.

Auto-profile from MIDI program (PR7)

Suggesting a profile per part based on the GM patch byte. F9.3 dropped the always-on bundled defaults, so there’s nothing for an auto-suggester to match against. Users mint or import profiles deliberately; suggesting one would just add UI noise.

Profile cloud sync (SH1, hosted variant)

Upload / download profiles to a hosted registry. Out of scope for v1 per PROJECT_CONTEXT.md (“local-only is fine for v1”). The F9.7 zip archive + the Git-sync future-work entry cover everything cloud sync would have, without the hosting cost.