Releases: gregchapman-dev/musicdiff
New within-measure note comparison without chords/voices; fine-grained detail options
Changes since 3.1.1:
New comparison algorithm that ignores voicing and chording, just comparing all the notes,
wherever they are in the measure.
New command line and API that allows fine-grained setting of requested details.
New output option that prints a diff-like text description of the differences to stdout.
Support comparison of slurs.
Support comparison of chord symbols.
Better comparison of tuplets.
Better comparison of lyrics.
Ignore leading and trailing whitespace in directions, lyrics, and metadata.
Fix random crashes and long-term memory growth when doing multiple comparisons in one run.
musicdiff v3.1.1 Better comparison of spaces
In v3.1 I added the ability to notice differences in the spaces between notes. The method I used (note offset in measure) caused many spurious extra diffs when there was a space diff. v3.1.1 re-implements this in a much better way that no longer causes these spurious extras diffs.
musicdiff v3.1.0 (note offsets and tuplets and lyrics)
Changes since 3.0.0:
Feature-level changes:
- Move lyrics diff from GeneralNotesOnly detail level to AllObjects detail level.
- Compare GeneralNote offsets (visually, this is horizontal position in measure).
- compare tuplet_info (num and numBase, num format/visibility, bracket visibility),
not just tuplet (start/continue/stop). This is technically a bugfix, but tuplet
comparisons were pretty much not working at all, so I'm calling it a new feature.
- Add py.typed, so clients can do mypy against musicdiff APIs.
Bugfixes:
Metadata:
- Contributor might not have any names. Deal with it.
- skip more metadata keys (that are specific to a particular file, so shouldn't
be compared against another file): 'EMD', 'EST', 'VTS', 'RLN', 'PUB'.
- html-unescape during annotation of metadata items.
Style:
- Ignore some style stuff we don't care about (e.g. absX/absY).
- Ignore fontSize, and regularize how 'bold' is represented.
Lyrics:
- Don't annotate lyric style if it is empty (hasStyleInformation could still be True).
- Consider lyric.syllabic == None and 'single' to be the same.
- Better comparison of lyrics, treat style.absoluteY as placement fallback when
placement is None.
- For lyrics, ignore placement=='below' and justify=='left', as equivalent to not
specifying.
- Ignore empty lyrics.
MetronomeMarks:
- Ignore playback-only MetronomeMarks (they're not marked invisible, but they are
not printed).
- Treat MetronomeMark with explicit number and no explicit text the same as one with no
explicit number and explicit text saying "x = NNN" (where x is a SMUFL note code
followed by 1-4 SMUFL dots). They are printed identically, so they are the same.
Barlines:
- no specified barline is the same as normal barline (at start and end of measure,
that is).
- ignore invisible ('none') barlines.
Other fixes:
- Fix crash when diff is visualized between note with accidental and unpitched note/rest
- Ignore redundant system and page breaks
- Grace vs Appoggiatura is more complex (in music21) than I thought.
- Skip over non-realized ChordSymbols (realized ChordSymbols get treated as Chords)
- Skip over StaffGroup that contains all the staves and has neither barTogether nor
symbol. Some file formats have one (MEI), and some file formats imply/don't need
it (MusicXML).
Compare metadata on request and many other improvements/fixes
Changes since 2.0.1:
- Require music21 v9 (for several features/fixes) and converter21 v3 (for improved Humdrum and MEI import)
- Remove all checks for music21 features (they're all there in v9)
- compare Mordent/Trill/Turn better, to include ornament accidentals (newly supported in music21 v9)
- Compare metadata if requested (e.g. AllObjectsAndMetadata)
- compare StaffLayout.staffLines and StaffLayout.staffSize
- support tuplet.type = 'startStop'
- fix tie annotation
- finish tremolo annotation, both fingered and bowed
- compare rest positioning
- better comparison of RepeatBrackets (support .overrideDisplay)
- compare placement (above/below) of articulations and expressions (AllObjectsWithStyle)
- support comparison of StaffGroups as part of AllObjects. StaffGroup bracket shape is relegated to AllObjectsWithStyle.
- compare (and fill and transpose) Ottavas, maintaining accidental display status (newly possible in music21 v9)
- compare delayed turns (new in music21 v9)
- ignore redundant clefs during comparison
- compare tuplet number/bracket visibility and format (and placement if diffing WithStyle)
Ease up on music21 dependency: v8.1 is fine.
v2.0.1 Ease up on music21 dependency: v8.1 is fine.
New MEI parser
Use a new MEI parser from converter21. Compare grace notes (including whether they are accented or unaccented). General bug fixes.
Comparison of arpeggios and multiple endings
Add support for comparison of ArpeggioMark, ArpeggioMarkSpanner, and RepeatBracket.
Use converter21's Humdrum parser
v1.3.0 Depend on (and install during setup) converter21.
Add lyrics support
Add support for comparison of lyrics within AllObjects (default diff) and AllObjectsWithStyle.
Diff non-notes, and optional detailed diff
Added diff of non-notes (clefs, etc), as well as detailed diff including style (text fonts, stem direction, note color, etc).
New DetailLevel parameter: GeneralNotesOnly (like v1), AllObjects (default), AllObjectsWithStyle (notice detailed differences)