Skip to content

feat: expand built-in piano library with curated scores and cover art#10

Open
leandrodaf wants to merge 2 commits into
mainfrom
feat/library-expansion
Open

feat: expand built-in piano library with curated scores and cover art#10
leandrodaf wants to merge 2 commits into
mainfrom
feat/library-expansion

Conversation

@leandrodaf
Copy link
Copy Markdown
Owner

@leandrodaf leandrodaf commented May 24, 2026

Summary

Expands the built-in library from 144 to 222 piano scores, adds 69 cover images, fixes MusicXML import reliability, and corrects a widespread note-sustain bug in converted scores.


Changes

Infrastructure

  • musicxml.go: auto-detect and transcode UTF-16 LE/BE (with or without BOM) MXL archives to UTF-8 before XML parsing
  • go.mod: promote golang.org/x/text to direct dependency
  • app.go: resolve local cover images from embedded data/library/covers/ by filename stem when meta.coverUrl is empty

Library expansion (+78 scores, +69 covers)

All files follow the lib__{composer}__{title}.pia naming convention. New composers and categories:

Category Artists
Classical Bach, Beethoven, Brahms, Chopin, Debussy, Grieg, Handel, Haydn, Liszt, Mendelssohn, Mozart, Prokofiev, Scarlatti, Schubert, Schumann, Scriabin, Satie
Contemporary A-ha, Adele, BB King, Ben E. King, Bill Withers, Billie Eilish, Bobby McFerrin, Bryan Adams, Coldplay, Death Cab for Cutie, Don McLean, Dua Lipa, Ed Sheeran, Elton John, Imagine Dragons, Jason Mraz, Lewis Capaldi, Linkin Park, Lynyrd Skynyrd, Mumford & Sons, Mykola Leontovych, Oasis, One Direction, Sam Smith, Sergei Prokofiev, Spitz, The Clash, Traditional, Vanessa Carlton
Exercises Scales, chord trainers, hand-position studies (composer: Exercise)

Bug fix: tied-note micro-artifacts in MusicXML conversions

MusicXML tied notes were being emitted as 0 ms NoteOn/NoteOff pairs at every tie-stitch point, causing notes to silently re-attack instead of sustaining.

Fix: at any timestamp where the same note has both a NoteOn and NoteOff event, both are removed — the preceding NoteOn sustains naturally to its final unpaired NoteOff.

  • 30 435 tie-stitch pairs removed across 211 scores
  • Short-duration events (<10 ms) dropped from 34 % → 0.6 %
  • Affects all converted scores (e.g. Scriabin Etude op. 2 no. 1 bass chord now rings for 1 000 ms instead of re-attacking every 250 ms)

- musicxml.go: auto-detect and transcode UTF-16 LE/BE (with or without BOM)
  encoded MXL archives to UTF-8 before XML parsing
- go.mod: promote golang.org/x/text to direct dependency
- app.go: resolve local cover images from embedded data/library/covers/
  when meta.coverUrl is empty, matching by filename stem
Adds piano scores across classical and contemporary genres,
all in the lib__{composer}__{title}.pia naming convention
and merged cleanly into the existing data/library/ collection.

Categories included:
- Classical: Bach, Beethoven, Brahms, Chopin, Debussy, Grieg, Handel,
  Haydn, Liszt, Mendelssohn, Mozart, Prokofiev, Scarlatti, Schubert,
  Schumann, Scriabin, Satie
- Contemporary: Adele, Billie Eilish, Coldplay, Dua Lipa, Elton John,
  Linkin Park, One Direction, and others
- Exercises: scales, chord trainers, hand-position studies

69 cover images added to data/library/covers/ matching each score
by filename stem for local fallback display.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant