Sheetmusic4J Releases
2026-10-16, 0.0.4
A big release with two new interactive views, a new module structure for rendering, and a thorough architectural cleanup. More info and details in this blog post.
- New modules
render: toolkit-neutral drawing of aLayoutResultthrough theRenderSurfaceabstraction.ScorePainter,RenderSurface,RenderColor,NoteBackgroundStyle,SmuflGlyphsand the Bravura font moved here fromfxviewer(samecom.sheetmusic4j.renderpackage).fxviewerdepends on it transitively, so existingfxviewerusers don’t need to change anything.render-awt: headless rendering to images through AWT, withAwtRenderSurfaceandHeadlessScoreImage.render(score, width)returning aBufferedImage, no display or JavaFX needed.- All library modules are now proper JPMS modules with a
module-info.java.
- FX Viewer
NodeSheetView(new): a retained-mode view that builds a JavaFX scene graph with oneGroupper note, rest and chord, so each element can take mouse and keyboard events, effects and tooltips. Hover and selection are built in, withsetOnElementClicked/setOnElementHovercallbacks.FlyOverSheetView(new): a 3D variant of the strip view: the score lies on a sheet of paper, a perspective camera flies along it while it plays, a glowing ball per voice hops from note to note, and sounding noteheads light up.SheetViewgained play-along support: acursorTimecursor on the playing system,revealTimeto fill the page in note by note, andpageColor/inkColorproperties.StripSheetViewgainedrevealTimeandpageColor/inkColor, and barlines now line up across staves.- Performance and memory improvements: tiled layout drawing (only the visible region is painted) and a shared font cache.
- Engraving
- The monolithic
Engraverwas split into focused packages (analysis,page,spacing,staff,glyph,text), guarded by new layout snapshot tests. - New
PlaybackTimelinemaps playback time to layout positions, used by the cursor and reveal features. LayoutResult.hitTest(x, y)finds the note at a layout position, so canvas-based views can do picking too.- Fixed barline thickness.
- The monolithic
- Core
- New
ScoreFormat,ScoreReaderandScoreWriterinterfaces. All readers and writers implement them,ScoreFiledispatches through them, and additional formats can be plugged in asServiceLoaderservices. - Format exceptions (
MusicXmlException,MidiException,AbcException,GuitarProException) now share a commonScoreFormatExceptionbase class. - Exact rhythmic arithmetic with the new
Fractionrecord andMeasureTiming. - Size limits on reading compressed files (
.mxl,.gp) to guard against oversized archives.
- New
- FX Demo
- New
FlyOverDemoAppandNodeDemoApp(drag notes to move them, Shift for sharp, Alt/Option for flat), available as the-Pflyoverand-PnodeMaven profiles next to-Pstrip. - New “Report Visual Issue…” button that captures screenshots and a description to report rendering differences, see CONTRIBUTING.md.
- New
Full differences are listed on GitHub > compare/v0.0.3…v0.0.4
2026-07-30, 0.0.3
A small patch release that finishes wiring ABC notation into the ScoreFile facade. More info and details in this blog post.
ScoreFileScoreFile.load()andScoreFile.save()now actually dispatch.abcfiles toAbcReaderandAbcWriter. In 0.0.2 those classes existed, but the facade did not yet recognize the.abcextension, so loading or saving an ABC file throughScoreFilefailed with anUnsupported file extensionerror. Direct use ofAbcReader/AbcWriterwas unaffected.- Added round-trip tests covering
.abcload and save through the facade.
Full differences are listed on GitHub > compare/v0.0.2…v0.0.3
2026-07-29, 0.0.2
The second release of Sheetmusic4J, focused on two new input formats and a broad round of rendering improvements. More info and details in this blog post.
- ABC notation (new)
- Import and export of ABC music notation files (
.abc), via newAbcReaderandAbcWriterclasses incore. - Coverage includes keys and modes, unit note length, meter, tuplets, ties and slurs, grace notes, decorations (staccato/accent/roll/bow), barline styles, repeats and 1st/2nd endings, guitar chord symbols, lyrics, and multi-line
T:titles/subtitles, with round-trip tests.
- Import and export of ABC music notation files (
- Guitar Pro (new, experimental)
- Basic import of Guitar Pro 7/8 files (
.gp, load only), reading the GPIF XML payload with the JDK only (no third-party dependency). Guitar Pro is not an open format; this support is based on the community’s documented reverse-engineering of it. Added to gauge how people want to use it, so feedback is very welcome. Older binary formats (.gp3/.gp4/.gp5/.gpx) are not supported.
- Basic import of Guitar Pro 7/8 files (
ScoreFile- The facade now dispatches on
.abc(load/save) and.gp(load only) in addition to.musicxml,.xml,.mxl,.mid, and.midi.
- The facade now dispatches on
- Engraving
- Grace notes render as small flagged/beamed notes with a connecting curve, with the beam raked to follow the run’s pitch contour and horizontal space reserved for the group.
- Distinct flag glyphs for 32nd/64th/128th notes, and a dedicated double-whole (breve) notehead.
- Ties and slurs default to the opposite side of the stem; the tuplet bracket is omitted when the run already beams cleanly.
- Barline styles, repeat dots and voltas/endings; articulations hug the notehead; chord symbols sit closer to the staff; improved title/subtitle clearance and accidental spacing.
- FX Viewer
- New
NoteBackgroundStyleAPI to configure the rounded-rectangle highlight drawn behind a note (defaults/tight presets, measured in staff-line gaps). - Fixed a crash on large scores by rendering through a windowed single canvas instead of one oversized texture.
- New
- FX Demo
- Reorganized into focused packages, added a standalone
StripDemoAppplay-along demo, and added image-based side-by-side comparison alongside the PDF view.
- Reorganized into focused packages, added a standalone
- Under the hood
- Introduced logging via SLF4J in the library (Log4j2 binding in the demo app).
- MusicXML reader now merges multiple
<attributes>blocks per part instead of overwriting, and MIDI import produces fewer spurious rests.
Full differences are listed on GitHub > compare/v0.0.1…v0.0.2
2026-07-23, 0.0.1
The first release of Sheetmusic4J, published to gauge interest in a native Java(FX) sheet music library before investing further. More info and details in this blog post.
- Core
- Domain model for
Score,Part,Measure,Note,Chord,Rest,Clef,KeySignature,TimeSignature,Harmony,Lyric, and more. - Loading and saving of MusicXML 4.0 files.
- Importing and exporting MIDI files (
javax.sound.midi). ScoreFileconvenience facade that dispatches to the right reader/writer based on file extension (.musicxml,.xml,.mxl,.mid,.midi).
- Domain model for
- Engraving
- Framework-agnostic layout engine (no JavaFX dependency) that positions staves, measures, clefs, and notes from a
Scoreinto aLayoutResult. - Support for beams, ties and slurs, tuplets, dynamics hairpins, articulations, directions (words, tempo, dynamics), rehearsal marks, chord symbols, lyrics, and part groups (brackets/braces across parts).
- Framework-agnostic layout engine (no JavaFX dependency) that positions staves, measures, clefs, and notes from a
- FX Viewer
SheetView, a JavaFXRegionrendering aScoreon aCanvas, with zoom and configurable system width.StripSheetView, a one-line play-along view with a fixed cursor and live per-note highlighting, driven bycursorTime.
- FX Demo
- Standalone JavaFX demo application to load MusicXML/MIDI files, inspect the score, and view debug information, with a companion PDF side-by-side view for checking rendering fidelity.
The full source is available on github.com/sheetmusic4j/sheetmusic4j.