├── .flake8
├── .gitignore
├── .pylintrc
├── LICENSE
├── MANIFEST.in
├── README.md
├── ReleaseNotes_3.0.0.txt
├── ReleaseNotes_3.1.0.txt
├── ReleaseNotes_4.0.0.txt
├── ReleaseNotes_4.1.0.txt
├── ReleaseNotes_4.2.0.txt
├── best_output.csv
├── build_dist.commands
├── docs
├── index.html
├── musicdiff.html
├── musicdiff
│ ├── annotation.html
│ ├── comparison.html
│ ├── detaillevel.html
│ └── visualization.html
└── search.js
├── examples
└── musicdiff_demo.ipynb
├── generateDocs.commands
├── musicdiff
├── __init__.py
├── __main__.py
├── annotation.py
├── comparison.py
├── detaillevel.py
├── m21utils.py
├── py.typed
└── visualization.py
├── py.typed
├── pypi_README.md
├── setup.py
├── symbols.txt
└── tests
├── expected_cmd_line_output.txt
├── generate_cmd_line_test_results
├── test_cmd_line
├── test_ml_training_evaluation.sh
├── test_nl.py
├── test_results
├── cmd_line_results_allobjects.txt
├── cmd_line_results_allobjects_no_lyrics.txt
├── cmd_line_results_allobjects_no_lyrics_barlines.txt
├── cmd_line_results_allobjects_style.txt
├── cmd_line_results_allobjects_style_metadata.txt
├── cmd_line_results_allobjects_style_metadata_secr.txt
├── cmd_line_results_allobjects_style_no_lyrics.txt
├── cmd_line_results_decoratednotesandrests.txt
├── cmd_line_results_decoratednotesandrests_no_ties.txt
├── cmd_line_results_decoratednotesandrests_no_ties_beams.txt
├── cmd_line_results_decoratednotesandrests_no_ties_beams_slurs.txt
├── cmd_line_results_decoratednotesandrests_voicing.txt
├── cmd_line_results_lyrics.txt
├── cmd_line_results_metadata.txt
├── cmd_line_results_notesandrests.txt
├── cmd_line_results_notesandrests_articulations.txt
├── cmd_line_results_notesandrests_articulations_ornaments.txt
├── cmd_line_results_notesandrests_barlines.txt
├── cmd_line_results_notesandrests_barlines_directions.txt
├── cmd_line_results_notesandrests_directions.txt
├── cmd_line_results_notesandrests_secr.txt
├── cmd_line_results_otherobjects.txt
└── cmd_line_results_otherobjects_style.txt
├── test_scl.py
├── test_score_visualization.py
├── test_scores
├── chord_score_1a.mei
├── chord_score_1b.mei
├── chord_score_2a.mei
├── chord_score_2b.mei
├── chord_score_3a.mei
├── chord_score_3b.mei
├── humdrum
│ ├── Haydn_-_Symphony_No._44_in_E_minor.krn
│ └── Nimrod_for_string_quartet.krn
├── monophonic_score_1a.mei
├── monophonic_score_1b.mei
├── multivoice_score_1a.mei
├── multivoice_score_1b.mei
├── musicxml
│ ├── Haydn_-_Symphony_No._44_in_E_minor.musicxml
│ ├── Nimrod_for_string_quartet.musicxml
│ ├── articulation_score_1a.xml
│ ├── articulation_score_1b.xml
│ ├── chord_score_1a.xml
│ ├── chord_score_1b.xml
│ ├── chord_score_2a.xml
│ ├── chord_score_2b.xml
│ ├── chord_score_3a.xml
│ ├── chord_score_3b.xml
│ ├── longHaydn_a.musicxml
│ ├── longHaydn_b.musicxml
│ ├── monophonic_score_1a.xml
│ ├── monophonic_score_1b.xml
│ ├── multivoice_score_1a.xml
│ ├── multivoice_score_1b.xml
│ ├── polyphonic_score_2a.xml
│ ├── polyphonic_score_2b.xml
│ ├── tie_score_1a.xml
│ ├── tie_score_1b.xml
│ ├── tie_score_2a.xml
│ ├── tie_score_2b.xml
│ ├── tuplet_score_1a.xml
│ └── tuplet_score_1b.xml
├── polyphonic_score_1a.mei
├── polyphonic_score_1b.mei
├── polyphonic_score_2a.mei
├── polyphonic_score_2b.mei
├── test_all_details_1a.mei
├── test_all_details_1b.mei
├── tie_score_1a.mei
├── tie_score_1b.mei
├── tie_score_2a.mei
├── tie_score_2b.mei
├── tuplet_score_1a.mei
├── tuplet_score_1b.mei
└── xml2.xml
└── test_utils.py
/.flake8:
--------------------------------------------------------------------------------
1 | [flake8]
2 | ignore=
3 | E127,
4 | E128,
5 | E301,
6 | E302,
7 | E303,
8 | E501,
9 | E722,
10 | E731,
11 | F401,
12 | F405,
13 | F821,
14 | F841,
15 | W391,
16 | W503,
17 |
18 | # E127, # over indented
19 | # E128, # under indented
20 | # E301, # 0 blank lines -- good test but something going wrong in new algorithm
21 | # E302, # blank lines
22 | # E303, # blank lines
23 | # E501, # let pylint check line length
24 | # E722, # let pylint check bare except
25 | # E731, # do not assign a lambda
26 | # F401, # let pylint check for imported but unused (wildcards and exports trigger)
27 | # F405, # __all__ is okay to get from wildcard.
28 | # F821, # let pylint check for undefined (del at end of module makes undefined)
29 | # F841, # let pylint check for unused
30 | # W391, # extra blank lines at end of file
31 | # W503, # line break BEFORE binary operator
32 |
33 | exclude=
34 | .git,
35 | __pycache__,
36 | *.pyc,
37 | ext,
38 |
39 | # F403 = from module import *
40 |
41 | per-file-ignores =
42 | music21/chord/tables.py:E122,E124,E201,E202,E203,E221,E231,E241
43 | music21/common/__init__.py:F403
44 | music21/features/__init__.py:F403
45 | music21/search/__init__.py:F403
46 |
47 | max-line-length=100
48 |
49 | inline-quotes = single
50 | multiline-quotes = '''
51 | docstring-quotes = '''
52 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .coverage
2 | .idea
3 | htmlcov
4 | __pycache__
5 | musicdiff.egg-info
6 | .DS_Store
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | The MIT License (MIT)
3 | Copyright (c) 2022-2025 Francesco Foscarin, Greg Chapman
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
11 | musicdiff is derived from https://github.com/fosfrancesco/music-score-diff.git which also uses the MIT license:
12 |
13 | The MIT License (MIT)
14 | Copyright (c) 2019, Francesco Foscarin
15 |
16 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
17 |
18 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include pypi_README.md
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # musicdiff
2 | A Python3 package (and command-line tool) for computing and visualizing (or describing) the notation differences between two music scores.
3 |
4 | musicdiff is focused on visible notation differences, not only on audible musical differences. For example, two tied eighth notes are considered different from a single quarter note. And two beamed 16th notes are considered different from two unbeamed 16th notes. This makes musicdiff particularly useful for assessing the results of Optical Music Recognition software.
5 |
6 | musicdiff is derived from: [music-score-diff](https://github.com/fosfrancesco/music-score-diff.git)
7 | by [Francesco Foscarin](https://github.com/fosfrancesco).
8 |
9 | ## Setup
10 | Depends on [music21](https://pypi.org/project/music21) (version 9.1+), [numpy](https://pypi.org/project/numpy), and [converter21](https://pypi.org/project/converter21) (version 3.4+). You also will need to configure music21 (instructions [here](https://web.mit.edu/music21/doc/usersGuide/usersGuide_01_installing.html)) to display a musical score (e.g. with MuseScore). Requires Python 3.10+.
11 |
12 | ## Usage
13 | On the command line:
14 |
15 | python3 -m musicdiff -i decoratednotesandrests lyrics style -x beams -- file1.musicxml file2.krn
16 |
17 | arguments:
18 | -i/--include one or more named details to include in comparison (the default is allobjects,
19 | a.k.a. decoratednotesandrests and otherobjects). Can be decoratednotesandrests,
20 | otherobjects, allobjects, or any combination of those and/or the following:
21 | notesandrests; the aforementioned note decorations: beams, tremolos, ornaments,
22 | articulations, ties, slurs; the other objects: signatures, directions,
23 | barlines, staffdetails, chordsymbols, ottavas, arpeggios, and lyrics; and
24 | a final few details that are not found in allobjects: style, metadata, and
25 | voicing. voicing compares how notes are included in voices and chords (by
26 | default this is ignored).
27 | -x/--exclude one or more named details to exclude from comparison. Can be any of the
28 | named details accepted by -i/--include.
29 | -o/--output one or more of three output formats: text (or t) or visual (or v) or ser (or s);
30 | the default is visual). visual (or v) requests production of marked-up score
31 | PDFs; text (or t) requests production of diff-like text output; ser (or s)
32 | requests a JSON text output containing Symbolic Error Ratio information.
33 |
34 | file1 first music score file to compare (any format music21 or converter21 can parse)
35 | file2 second music score file to compare (any format music21 or converter21 can parse)
36 |
37 | The source for that command-line tool, which calls musicdiff's high-level diff() API, can be seen [here](musicdiff/__main__.py). You can use it as example code for adding musicdiff capabilities to your own code. See the documentation [here](https://gregchapman-dev.github.io/musicdiff) to find out how to customize diff()'s behavior beyond what the command line tool does.
38 |
39 | A google colab notebook is available [here](examples/musicdiff_demo.ipynb).
40 |
41 | If you are interested in calling lower-level musicdiff APIs to do more complicated things than just visualization in PDFs or diff-like text output, the source for musicdiff's high-level diff() API (found [here](musicdiff/__init__.py)) is good example code to read. Note particularly how diff() calls converter21.register() to register converter21's Humdrum and MEI parsers for use by music21. If you call lower-level APIs than diff(), you will need to do this yourself.
42 |
43 | ## Documentation
44 | You can find the musicdiff API documentation [here](https://gregchapman-dev.github.io/musicdiff).
45 |
46 | ## Citing
47 | If you use this work in any research, please cite the relevant paper:
48 |
49 | ```
50 | @inproceedings{foscarin2019diff,
51 | title={A diff procedure for music score files},
52 | author={Foscarin, Francesco and Jacquemard, Florent and Fournier-S’niehotta, Raphael},
53 | booktitle={6th International Conference on Digital Libraries for Musicology},
54 | pages={58--64},
55 | year={2019}
56 | }
57 | ```
58 |
59 | The paper is freely available [here](https://hal.inria.fr/hal-02267454v2/document).
60 |
61 | ## License
62 | Licensed under the [MIT License](LICENSE).
63 |
64 | ## Acknowledgment
65 | Many thanks to [Francesco Foscarin](https://github.com/fosfrancesco) for allowing me to use his [music-score-diff](https://github.com/fosfrancesco/music-score-diff.git) code, and for continuing to advise me on this project.
66 |
--------------------------------------------------------------------------------
/ReleaseNotes_3.0.0.txt:
--------------------------------------------------------------------------------
1 | Changes since 2.0.1:
2 | - Require music21 v9 (for several features/fixes) and converter21 v3
3 | (for improved Humdrum and MEI import)
4 | - Remove all checks for music21 features (they're all there in v9)
5 | - compare Mordent/Trill/Turn better, to include ornament accidentals
6 | (newly supported in music21 v9)
7 | - Compare metadata if requested (e.g. AllObjectsAndMetadata)
8 | - compare StaffLayout.staffLines and StaffLayout.staffSize
9 | - support tuplet.type = 'startStop'
10 | - fix tie annotation
11 | - finish tremolo annotation:
12 | notice fingered tremolos (TremoloSpanner)
13 | annotate tremolos as 'bTrem' (Tremolo, a.k.a. bowed tremolo, a.k.a. one note tremolo)
14 | vs. 'fTrem' (TremoloSpanner, a.k.a. fingered tremolo, a.k.a. two note tremolo)
15 | - compare rest positioning
16 | - better comparison of RepeatBrackets (support .overrideDisplay)
17 | - compare placement (above/below) of articulations and expressions (AllObjectsWithStyle)
18 | - support comparison of StaffGroups as part of AllObjects.
19 | StaffGroup bracket shape is relegated to AllObjectsWithStyle.
20 | - compare (and fill and transpose) Ottavas, maintaining accidental display status
21 | (newly possible in music21 v9)
22 | - compare delayed turns (new in music21 v9)
23 | - ignore redundant clefs during comparison
24 | - compare tuplet number/bracket visibility and format (and placement if diffing WithStyle)
25 |
--------------------------------------------------------------------------------
/ReleaseNotes_3.1.0.txt:
--------------------------------------------------------------------------------
1 | Changes since 3.0.0:
2 |
3 | Feature-level changes:
4 | - Move lyrics diff from GeneralNotesOnly detail level to AllObjects detail level.
5 | - Compare GeneralNote offsets (visually, this is horizontal position in measure).
6 | - compare tuplet_info (num and numBase, num format/visibility, bracket visibility),
7 | not just tuplet (start/continue/stop). This is technically a bugfix, but tuplet
8 | comparisons were pretty much not working at all, so I'm calling it a new feature.
9 | - Add py.typed, so clients can do mypy against musicdiff APIs.
10 |
11 | Bugfixes:
12 | Metadata:
13 | - Contributor might not have any names. Deal with it.
14 | - skip more metadata keys (that are specific to a particular file, so shouldn't
15 | be compared against another file): 'EMD', 'EST', 'VTS', 'RLN', 'PUB'.
16 | - html-unescape during annotation of metadata items.
17 | Style:
18 | - Ignore some style stuff we don't care about (e.g. absX/absY).
19 | - Ignore fontSize, and regularize how 'bold' is represented.
20 | Lyrics:
21 | - Don't annotate lyric style if it is empty (hasStyleInformation could still be True).
22 | - Consider lyric.syllabic == None and 'single' to be the same.
23 | - Better comparison of lyrics, treat style.absoluteY as placement fallback when
24 | placement is None.
25 | - For lyrics, ignore placement=='below' and justify=='left', as equivalent to not
26 | specifying.
27 | - Ignore empty lyrics.
28 | MetronomeMarks:
29 | - Ignore playback-only MetronomeMarks (they're not marked invisible, but they are
30 | not printed).
31 | - Treat MetronomeMark with explicit number and no explicit text the same as one with no
32 | explicit number and explicit text saying "x = NNN" (where x is a SMUFL note code
33 | followed by 1-4 SMUFL dots). They are printed identically, so they are the same.
34 | Barlines:
35 | - no specified barline is the same as normal barline (at start and end of measure,
36 | that is).
37 | - ignore invisible ('none') barlines.
38 | Other fixes:
39 | - Fix crash when diff is visualized between note with accidental and unpitched note/rest
40 | - Ignore redundant system and page breaks
41 | - Grace vs Appoggiatura is more complex (in music21) than I thought.
42 | - Skip over non-realized ChordSymbols (realized ChordSymbols get treated as Chords)
43 | - Skip over StaffGroup that contains all the staves and has neither barTogether nor
44 | symbol. Some file formats have one (MEI), and some file formats imply/don't need
45 | it (MusicXML).
46 |
47 |
--------------------------------------------------------------------------------
/ReleaseNotes_4.0.0.txt:
--------------------------------------------------------------------------------
1 | Changes since 3.1.1:
2 | New command line and API that allows fine-grained setting of requested details.
3 | New output option that prints a diff-like text description of the differences to stdout.
4 | New comparison algorithm that ignores voicing and chording, just comparing all the notes,
5 | wherever they are in the measure.
6 | Support comparison of slurs.
7 | Support comparison of chord symbols.
8 | Better comparison of tuplets.
9 | Better comparison of lyrics.
10 | Ignore leading and trailing whitespace in directions, lyrics, and metadata.
11 | Fix random crashes and long-term memory growth when doing multiple comparisons in one run.
12 |
--------------------------------------------------------------------------------
/ReleaseNotes_4.1.0.txt:
--------------------------------------------------------------------------------
1 | Changes since 4.0.0:
2 | Add new output option that prints JSON containing the symbolic error rate (SER =
3 | numSymbolErrors / numSymbolsInGroundTruth) to stdout (the JSON actually
4 | contains all three numbers). Ground truth is assumed to be the second file.
5 | If numSymbolsInGroundTruth == 0, SER will be numSymbolErrors, to avoid divide
6 | by zero.
7 | Add new API Visualization.get_ser_output() that returns a dict containing the
8 | symbolic error rate.
9 | In support of SER, notation_sizes (a.k.a. symbol counts) and diff costs (a.k.a.
10 | symbolic error counts) have been reviewed and updated:
11 | AnnNote.notation_size(): add 1 symbol for slash on grace note
12 | AnnExtra.notation_size(): len(text) for the text, add 1 symbol if there is any
13 | style specified
14 | AnnExtra diff error count: text diff is Levenshtein distance, offset diff is
15 | 1 symbol error, duration diff is 1 symbol error, style diff is 1 symbol error
16 | AnnLyric.notation_size(): use len(text) as symbol count instead of 1;
17 | add 1 symbol if there's a verse number;
18 | add 1 symbol if there's a verse identifier different from the number;
19 | add 1 symbol if styled
20 | AnnLyric diff cost: text diff symbol error count is the Levenshtein distance,
21 | verse number diff is 1 symbol error, verse identifier diff is 1 symbol
22 | error, offset diff is 1 symbol error, style diff is 1 symbol error
23 | AnnMeasure.notation_size(): not just notes' symbols and extras' symbols, add in
24 | the lyrics' symbols
25 | AnnScore.notation_size(): not just parts' symbols, add in staff_groups' symbols
26 | and metadata_items' symbols
27 | Add support for comparing scores that have different number of parts (this previously
28 | caused a failure). The existing parts are assumed to line up by index (as before,
29 | score1 part 0 is compared with score2 part 0), and then we generate edits that
30 | either delete the extra parts in score1, or add the extra parts in score2. The
31 | number of symbol errors for those edits is simply the notation_size of (the
32 | number of symbols in) the added or deleted parts.
33 | Several smallish bugfixes.
34 |
35 |
--------------------------------------------------------------------------------
/ReleaseNotes_4.2.0.txt:
--------------------------------------------------------------------------------
1 | Changes since 4.1.0:
2 | Add new extra (non-note/rest) annotation/comparison algorithm, using set distance.
3 |
--------------------------------------------------------------------------------
/build_dist.commands:
--------------------------------------------------------------------------------
1 | # git checkout main
2 | # git merge develop
3 | # Fix any conflicts, add, commit, push to origin
4 |
5 | # Edit setup.py to change version number and maybe dependencies.
6 | # MAYBE README and pypi_README, too, if dependencies changed.
7 | # git add setup.py README etc
8 | # git commit
9 | # git push origin
10 |
11 | # Clean up previous stuff:
12 | rm -r __pycache__
13 | rm -r musicdiff/__pycache__
14 | rm -r tests/__pycache__
15 | rm -r musicdiff.egg-info
16 | rm -r dist build
17 |
18 | # Build dist and wheel:
19 | python3 -m build
20 |
21 | # Check for malformed README URLs:
22 | python3 -m twine check dist/*
23 |
24 | # Test-publish to testpypi (__token__/password for pypi):
25 | python3 -m twine upload --repository testpypi dist/*
26 |
27 | # If all looks good, then publish on pypi proper (no password needed):
28 | python3 -m twine upload dist/*
29 |
30 | # Go to github and make a release there as well (tag=vN.n.n)
31 |
32 | # Make develop "catch up with" main, so we can easily merge again later
33 | # git checkout develop
34 | # git merge --squash main
35 | # git commit
36 | # git push origin
37 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/examples/musicdiff_demo.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "name": "musicdiff Demo",
7 | "provenance": [],
8 | "authorship_tag": "ABX9TyOXa8bylkmkC18sJjvlpSBC",
9 | "include_colab_link": true
10 | },
11 | "kernelspec": {
12 | "name": "python3",
13 | "display_name": "Python 3"
14 | },
15 | "language_info": {
16 | "name": "python"
17 | }
18 | },
19 | "cells": [
20 | {
21 | "cell_type": "markdown",
22 | "metadata": {
23 | "id": "view-in-github",
24 | "colab_type": "text"
25 | },
26 | "source": [
27 | " "
28 | ]
29 | },
30 | {
31 | "cell_type": "code",
32 | "execution_count": null,
33 | "metadata": {
34 | "id": "Xs5PXxMtwcoH"
35 | },
36 | "outputs": [],
37 | "source": [
38 | "!pip install --upgrade music21\n",
39 | "!pip install musicdiff"
40 | ]
41 | },
42 | {
43 | "cell_type": "code",
44 | "source": [
45 | "# install musescore for the visualization\n",
46 | "!yes | add-apt-repository ppa:mscore-ubuntu/mscore3-stable\n",
47 | "!apt update\n",
48 | "!apt install musescore3"
49 | ],
50 | "metadata": {
51 | "id": "bzrSzL22yu2T"
52 | },
53 | "execution_count": null,
54 | "outputs": []
55 | },
56 | {
57 | "cell_type": "code",
58 | "source": [
59 | "# clone repo, only to get some example musical scores.\n",
60 | "# This is not necessary if you are running it on your scores\n",
61 | "\n",
62 | "!git clone https://github.com/gregchapman-dev/musicdiff"
63 | ],
64 | "metadata": {
65 | "id": "QNg2z_pFwfK3"
66 | },
67 | "execution_count": null,
68 | "outputs": []
69 | },
70 | {
71 | "cell_type": "markdown",
72 | "source": [
73 | "Import libraries and set the correct pat for musescore3."
74 | ],
75 | "metadata": {
76 | "id": "6dAGTq79yuJz"
77 | }
78 | },
79 | {
80 | "cell_type": "code",
81 | "source": [
82 | "import musicdiff\n",
83 | "import music21\n",
84 | "from pathlib import Path\n",
85 | "us = music21.environment.UserSettings()\n",
86 | "us['musescoreDirectPNGPath'] = '/usr/bin/mscore3'"
87 | ],
88 | "metadata": {
89 | "id": "8pHLzGTgxft0"
90 | },
91 | "execution_count": null,
92 | "outputs": []
93 | },
94 | {
95 | "cell_type": "markdown",
96 | "source": [
97 | "Everything is ready, we can compute and display the differences."
98 | ],
99 | "metadata": {
100 | "id": "IJV_MwcSGX5k"
101 | }
102 | },
103 | {
104 | "cell_type": "code",
105 | "source": [
106 | "path_score1 = \"/content/musicdiff/tests/test_scores/musicxml/chord_score_1a.xml\"\n",
107 | "path_score2 = \"/content/musicdiff/tests/test_scores/musicxml/chord_score_1b.xml\"\n",
108 | "out_pdf_path1 = \"/content/score1.pdf\"\n",
109 | "out_pdf_path2 = \"/content/score2.pdf\"\n",
110 | "musicdiff.diff(path_score1,path_score2, out_pdf_path1, out_pdf_path2)"
111 | ],
112 | "metadata": {
113 | "id": "BvEXOlDqxuww"
114 | },
115 | "execution_count": null,
116 | "outputs": []
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "source": [
121 | "The two score pdfs are saved in score1.pdf and score2.pdf. You can download them!\n",
122 | "\n",
123 | "Google colab does not support the visualization of pdf files, but we can visualize them by importing the temporary musicxml files and calling music21 show() function."
124 | ],
125 | "metadata": {
126 | "id": "J3z4ILeSGm19"
127 | }
128 | },
129 | {
130 | "cell_type": "code",
131 | "source": [
132 | "music21.converter.parse(\"/content/score1.musicxml\").show()"
133 | ],
134 | "metadata": {
135 | "id": "RAXSmKpNIEVA"
136 | },
137 | "execution_count": null,
138 | "outputs": []
139 | },
140 | {
141 | "cell_type": "code",
142 | "source": [
143 | "music21.converter.parse(\"/content/score2.musicxml\").show()"
144 | ],
145 | "metadata": {
146 | "id": "y7y3sJM4Kt5U"
147 | },
148 | "execution_count": null,
149 | "outputs": []
150 | }
151 | ]
152 | }
--------------------------------------------------------------------------------
/generateDocs.commands:
--------------------------------------------------------------------------------
1 | # Clean out in case some files will no longer be there
2 | rm -r docs
3 |
4 | # Generate docs website in ./docs, from current sources:
5 | python3 -m pdoc musicdiff \!musicdiff.m21utils -o docs
6 |
--------------------------------------------------------------------------------
/musicdiff/py.typed:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gregchapman-dev/musicdiff/c770d3750113e222e8b6ad6de1d8b5f2c4ae47ed/musicdiff/py.typed
--------------------------------------------------------------------------------
/py.typed:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gregchapman-dev/musicdiff/c770d3750113e222e8b6ad6de1d8b5f2c4ae47ed/py.typed
--------------------------------------------------------------------------------
/pypi_README.md:
--------------------------------------------------------------------------------
1 | # musicdiff
2 | A Python3 package (and command-line tool) for computing and visualizing (or describing) the notation differences between two music scores.
3 |
4 | musicdiff is focused on visible notation differences, not only on audible musical differences. For example, two tied eighth notes are considered different from a single quarter note. And two beamed 16th notes are considered different from two unbeamed 16th notes. This makes musicdiff particularly useful for assessing the results of Optical Music Recognition software.
5 |
6 | musicdiff is derived from: [music-score-diff](https://github.com/fosfrancesco/music-score-diff.git)
7 | by [Francesco Foscarin](https://github.com/fosfrancesco).
8 |
9 | ## Setup
10 | Depends on [music21](https://pypi.org/project/music21) (version 9.1+), [numpy](https://pypi.org/project/numpy), and [converter21](https://pypi.org/project/converter21) (version 3.4+). You also will need to configure music21 (instructions [here](https://web.mit.edu/music21/doc/usersGuide/usersGuide_01_installing.html)) to display a musical score (e.g. with MuseScore). Requires Python 3.10+.
11 |
12 | ## Usage
13 | On the command line:
14 |
15 | python3 -m musicdiff -i decoratednotesandrests lyrics style -x beams -- file1.musicxml file2.krn
16 |
17 | arguments:
18 | -i/--include one or more named details to include in comparison (the default is allobjects,
19 | a.k.a. decoratednotesandrests and otherobjects). Can be decoratednotesandrests,
20 | otherobjects, allobjects, or any combination of those and/or the following:
21 | notesandrests; the aforementioned note decorations: beams, tremolos, ornaments,
22 | articulations, ties, slurs; the other objects: signatures, directions,
23 | barlines, staffdetails, chordsymbols, ottavas, arpeggios, and lyrics; and
24 | a final few details that are not found in allobjects: style, metadata, and
25 | voicing. voicing compares how notes are included in voices and chords (by
26 | default this is ignored).
27 | -x/--exclude one or more named details to exclude from comparison. Can be any of the
28 | named details accepted by -i/--include.
29 | -o/--output one or more of three output formats: text (or t) or visual (or v) or ser (or s);
30 | the default is visual). visual (or v) requests production of marked-up score
31 | PDFs; text (or t) requests production of diff-like text output; ser (or s)
32 | requests a JSON text output containing Symbolic Error Ratio information.
33 |
34 | file1 first music score file to compare (any format music21 or converter21 can parse)
35 | file2 second music score file to compare (any format music21 or converter21 can parse)
36 |
37 | musicdiff is also a package, with APIs you can call in your own code. There is a high-level diff() API that the command-line tool uses (that you can tweak the behavior of), and there are also lower level APIs that you can use in projects that perhaps want to do something more complicated than just visualization in PDFs or diff-like text output.
38 |
39 | ## Documentation
40 | You can find the musicdiff API documentation [here](https://gregchapman-dev.github.io/musicdiff).
41 |
42 | ## Citing
43 | If you use this work in any research, please cite the relevant paper:
44 |
45 | ```
46 | @inproceedings{foscarin2019diff,
47 | title={A diff procedure for music score files},
48 | author={Foscarin, Francesco and Jacquemard, Florent and Fournier-S’niehotta, Raphael},
49 | booktitle={6th International Conference on Digital Libraries for Musicology},
50 | pages={58--64},
51 | year={2019}
52 | }
53 | ```
54 |
55 | The paper is freely available [here](https://hal.inria.fr/hal-02267454v2/document).
56 |
57 | ## Acknowledgment
58 | Many thanks to [Francesco Foscarin](https://github.com/fosfrancesco) for allowing me to use his [music-score-diff](https://github.com/fosfrancesco/music-score-diff.git) code, and for continuing to work with and advise me on this project.
59 |
60 | ## License
61 | The MIT License (MIT)
62 | Copyright (c) 2022-2025 Francesco Foscarin, Greg Chapman
63 |
64 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
65 |
66 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
67 |
68 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
69 |
70 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | # ------------------------------------------------------------------------------
2 | # Purpose: musicdiff is a package for comparing music scores using music21.
3 | #
4 | # Authors: Greg Chapman
5 | # musicdiff is derived from:
6 | # https://github.com/fosfrancesco/music-score-diff.git
7 | # by Francesco Foscarin
8 | #
9 | # Copyright: (c) 2022-2025 Francesco Foscarin, Greg Chapman
10 | # License: MIT, see LICENSE
11 | # ------------------------------------------------------------------------------
12 |
13 | from setuptools import setup, find_packages
14 | import pathlib
15 |
16 | musicdiffversion = '4.2.0'
17 |
18 | here = pathlib.Path(__file__).parent.resolve()
19 |
20 | long_description = (here / 'pypi_README.md').read_text(encoding='utf-8')
21 |
22 | if __name__ == '__main__':
23 | setup(
24 | name='musicdiff',
25 | version=musicdiffversion,
26 |
27 | description='A music score notation diff package',
28 | long_description=long_description,
29 | long_description_content_type='text/markdown',
30 |
31 | url='https://github.com/gregchapman-dev/musicdiff',
32 |
33 | author='Greg Chapman',
34 | author_email='gregc@mac.com',
35 |
36 | classifiers=[
37 | 'Development Status :: 5 - Production/Stable',
38 | 'License :: OSI Approved :: MIT License',
39 | 'Programming Language :: Python :: 3 :: Only',
40 | 'Operating System :: OS Independent',
41 | 'Natural Language :: English',
42 | ],
43 |
44 | keywords=[
45 | 'music',
46 | 'score',
47 | 'notation',
48 | 'diff',
49 | 'compare',
50 | 'OMR',
51 | 'Optical Music Recognition',
52 | 'assess',
53 | 'assessment',
54 | 'comparison',
55 | 'music21',
56 | ],
57 |
58 | packages=find_packages(),
59 |
60 | python_requires='>=3.10',
61 |
62 | install_requires=[
63 | 'music21>=9.1',
64 | 'numpy',
65 | 'converter21>=3.4'
66 | ],
67 |
68 | project_urls={
69 | 'Documentation': 'https://gregchapman-dev.github.io/musicdiff',
70 | 'Source': 'https://github.com/gregchapman-dev/musicdiff',
71 | 'Bug Reports': 'https://github.com/gregchapman-dev/musicdiff/issues',
72 | }
73 | )
74 |
--------------------------------------------------------------------------------
/tests/generate_cmd_line_test_results:
--------------------------------------------------------------------------------
1 | #!/bin/zsh
2 |
3 | mkresults() {
4 | name=$1
5 | shift 1
6 | python -m musicdiff --output text $@ -- tests/test_scores/test_all_details_1a.mei tests/test_scores/test_all_details_1b.mei > tests/test_results/cmd_line_results_$name.txt >& /dev/null
7 | }
8 |
9 | rm tests/test_results/*.txt
10 |
11 | # simple includes (and some simple excludes that just remove something we included)
12 | mkresults notesandrests --include notesandrests
13 | mkresults notesandrests_barlines -i notesandrests barlines
14 | mkresults notesandrests_barlines_directions -i notesandrests barlines directions
15 | mkresults notesandrests_directions -i notesandrests barlines directions -x barlines
16 | mkresults notesandrests_barlines_directions -i notesandrests barlines directions
17 | mkresults notesandrests_ser ser --include notesandrests
18 |
19 | # combo include: decoratednotesandrests (with various excludes)
20 | mkresults decoratednotesandrests --include decoratednotesandrests
21 | mkresults decoratednotesandrests_no_ties --include decoratednotesandrests --exclude ties
22 | mkresults decoratednotesandrests_no_ties_beams --include decoratednotesandrests --exclude beams ties
23 | mkresults decoratednotesandrests_no_ties_beams_slurs --include decoratednotesandrests --exclude beams ties slurs
24 | mkresults notesandrests_articulations_ornaments --include decoratednotesandrests --exclude beams ties slurs tremolos
25 | mkresults notesandrests_articulations --include decoratednotesandrests --exclude beams ties slurs tremolos ornaments
26 |
27 | # voicing adds a bunch of chord and voice diffs
28 | mkresults decoratednotesandrests_voicing --include decoratednotesandrests voicing
29 |
30 | # Check interactions of voicing and lyrics. voicing (or not) should not affect lyrics diffs.
31 | # Lack of notes should not affect lyrics diffs, either.
32 | mkresults lyrics --include lyrics
33 | mkresults lyrics --include voicing lyrics
34 |
35 | # otherobjects, with and without style
36 | mkresults otherobjects -i otherobjects
37 | mkresults otherobjects_style -i otherobjects style
38 |
39 | # allobjects (a.k.a. otherobjects and decoratednotesandrests), with and without style
40 | mkresults allobjects -i allobjects
41 | mkresults allobjects_style -i allobjects style
42 |
43 | mkresults allobjects_no_lyrics -i allobjects -x lyrics
44 | mkresults allobjects_no_lyrics_barlines -i allobjects -x lyrics barlines
45 | mkresults allobjects_style_no_lyrics -i allobjects style -x lyrics
46 |
47 | mkresults metadata -i metadata
48 | mkresults allobjects_style_metadata -i metadata style allobjects
49 | mkresults allobjects_style_metadata_ser ser -i metadata style allobjects
50 |
--------------------------------------------------------------------------------
/tests/test_cmd_line:
--------------------------------------------------------------------------------
1 | #!/bin/zsh
2 |
3 | fails=0
4 |
5 | run_test() {
6 | name=$1
7 | shift 1
8 | python -m musicdiff --output text $@ -- tests/test_scores/test_all_details_1a.mei tests/test_scores/test_all_details_1b.mei > /tmp/results.txt >& /dev/null
9 | diff -q /tmp/results.txt tests/test_results/cmd_line_results_$name.txt >/dev/null 2>&1
10 | if [[ $? -ne 0 ]]; then
11 | # bbdiff /tmp/results.txt tests/test_results/cmd_line_results_$name.txt
12 | # exit(0)
13 | print "Test failure: musicdiff $@"
14 | ((fails+=1))
15 | else
16 | print "Test success: musicdiff $@"
17 | fi
18 | }
19 |
20 | # simple includes with simple excludes that just remove something we included
21 | run_test notesandrests_barlines -i notesandrests barlines directions -x directions
22 | run_test notesandrests_barlines -i notesandrests barlines voicing -x voicing
23 | run_test notesandrests_barlines -i notesandrests barlines metadata -x metadata
24 | run_test notesandrests_barlines -i notesandrests barlines
25 | run_test notesandrests_directions -i notesandrests barlines directions -x barlines
26 | run_test notesandrests_barlines_directions -i notesandrests barlines directions
27 | run_test notesandrests_articulations -i notesandrests articulations
28 | run_test notesandrests_articulations_ornaments -i notesandrests articulations ornaments
29 | run_test decoratednotesandrests_no_ties_beams_slurs --include notesandrests articulations ornaments tremolos
30 |
31 |
32 | # test all the simple decorated notes includes (without excludes)
33 | run_test notesandrests --include notesandrests
34 | # repeat with ser
35 | run_test notesandrests_secr secr --include notesandrests
36 |
37 | # simple includes (notesandrests barlines) + combo include (otherobjects), then exclude
38 | # otherobjects (which removes barlines, too), leaving notesandrests
39 | run_test notesandrests -i notesandrests barlines otherobjects style -x style otherobjects
40 |
41 | # combo include: decoratednotesandrests (with various excludes)
42 | run_test decoratednotesandrests --include decoratednotesandrests
43 | run_test decoratednotesandrests_no_ties --include decoratednotesandrests --exclude ties
44 | run_test decoratednotesandrests_no_ties_beams --include decoratednotesandrests --exclude beams ties
45 | run_test decoratednotesandrests_no_ties_beams_slurs --include decoratednotesandrests --exclude beams ties slurs
46 | run_test notesandrests_articulations_ornaments --include decoratednotesandrests --exclude beams ties slurs tremolos
47 | run_test notesandrests_articulations --include decoratednotesandrests --exclude beams ties slurs tremolos ornaments
48 | # excluding all the decorations leaves only notesandrests
49 | run_test notesandrests --include decoratednotesandrests --exclude beams ties slurs tremolos ornaments articulations
50 |
51 | # voicing adds a bunch of chord and voice diffs
52 | run_test decoratednotesandrests_voicing --include decoratednotesandrests voicing
53 |
54 | # Check interactions of voicing and lyrics. voicing (or not) should not affect lyrics diffs.
55 | # Lack of notes should not affect lyrics diffs, either.
56 | run_test lyrics --include lyrics
57 | run_test lyrics --include voicing lyrics
58 |
59 | # OtherObjects only
60 | run_test otherobjects -i otherobjects
61 | run_test otherobjects_style -i otherobjects style
62 |
63 | run_test allobjects -i otherobjects decoratednotesandrests
64 | run_test allobjects_style -i otherobjects decoratednotesandrests style
65 | run_test allobjects_style_no_lyrics -i otherobjects decoratednotesandrests style --exclude lyrics
66 | run_test allobjects -i allobjects
67 | run_test allobjects_style -i style allobjects
68 |
69 | run_test allobjects_no_lyrics -i otherobjects decoratednotesandrests -x lyrics
70 | run_test allobjects_no_lyrics_barlines -i otherobjects decoratednotesandrests -x lyrics barlines
71 |
72 | run_test metadata --include metadata
73 |
74 | run_test allobjects_style_metadata -i metadata style allobjects
75 | run_test allobjects_style_metadata_secr secr -i metadata style allobjects
76 |
77 |
78 | print Total failures: ${fails}
79 | exit ${fails}
80 |
--------------------------------------------------------------------------------
/tests/test_ml_training_evaluation.sh:
--------------------------------------------------------------------------------
1 | #!/bin/zsh
2 | python -m musicdiff -i allobjects style metadata --ml_training_evaluation --ground_truth_folder ~/Documents/test/greg_results/gt --predicted_folder ~/Documents/test/greg_results/pred --output_folder .
3 |
4 | bbdiff ./output.csv ./best_output.csv
5 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_allobjects.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 | @@ measure 1, staff 1, beat 1.0 @@
6 | -(Lyric) "lyric2", num=2
7 | @@ measure 1, staff 1, beat 1.0 @@
8 | -(Lyric) "lyric1", num=1
9 | @@ measure 2, staff 1, beat 2.5 @@
10 | -(Note:tie) C4 (eighth note), tied
11 | +(Note:tie) C4 (eighth note), not tied
12 | @@ measure 2, staff 1, beat 2.5 @@
13 | -(Dynamic) mp
14 | @@ measure 2, staff 1, beat 3.0 @@
15 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
16 | +(Note:flagsbeams) C4 (eighth note), 1 flag
17 | @@ measure 2, staff 1, beat 3.5 @@
18 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
19 | +(Note:flagsbeams) A3 (eighth note), 1 flag
20 | @@ measure 2, staff 1, beat 5.0 @@
21 | -(Barline:symbolic) final
22 | +(Barline:symbolic) double
23 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_allobjects_no_lyrics.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 | @@ measure 2, staff 1, beat 2.5 @@
6 | -(Note:tie) C4 (eighth note), tied
7 | +(Note:tie) C4 (eighth note), not tied
8 | @@ measure 2, staff 1, beat 2.5 @@
9 | -(Dynamic) mp
10 | @@ measure 2, staff 1, beat 3.0 @@
11 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
12 | +(Note:flagsbeams) C4 (eighth note), 1 flag
13 | @@ measure 2, staff 1, beat 3.5 @@
14 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
15 | +(Note:flagsbeams) A3 (eighth note), 1 flag
16 | @@ measure 2, staff 1, beat 5.0 @@
17 | -(Barline:symbolic) final
18 | +(Barline:symbolic) double
19 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_allobjects_no_lyrics_barlines.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 | @@ measure 2, staff 1, beat 2.5 @@
6 | -(Note:tie) C4 (eighth note), tied
7 | +(Note:tie) C4 (eighth note), not tied
8 | @@ measure 2, staff 1, beat 2.5 @@
9 | -(Dynamic) mp
10 | @@ measure 2, staff 1, beat 3.0 @@
11 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
12 | +(Note:flagsbeams) C4 (eighth note), 1 flag
13 | @@ measure 2, staff 1, beat 3.5 @@
14 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
15 | +(Note:flagsbeams) A3 (eighth note), 1 flag
16 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_allobjects_style.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 | @@ measure 1, staff 1, beat 1.0 @@
6 | -(Dynamic:placement) p changedStyle={placement:below}
7 | +(Dynamic:placement) p changedStyle={placement:above}
8 | @@ measure 1, staff 1, beat 1.0 @@
9 | -(Lyric) "lyric2", num=2
10 | @@ measure 1, staff 1, beat 1.0 @@
11 | -(Lyric) "lyric1", num=1
12 | @@ measure 2, staff 1, beat 1.0 @@
13 | -(Note:stemdir) G3 (eighth note), stemDirection=down
14 | +(Note:stemdir) G3 (eighth note), stemDirection=up
15 | @@ measure 2, staff 1, beat 1.5 @@
16 | -(Note:stemdir) A3 (eighth note), stemDirection=down
17 | +(Note:stemdir) A3 (eighth note), stemDirection=up
18 | @@ measure 2, staff 1, beat 2.0 @@
19 | -(Note:stemdir) B3 (eighth note), stemDirection=down
20 | +(Note:stemdir) B3 (eighth note), stemDirection=up
21 | @@ measure 2, staff 1, beat 2.5 @@
22 | -(Note:tie) C4 (eighth note), tied
23 | +(Note:tie) C4 (eighth note), not tied
24 | @@ measure 2, staff 1, beat 2.5 @@
25 | -(Note:stemdir) C4 (eighth note), stemDirection=down
26 | +(Note:stemdir) C4 (eighth note), stemDirection=up
27 | @@ measure 2, staff 1, beat 2.5 @@
28 | -(Dynamic) mp
29 | @@ measure 2, staff 1, beat 3.0 @@
30 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
31 | +(Note:flagsbeams) C4 (eighth note), 1 flag
32 | @@ measure 2, staff 1, beat 3.0 @@
33 | -(Note:stemdir) C4 (eighth note), stemDirection=down
34 | +(Note:stemdir) C4 (eighth note), stemDirection=up
35 | @@ measure 2, staff 1, beat 3.5 @@
36 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
37 | +(Note:flagsbeams) A3 (eighth note), 1 flag
38 | @@ measure 2, staff 1, beat 3.5 @@
39 | -(Note:stemdir) A3 (eighth note), stemDirection=down
40 | +(Note:stemdir) A3 (eighth note), stemDirection=up
41 | @@ measure 2, staff 1, beat 4.0 @@
42 | -(Note:stemdir) G3 (eighth note), stemDirection=down
43 | +(Note:stemdir) G3 (eighth note), stemDirection=up
44 | @@ measure 2, staff 1, beat 5.0 @@
45 | -(Barline:symbolic) final
46 | +(Barline:symbolic) double
47 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_allobjects_style_metadata.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 0, staff 0, beat 0.0 @@
4 | -(metadata:value) title:Test file 1a for command line detail options(language=None)
5 | +(metadata:value) title:Test file 1b for command line detail options(language=None)
6 | @@ measure 1, staff 1, beat 1.0 @@
7 | +(Slur) dur=7.5
8 | @@ measure 1, staff 1, beat 1.0 @@
9 | -(Dynamic:placement) p changedStyle={placement:below}
10 | +(Dynamic:placement) p changedStyle={placement:above}
11 | @@ measure 1, staff 1, beat 1.0 @@
12 | -(Lyric) "lyric2", num=2
13 | @@ measure 1, staff 1, beat 1.0 @@
14 | -(Lyric) "lyric1", num=1
15 | @@ measure 2, staff 1, beat 1.0 @@
16 | -(Note:stemdir) G3 (eighth note), stemDirection=down
17 | +(Note:stemdir) G3 (eighth note), stemDirection=up
18 | @@ measure 2, staff 1, beat 1.5 @@
19 | -(Note:stemdir) A3 (eighth note), stemDirection=down
20 | +(Note:stemdir) A3 (eighth note), stemDirection=up
21 | @@ measure 2, staff 1, beat 2.0 @@
22 | -(Note:stemdir) B3 (eighth note), stemDirection=down
23 | +(Note:stemdir) B3 (eighth note), stemDirection=up
24 | @@ measure 2, staff 1, beat 2.5 @@
25 | -(Note:tie) C4 (eighth note), tied
26 | +(Note:tie) C4 (eighth note), not tied
27 | @@ measure 2, staff 1, beat 2.5 @@
28 | -(Note:stemdir) C4 (eighth note), stemDirection=down
29 | +(Note:stemdir) C4 (eighth note), stemDirection=up
30 | @@ measure 2, staff 1, beat 2.5 @@
31 | -(Dynamic) mp
32 | @@ measure 2, staff 1, beat 3.0 @@
33 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
34 | +(Note:flagsbeams) C4 (eighth note), 1 flag
35 | @@ measure 2, staff 1, beat 3.0 @@
36 | -(Note:stemdir) C4 (eighth note), stemDirection=down
37 | +(Note:stemdir) C4 (eighth note), stemDirection=up
38 | @@ measure 2, staff 1, beat 3.5 @@
39 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
40 | +(Note:flagsbeams) A3 (eighth note), 1 flag
41 | @@ measure 2, staff 1, beat 3.5 @@
42 | -(Note:stemdir) A3 (eighth note), stemDirection=down
43 | +(Note:stemdir) A3 (eighth note), stemDirection=up
44 | @@ measure 2, staff 1, beat 4.0 @@
45 | -(Note:stemdir) G3 (eighth note), stemDirection=down
46 | +(Note:stemdir) G3 (eighth note), stemDirection=up
47 | @@ measure 2, staff 1, beat 5.0 @@
48 | -(Barline:symbolic) final
49 | +(Barline:symbolic) double
50 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_allobjects_style_metadata_secr.txt:
--------------------------------------------------------------------------------
1 | {
2 | "symbolEditCost": "39",
3 | "numSymbolsInPredicted": "143",
4 | "numSymbolsInGroundTruth": "126",
5 | "numSymbolsInBoth": "269",
6 | "SECR": "0.1449814126394052"
7 | }
8 |
9 | --- tests/test_scores/test_all_details_1a.mei
10 | +++ tests/test_scores/test_all_details_1b.mei
11 | @@ measure 0, staff 0, beat 0.0 @@
12 | -(metadata:value) title:Test file 1a for command line detail options(language=None)
13 | +(metadata:value) title:Test file 1b for command line detail options(language=None)
14 | @@ measure 1, staff 1, beat 1.0 @@
15 | +(Slur) dur=7.5
16 | @@ measure 1, staff 1, beat 1.0 @@
17 | -(Dynamic:placement) p changedStyle={placement:below}
18 | +(Dynamic:placement) p changedStyle={placement:above}
19 | @@ measure 1, staff 1, beat 1.0 @@
20 | -(Lyric) "lyric2", num=2
21 | @@ measure 1, staff 1, beat 1.0 @@
22 | -(Lyric) "lyric1", num=1
23 | @@ measure 2, staff 1, beat 1.0 @@
24 | -(Note:stemdir) G3 (eighth note), stemDirection=down
25 | +(Note:stemdir) G3 (eighth note), stemDirection=up
26 | @@ measure 2, staff 1, beat 1.5 @@
27 | -(Note:stemdir) A3 (eighth note), stemDirection=down
28 | +(Note:stemdir) A3 (eighth note), stemDirection=up
29 | @@ measure 2, staff 1, beat 2.0 @@
30 | -(Note:stemdir) B3 (eighth note), stemDirection=down
31 | +(Note:stemdir) B3 (eighth note), stemDirection=up
32 | @@ measure 2, staff 1, beat 2.5 @@
33 | -(Note:tie) C4 (eighth note), tied
34 | +(Note:tie) C4 (eighth note), not tied
35 | @@ measure 2, staff 1, beat 2.5 @@
36 | -(Note:stemdir) C4 (eighth note), stemDirection=down
37 | +(Note:stemdir) C4 (eighth note), stemDirection=up
38 | @@ measure 2, staff 1, beat 2.5 @@
39 | -(Dynamic) mp
40 | @@ measure 2, staff 1, beat 3.0 @@
41 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
42 | +(Note:flagsbeams) C4 (eighth note), 1 flag
43 | @@ measure 2, staff 1, beat 3.0 @@
44 | -(Note:stemdir) C4 (eighth note), stemDirection=down
45 | +(Note:stemdir) C4 (eighth note), stemDirection=up
46 | @@ measure 2, staff 1, beat 3.5 @@
47 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
48 | +(Note:flagsbeams) A3 (eighth note), 1 flag
49 | @@ measure 2, staff 1, beat 3.5 @@
50 | -(Note:stemdir) A3 (eighth note), stemDirection=down
51 | +(Note:stemdir) A3 (eighth note), stemDirection=up
52 | @@ measure 2, staff 1, beat 4.0 @@
53 | -(Note:stemdir) G3 (eighth note), stemDirection=down
54 | +(Note:stemdir) G3 (eighth note), stemDirection=up
55 | @@ measure 2, staff 1, beat 5.0 @@
56 | -(Barline:symbolic) final
57 | +(Barline:symbolic) double
58 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_allobjects_style_no_lyrics.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 | @@ measure 1, staff 1, beat 1.0 @@
6 | -(Dynamic:placement) p changedStyle={placement:below}
7 | +(Dynamic:placement) p changedStyle={placement:above}
8 | @@ measure 2, staff 1, beat 1.0 @@
9 | -(Note:stemdir) G3 (eighth note), stemDirection=down
10 | +(Note:stemdir) G3 (eighth note), stemDirection=up
11 | @@ measure 2, staff 1, beat 1.5 @@
12 | -(Note:stemdir) A3 (eighth note), stemDirection=down
13 | +(Note:stemdir) A3 (eighth note), stemDirection=up
14 | @@ measure 2, staff 1, beat 2.0 @@
15 | -(Note:stemdir) B3 (eighth note), stemDirection=down
16 | +(Note:stemdir) B3 (eighth note), stemDirection=up
17 | @@ measure 2, staff 1, beat 2.5 @@
18 | -(Note:tie) C4 (eighth note), tied
19 | +(Note:tie) C4 (eighth note), not tied
20 | @@ measure 2, staff 1, beat 2.5 @@
21 | -(Note:stemdir) C4 (eighth note), stemDirection=down
22 | +(Note:stemdir) C4 (eighth note), stemDirection=up
23 | @@ measure 2, staff 1, beat 2.5 @@
24 | -(Dynamic) mp
25 | @@ measure 2, staff 1, beat 3.0 @@
26 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
27 | +(Note:flagsbeams) C4 (eighth note), 1 flag
28 | @@ measure 2, staff 1, beat 3.0 @@
29 | -(Note:stemdir) C4 (eighth note), stemDirection=down
30 | +(Note:stemdir) C4 (eighth note), stemDirection=up
31 | @@ measure 2, staff 1, beat 3.5 @@
32 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
33 | +(Note:flagsbeams) A3 (eighth note), 1 flag
34 | @@ measure 2, staff 1, beat 3.5 @@
35 | -(Note:stemdir) A3 (eighth note), stemDirection=down
36 | +(Note:stemdir) A3 (eighth note), stemDirection=up
37 | @@ measure 2, staff 1, beat 4.0 @@
38 | -(Note:stemdir) G3 (eighth note), stemDirection=down
39 | +(Note:stemdir) G3 (eighth note), stemDirection=up
40 | @@ measure 2, staff 1, beat 5.0 @@
41 | -(Barline:symbolic) final
42 | +(Barline:symbolic) double
43 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_decoratednotesandrests.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 | @@ measure 2, staff 1, beat 2.5 @@
6 | -(Note:tie) C4 (eighth note), tied
7 | +(Note:tie) C4 (eighth note), not tied
8 | @@ measure 2, staff 1, beat 3.0 @@
9 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
10 | +(Note:flagsbeams) C4 (eighth note), 1 flag
11 | @@ measure 2, staff 1, beat 3.5 @@
12 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
13 | +(Note:flagsbeams) A3 (eighth note), 1 flag
14 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_decoratednotesandrests_no_ties.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 | @@ measure 2, staff 1, beat 3.0 @@
6 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
7 | +(Note:flagsbeams) C4 (eighth note), 1 flag
8 | @@ measure 2, staff 1, beat 3.5 @@
9 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
10 | +(Note:flagsbeams) A3 (eighth note), 1 flag
11 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_decoratednotesandrests_no_ties_beams.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | +(Slur) dur=7.5
5 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_decoratednotesandrests_no_ties_beams_slurs.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gregchapman-dev/musicdiff/c770d3750113e222e8b6ad6de1d8b5f2c4ae47ed/tests/test_results/cmd_line_results_decoratednotesandrests_no_ties_beams_slurs.txt
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_decoratednotesandrests_voicing.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | -(voice) [G5 (half note),F5 (half note)]
5 | @@ measure 1, staff 1, beat 1.0 @@
6 | +(Note:pitch) [G4,B4] (quarter chord), pitch[1]=B4
7 | @@ measure 1, staff 1, beat 1.0 @@
8 | -(voice) [B4 (quarter note),G4 (quarter note),D5 (quarter note),B4 (quarter note)]
9 | @@ measure 1, staff 1, beat 1.0 @@
10 | +(Slur) dur=7.5
11 | @@ measure 1, staff 1, beat 2.0 @@
12 | +(Note:pitch) [E4,G4] (quarter chord), pitch[1]=G4
13 | @@ measure 1, staff 1, beat 3.0 @@
14 | +(Note:pitch) [G4,D5] (quarter chord), pitch[1]=D5
15 | @@ measure 1, staff 1, beat 4.0 @@
16 | +(Note:pitch) [E4,B4] (quarter chord), pitch[1]=B4
17 | @@ measure 2, staff 1, beat 1.0 @@
18 | +(Note:pitch) [C5,G5] (half chord), pitch[1]=G5
19 | @@ measure 2, staff 1, beat 2.5 @@
20 | -(Note:tie) C4 (eighth note), tied
21 | +(Note:tie) C4 (eighth note), not tied
22 | @@ measure 2, staff 1, beat 3.0 @@
23 | -(Note:flagsbeams) C4 (eighth note), 1 beam=start
24 | +(Note:flagsbeams) C4 (eighth note), 1 flag
25 | @@ measure 2, staff 1, beat 3.0 @@
26 | +(Note:pitch) [D5,F5] (half chord), pitch[1]=F5
27 | @@ measure 2, staff 1, beat 3.5 @@
28 | -(Note:flagsbeams) A3 (eighth note), 1 beam=stop
29 | +(Note:flagsbeams) A3 (eighth note), 1 flag
30 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_lyrics.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | -(measure) measure 1
5 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_metadata.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 0, staff 0, beat 0.0 @@
4 | -(metadata:value) title:Test file 1a for command line detail options(language=None)
5 | +(metadata:value) title:Test file 1b for command line detail options(language=None)
6 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_notesandrests.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gregchapman-dev/musicdiff/c770d3750113e222e8b6ad6de1d8b5f2c4ae47ed/tests/test_results/cmd_line_results_notesandrests.txt
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_notesandrests_articulations.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gregchapman-dev/musicdiff/c770d3750113e222e8b6ad6de1d8b5f2c4ae47ed/tests/test_results/cmd_line_results_notesandrests_articulations.txt
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_notesandrests_articulations_ornaments.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gregchapman-dev/musicdiff/c770d3750113e222e8b6ad6de1d8b5f2c4ae47ed/tests/test_results/cmd_line_results_notesandrests_articulations_ornaments.txt
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_notesandrests_barlines.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 2, staff 1, beat 5.0 @@
4 | -(Barline:symbolic) final
5 | +(Barline:symbolic) double
6 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_notesandrests_barlines_directions.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 2, staff 1, beat 2.5 @@
4 | -(Dynamic) mp
5 | @@ measure 2, staff 1, beat 5.0 @@
6 | -(Barline:symbolic) final
7 | +(Barline:symbolic) double
8 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_notesandrests_directions.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 2, staff 1, beat 2.5 @@
4 | -(Dynamic) mp
5 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_notesandrests_secr.txt:
--------------------------------------------------------------------------------
1 | {
2 | "symbolEditCost": "0",
3 | "numSymbolsInPredicted": "47",
4 | "numSymbolsInGroundTruth": "47",
5 | "numSymbolsInBoth": "94",
6 | "SECR": "0.0"
7 | }
8 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_otherobjects.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | -(Lyric) "lyric2", num=2
5 | @@ measure 1, staff 1, beat 1.0 @@
6 | -(Lyric) "lyric1", num=1
7 | @@ measure 2, staff 1, beat 1.0 @@
8 | +(measure) measure 2
9 | @@ measure 2, staff 1, beat 1.0 @@
10 | -(measure) measure 2
11 |
--------------------------------------------------------------------------------
/tests/test_results/cmd_line_results_otherobjects_style.txt:
--------------------------------------------------------------------------------
1 | --- tests/test_scores/test_all_details_1a.mei
2 | +++ tests/test_scores/test_all_details_1b.mei
3 | @@ measure 1, staff 1, beat 1.0 @@
4 | -(Dynamic:placement) p changedStyle={placement:below}
5 | +(Dynamic:placement) p changedStyle={placement:above}
6 | @@ measure 1, staff 1, beat 1.0 @@
7 | -(Lyric) "lyric2", num=2
8 | @@ measure 1, staff 1, beat 1.0 @@
9 | -(Lyric) "lyric1", num=1
10 | @@ measure 2, staff 1, beat 1.0 @@
11 | +(measure) measure 2
12 | @@ measure 2, staff 1, beat 1.0 @@
13 | -(measure) measure 2
14 |
--------------------------------------------------------------------------------
/tests/test_score_visualization.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 |
3 | import music21 as m21
4 | import converter21
5 |
6 | from musicdiff.annotation import AnnScore
7 | from musicdiff import Comparison
8 | from musicdiff import Visualization
9 |
10 | class TestScoreVisualization:
11 | converter21.register()
12 |
13 | def test_scorevis1(self):
14 | score1_path = Path("tests/test_scores/tie_score_2a.mei")
15 | score1 = m21.converter.parse(str(score1_path))
16 | score2_path = Path("tests/test_scores/tie_score_2b.mei")
17 | score2 = m21.converter.parse(str(score2_path))
18 | # build ScoreTrees
19 | score_lin1 = AnnScore(score1)
20 | score_lin2 = AnnScore(score2)
21 | # compute the complete score diff
22 | op_list, _ = Comparison.annotated_scores_diff(score_lin1, score_lin2)
23 | Visualization.mark_diffs(score1, score2, op_list)
24 | # Visualization.show_diffs(score1, score2)
25 |
26 |
27 | def test_scorevis2(self):
28 | score1_path = Path("tests/test_scores/polyphonic_score_2a.mei")
29 | score1 = m21.converter.parse(str(score1_path))
30 | score2_path = Path("tests/test_scores/polyphonic_score_2b.mei")
31 | score2 = m21.converter.parse(str(score2_path))
32 | # build ScoreTrees
33 | score_lin1 = AnnScore(score1)
34 | score_lin2 = AnnScore(score2)
35 | # compute the complete score diff
36 | op_list, _ = Comparison.annotated_scores_diff(score_lin1, score_lin2)
37 | Visualization.mark_diffs(score1, score2, op_list)
38 | # Visualization.show_diffs(score1, score2)
39 |
40 |
41 | def test_scorevis3(self):
42 | score1_path = Path("tests/test_scores/musicxml/articulation_score_1a.xml")
43 | score1 = m21.converter.parse(str(score1_path))
44 | score2_path = Path("tests/test_scores/musicxml/articulation_score_1b.xml")
45 | score2 = m21.converter.parse(str(score2_path))
46 | # build ScoreTrees
47 | score_lin1 = AnnScore(score1)
48 | score_lin2 = AnnScore(score2)
49 | # compute the complete score diff
50 | op_list, _ = Comparison.annotated_scores_diff(score_lin1, score_lin2)
51 | Visualization.mark_diffs(score1, score2, op_list)
52 | # Visualization.show_diffs(score1, score2)
53 |
54 |
--------------------------------------------------------------------------------
/tests/test_scores/chord_score_1a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-11 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 1.1 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-11
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/tests/test_scores/chord_score_1b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-11 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 1.1 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-11
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/tests/test_scores/chord_score_2a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-20 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-20
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/tests/test_scores/chord_score_2b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-20 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-20
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/tests/test_scores/chord_score_3a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-20 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-20
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/tests/test_scores/chord_score_3b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-20 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-20
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/tests/test_scores/multivoice_score_1a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-18 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 1.1 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-19
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/tests/test_scores/multivoice_score_1b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-19 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 1.1 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-19
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/articulation_score_1b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2021-05-19
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.2319
19 | 40
20 |
21 |
22 | 1545
23 | 1194
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 | 80
72 | 0
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | 70
83 | 0
84 |
85 | 211
86 |
87 | system
88 |
89 |
90 | 2
91 |
92 | 0
93 | major
94 |
95 |
96 | 4
97 | 4
98 |
99 |
100 | G
101 | 2
102 |
103 |
104 |
105 |
106 |
107 | C
108 | 4
109 |
110 | 2
111 | 1
112 | quarter
113 | up
114 |
115 |
116 |
117 | E
118 | 4
119 |
120 | 2
121 | 1
122 | quarter
123 | up
124 |
125 |
126 |
127 | G
128 | 4
129 |
130 | 2
131 | 1
132 | quarter
133 | up
134 |
135 |
136 |
137 | F
138 | 4
139 |
140 | 1
141 | 1
142 | eighth
143 | up
144 | begin
145 |
146 |
147 |
148 | E
149 | 4
150 |
151 | 1
152 | 1
153 | eighth
154 | up
155 | end
156 |
157 |
158 |
159 |
160 |
161 |
162 | D
163 | 4
164 |
165 | 1
166 | 1
167 | eighth
168 | up
169 | begin
170 |
171 |
172 |
173 | E
174 | 4
175 |
176 | 1
177 | 1
178 | eighth
179 | up
180 | end
181 |
182 |
183 |
184 | F
185 | 4
186 |
187 | 4
188 | 1
189 | half
190 | up
191 |
192 |
193 |
194 | G
195 | 4
196 |
197 | 2
198 | 1
199 | quarter
200 | up
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 | light-heavy
209 |
210 |
211 |
212 |
213 |
214 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/chord_score_1a.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-11
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 7.2319
17 | 40
18 |
19 |
20 | 1545
21 | 1194
22 |
23 | 70
24 | 70
25 | 88
26 | 88
27 |
28 |
29 |
30 |
31 | 0
32 | 0
33 |
34 | 121
35 | 70
36 |
37 |
38 |
39 |
40 |
41 | Score
42 |
43 |
44 |
45 | MusicXML Part
46 |
47 | SmartMusic SoftSynth 1
48 |
49 |
50 | 1
51 | 15489
52 | 1
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 70
63 | 0
64 |
65 | 211
66 |
67 |
68 |
69 | 2
70 |
71 | 0
72 | major
73 |
74 |
75 | 4
76 | 4
77 |
78 |
79 | G
80 | 2
81 |
82 |
83 |
84 |
85 |
86 | C
87 | 4
88 |
89 | 2
90 | 1
91 | quarter
92 | up
93 |
94 |
95 |
96 |
97 | E
98 | 4
99 |
100 | 2
101 | 1
102 | quarter
103 | up
104 |
105 |
106 |
107 | D
108 | 4
109 |
110 | 2
111 | 1
112 | quarter
113 | up
114 |
115 |
116 |
117 |
118 | F
119 | 4
120 |
121 | 2
122 | 1
123 | quarter
124 | up
125 |
126 |
127 |
128 | G
129 | 4
130 |
131 | 1
132 | 1
133 | eighth
134 | up
135 | begin
136 |
137 |
138 |
139 | F
140 | 4
141 |
142 | 1
143 | 1
144 | eighth
145 | up
146 | continue
147 |
148 |
149 |
150 | 1
151 | 1
152 | eighth
153 |
154 |
155 |
156 | B
157 | 3
158 |
159 | 1
160 | 1
161 | eighth
162 | up
163 | end
164 |
165 |
166 |
167 |
168 | E
169 | 4
170 |
171 | 1
172 | 1
173 | eighth
174 | up
175 |
176 |
177 |
178 |
179 | G
180 | 4
181 |
182 | 1
183 | 1
184 | eighth
185 | up
186 |
187 |
188 | light-heavy
189 |
190 |
191 |
192 |
193 |
194 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/chord_score_1b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-11
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 7.2319
17 | 40
18 |
19 |
20 | 1545
21 | 1194
22 |
23 | 70
24 | 70
25 | 88
26 | 88
27 |
28 |
29 |
30 |
31 | 0
32 | 0
33 |
34 | 121
35 | 70
36 |
37 |
38 |
39 |
40 |
41 | Score
42 |
43 |
44 |
45 | MusicXML Part
46 |
47 | SmartMusic SoftSynth 1
48 |
49 |
50 | 1
51 | 15489
52 | 1
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 70
63 | 0
64 |
65 | 211
66 |
67 |
68 |
69 | 2
70 |
71 | 0
72 | major
73 |
74 |
75 | 4
76 | 4
77 |
78 |
79 | G
80 | 2
81 |
82 |
83 |
84 |
85 |
86 | C
87 | 4
88 |
89 | 2
90 | 1
91 | quarter
92 | up
93 |
94 |
95 |
96 |
97 | E
98 | 4
99 |
100 | 2
101 | 1
102 | quarter
103 | up
104 |
105 |
106 |
107 | D
108 | 4
109 |
110 | 2
111 | 1
112 | quarter
113 | up
114 |
115 |
116 |
117 |
118 | G
119 | 4
120 |
121 | 2
122 | 1
123 | quarter
124 | up
125 |
126 |
127 |
128 | G
129 | 4
130 |
131 | 1
132 | 1
133 | eighth
134 | up
135 | begin
136 |
137 |
138 |
139 | F
140 | 4
141 |
142 | 1
143 | 1
144 | eighth
145 | up
146 | continue
147 |
148 |
149 |
150 | 1
151 | 1
152 | eighth
153 |
154 |
155 |
156 | B
157 | 3
158 |
159 | 1
160 | 1
161 | eighth
162 | up
163 | end
164 |
165 |
166 |
167 |
168 | G
169 | 4
170 |
171 | 1
172 | 1
173 | eighth
174 | up
175 |
176 |
177 | light-heavy
178 |
179 |
180 |
181 |
182 |
183 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/chord_score_2a.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-20
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.1967
19 | 40
20 |
21 |
22 | 1553
23 | 1200
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | 70
81 | 0
82 |
83 | 211
84 |
85 | system
86 |
87 |
88 | 2
89 |
90 | 0
91 | major
92 |
93 |
94 | 4
95 | 4
96 |
97 |
98 | G
99 | 2
100 |
101 |
102 |
103 |
104 |
105 | C
106 | 4
107 |
108 | 2
109 | 1
110 | quarter
111 | up
112 |
113 |
114 |
115 |
116 | E
117 | 4
118 |
119 | 2
120 | 1
121 | quarter
122 | up
123 |
124 |
125 |
126 | D
127 | 4
128 |
129 | 2
130 | 1
131 | quarter
132 | up
133 |
134 |
135 |
136 |
137 | F
138 | 4
139 |
140 | 2
141 | 1
142 | quarter
143 | up
144 |
145 |
146 |
147 | G
148 | 4
149 |
150 | 1
151 | 1
152 | eighth
153 | up
154 | begin
155 |
156 |
157 |
158 | F
159 | 4
160 |
161 | 1
162 | 1
163 | eighth
164 | up
165 | continue
166 |
167 |
168 |
169 | 1
170 | 1
171 | eighth
172 |
173 |
174 |
175 | B
176 | -1
177 | 3
178 |
179 | 1
180 | 1
181 | eighth
182 | flat
183 | up
184 | end
185 |
186 |
187 |
188 |
189 | E
190 | 4
191 |
192 | 1
193 | 1
194 | eighth
195 | up
196 |
197 |
198 |
199 |
200 | G
201 | 4
202 |
203 | 1
204 | 1
205 | eighth
206 | up
207 |
208 |
209 | light-heavy
210 |
211 |
212 |
213 |
214 |
215 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/chord_score_2b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-20
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.1967
19 | 40
20 |
21 |
22 | 1553
23 | 1200
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | 70
81 | 0
82 |
83 | 211
84 |
85 | system
86 |
87 |
88 | 2
89 |
90 | 0
91 | major
92 |
93 |
94 | 4
95 | 4
96 |
97 |
98 | G
99 | 2
100 |
101 |
102 |
103 |
104 |
105 | C
106 | 1
107 | 4
108 |
109 | 2
110 | 1
111 | quarter
112 | sharp
113 | up
114 |
115 |
116 |
117 |
118 | E
119 | 4
120 |
121 | 2
122 | 1
123 | quarter
124 | up
125 |
126 |
127 |
128 | D
129 | 4
130 |
131 | 2
132 | 1
133 | quarter
134 | up
135 |
136 |
137 |
138 |
139 | G
140 | 4
141 |
142 | 2
143 | 1
144 | quarter
145 | up
146 |
147 |
148 |
149 | G
150 | 4
151 |
152 | 1
153 | 1
154 | eighth
155 | up
156 | begin
157 |
158 |
159 |
160 | F
161 | 4
162 |
163 | 1
164 | 1
165 | eighth
166 | up
167 | continue
168 |
169 |
170 |
171 | 1
172 | 1
173 | eighth
174 |
175 |
176 |
177 | B
178 | 3
179 |
180 | 1
181 | 1
182 | eighth
183 | up
184 | end
185 |
186 |
187 |
188 |
189 | G
190 | 4
191 |
192 | 1
193 | 1
194 | eighth
195 | up
196 |
197 |
198 | light-heavy
199 |
200 |
201 |
202 |
203 |
204 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/chord_score_3a.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-20
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.1967
19 | 40
20 |
21 |
22 | 1553
23 | 1200
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | 70
81 | 0
82 |
83 | 211
84 |
85 | system
86 |
87 |
88 | 32
89 |
90 | 0
91 | major
92 |
93 |
94 | 4
95 | 4
96 |
97 |
98 | G
99 | 2
100 |
101 |
102 |
103 |
104 |
105 | C
106 | 4
107 |
108 | 32
109 | 1
110 | quarter
111 | up
112 |
113 |
114 |
115 |
116 | E
117 | 4
118 |
119 | 32
120 | 1
121 | quarter
122 | up
123 |
124 |
125 |
126 | D
127 | 4
128 |
129 | 32
130 | 1
131 | quarter
132 | up
133 |
134 |
135 |
136 |
137 | F
138 | 4
139 |
140 | 32
141 | 1
142 | quarter
143 | up
144 |
145 |
146 |
147 | G
148 | 4
149 |
150 | 16
151 | 1
152 | eighth
153 | up
154 | begin
155 |
156 |
157 |
158 | F
159 | 4
160 |
161 | 16
162 | 1
163 | eighth
164 | up
165 | end
166 |
167 |
168 |
169 | 16
170 | 1
171 | eighth
172 |
173 |
174 |
175 | B
176 | -1
177 | 3
178 |
179 | 7
180 | 1
181 | 32nd
182 |
183 |
184 | flat
185 | up
186 |
187 |
188 |
189 |
190 | E
191 | 4
192 |
193 | 7
194 | 1
195 | 32nd
196 |
197 |
198 | up
199 |
200 |
201 |
202 |
203 | G
204 | 4
205 |
206 | 7
207 | 1
208 | 32nd
209 |
210 |
211 | up
212 |
213 |
214 |
215 | 1
216 | 1
217 | 128th
218 |
219 |
220 |
221 | 8
222 | 1
223 | 16th
224 |
225 |
226 | light-heavy
227 |
228 |
229 |
230 |
231 |
232 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/chord_score_3b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-20
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.1967
19 | 40
20 |
21 |
22 | 1553
23 | 1200
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | 70
81 | 0
82 |
83 | 211
84 |
85 | system
86 |
87 |
88 | 2
89 |
90 | 0
91 | major
92 |
93 |
94 | 4
95 | 4
96 |
97 |
98 | G
99 | 2
100 |
101 |
102 |
103 |
104 |
105 | C
106 | 1
107 | 4
108 |
109 | 2
110 | 1
111 | quarter
112 | sharp
113 | up
114 |
115 |
116 |
117 |
118 | E
119 | 4
120 |
121 | 2
122 | 1
123 | quarter
124 | up
125 |
126 |
127 |
128 | D
129 | 4
130 |
131 | 3
132 | 1
133 | quarter
134 |
135 | up
136 |
137 |
138 |
139 |
140 | G
141 | 4
142 |
143 | 3
144 | 1
145 | quarter
146 |
147 | up
148 |
149 |
150 |
151 | F
152 | 4
153 |
154 | 1
155 | 1
156 | eighth
157 | up
158 |
159 |
160 |
161 | 1
162 | 1
163 | eighth
164 |
165 |
166 |
167 | B
168 | 3
169 |
170 | 1
171 | 1
172 | eighth
173 | up
174 |
175 |
176 |
177 |
178 | G
179 | 4
180 |
181 | 1
182 | 1
183 | eighth
184 | up
185 |
186 |
187 | light-heavy
188 |
189 |
190 |
191 |
192 |
193 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/multivoice_score_1a.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-18
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 7.2319
17 | 40
18 |
19 |
20 | 1545
21 | 1194
22 |
23 | 70
24 | 70
25 | 88
26 | 88
27 |
28 |
29 |
30 |
31 | 0
32 | 0
33 |
34 | 121
35 | 70
36 |
37 |
38 |
39 |
40 |
41 | Score
42 |
43 |
44 |
45 | MusicXML Part
46 |
47 | SmartMusic SoftSynth 1
48 |
49 |
50 | 1
51 | 15489
52 | 1
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 70
63 | 0
64 |
65 | 211
66 |
67 |
68 |
69 | 2
70 |
71 | 0
72 | major
73 |
74 |
75 | 4
76 | 4
77 |
78 |
79 | G
80 | 2
81 |
82 |
83 |
84 |
85 |
86 | B
87 | 4
88 |
89 | 2
90 | 1
91 | quarter
92 | up
93 |
94 |
95 |
96 | G
97 | 4
98 |
99 | 2
100 | 1
101 | quarter
102 | up
103 |
104 |
105 |
106 | D
107 | 5
108 |
109 | 2
110 | 1
111 | quarter
112 | up
113 |
114 |
115 |
116 | B
117 | 4
118 |
119 | 2
120 | 1
121 | quarter
122 | up
123 |
124 |
125 | 8
126 |
127 |
128 |
129 | G
130 | 4
131 |
132 | 4
133 | 2
134 | half
135 | down
136 |
137 |
138 |
139 | E
140 | 4
141 |
142 | 4
143 | 2
144 | half
145 | down
146 |
147 |
148 |
149 |
150 |
151 |
152 | G
153 | 4
154 |
155 | 1
156 | 2
157 | eighth
158 | up
159 | begin
160 |
161 |
162 |
163 | A
164 | 4
165 |
166 | 1
167 | 2
168 | eighth
169 | up
170 | continue
171 |
172 |
173 |
174 | B
175 | 4
176 |
177 | 1
178 | 2
179 | eighth
180 | up
181 | continue
182 |
183 |
184 |
185 | C
186 | 5
187 |
188 | 1
189 |
190 | 2
191 | eighth
192 | up
193 | end
194 |
195 |
196 |
197 |
198 |
199 |
200 | C
201 | 5
202 |
203 | 1
204 |
205 | 2
206 | eighth
207 | down
208 | begin
209 |
210 |
211 |
212 |
213 |
214 |
215 | A
216 | 4
217 |
218 | 1
219 | 2
220 | eighth
221 | down
222 | end
223 |
224 |
225 |
226 | G
227 | 4
228 |
229 | 1
230 | 2
231 | eighth
232 | up
233 |
234 |
235 |
236 | 1
237 | 2
238 | eighth
239 |
240 |
241 | light-heavy
242 |
243 |
244 |
245 |
246 |
247 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/multivoice_score_1b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-19
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 7.2319
17 | 40
18 |
19 |
20 | 1545
21 | 1194
22 |
23 | 70
24 | 70
25 | 88
26 | 88
27 |
28 |
29 |
30 |
31 | 0
32 | 0
33 |
34 | 121
35 | 70
36 |
37 |
38 |
39 |
40 |
41 | Score
42 |
43 |
44 |
45 | MusicXML Part
46 |
47 | SmartMusic SoftSynth 1
48 |
49 |
50 | 1
51 | 15489
52 | 1
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 70
63 | 0
64 |
65 | 211
66 |
67 |
68 |
69 | 2
70 |
71 | 0
72 | major
73 |
74 |
75 | 4
76 | 4
77 |
78 |
79 | G
80 | 2
81 |
82 |
83 |
84 |
85 |
86 | B
87 | 4
88 |
89 | 2
90 | 1
91 | quarter
92 | down
93 |
94 |
95 |
96 | G
97 | 4
98 |
99 | 2
100 | 1
101 | quarter
102 | up
103 |
104 |
105 |
106 | D
107 | 5
108 |
109 | 2
110 | 1
111 | quarter
112 | down
113 |
114 |
115 |
116 | B
117 | 4
118 |
119 | 2
120 | 1
121 | quarter
122 | down
123 |
124 |
125 |
126 |
127 |
128 |
129 | G
130 | 5
131 |
132 | 4
133 | 1
134 | half
135 | up
136 |
137 |
138 |
139 | F
140 | 5
141 |
142 | 4
143 | 1
144 | half
145 | up
146 |
147 |
148 | 8
149 |
150 |
151 |
152 | G
153 | 4
154 |
155 | 1
156 | 2
157 | eighth
158 | down
159 | begin
160 |
161 |
162 |
163 | A
164 | 4
165 |
166 | 1
167 | 2
168 | eighth
169 | down
170 | continue
171 |
172 |
173 |
174 | B
175 | 4
176 |
177 | 1
178 | 2
179 | eighth
180 | down
181 | continue
182 |
183 |
184 |
185 | C
186 | 5
187 |
188 | 1
189 |
190 | 2
191 | eighth
192 | down
193 | end
194 |
195 |
196 |
197 |
198 |
199 |
200 | C
201 | 5
202 |
203 | 1
204 |
205 | 2
206 | eighth
207 | down
208 | begin
209 |
210 |
211 |
212 |
213 |
214 |
215 | A
216 | 4
217 |
218 | 1
219 | 2
220 | eighth
221 | down
222 | end
223 |
224 |
225 |
226 | G
227 | 4
228 |
229 | 2
230 | 2
231 | quarter
232 | down
233 |
234 |
235 | 8
236 |
237 |
238 |
239 | C
240 | 3
241 |
242 | 8
243 | 3
244 | whole
245 |
246 |
247 | light-heavy
248 |
249 |
250 |
251 |
252 |
253 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/tie_score_1b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-12
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.2319
19 | 40
20 |
21 |
22 | 1545
23 | 1194
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 | 80
72 | 0
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | 70
83 | 0
84 |
85 | 211
86 |
87 | system
88 |
89 |
90 | 4
91 |
92 | 0
93 | major
94 |
95 |
96 | 4
97 | 4
98 |
99 |
100 | G
101 | 2
102 |
103 |
104 |
105 |
106 |
107 | E
108 | 4
109 |
110 | 2
111 |
112 | 1
113 | eighth
114 | up
115 | begin
116 |
117 |
118 |
119 |
120 |
121 |
122 | E
123 | 4
124 |
125 | 1
126 |
127 | 1
128 | 16th
129 | up
130 | continue
131 | begin
132 |
133 |
134 |
135 |
136 |
137 |
138 | D
139 | 4
140 |
141 | 1
142 | 1
143 | 16th
144 | up
145 | end
146 | end
147 |
148 |
149 |
150 | C
151 | 4
152 |
153 | 2
154 | 1
155 | eighth
156 | up
157 | begin
158 |
159 |
160 |
161 |
162 | E
163 | 4
164 |
165 | 2
166 | 1
167 | eighth
168 | up
169 |
170 |
171 |
172 | C
173 | 4
174 |
175 | 1
176 | 1
177 | 16th
178 | up
179 | continue
180 | begin
181 |
182 |
183 |
184 | D
185 | 4
186 |
187 | 1
188 | 1
189 | 16th
190 | up
191 | end
192 | end
193 |
194 |
195 |
196 | E
197 | 4
198 |
199 | 4
200 | 1
201 | quarter
202 | up
203 |
204 |
205 |
206 |
207 | G
208 | 4
209 |
210 | 4
211 | 1
212 | quarter
213 | up
214 |
215 |
216 |
217 |
218 | C
219 | 5
220 |
221 | 4
222 | 1
223 | quarter
224 | up
225 |
226 |
227 |
228 | E
229 | 4
230 |
231 | 2
232 | 1
233 | eighth
234 | up
235 | begin
236 |
237 |
238 |
239 | F
240 | 4
241 |
242 | 2
243 | 1
244 | eighth
245 | up
246 | end
247 |
248 |
249 | light-heavy
250 |
251 |
252 |
253 |
254 |
255 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/tuplet_score_1a.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-20
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.2319
19 | 40
20 |
21 |
22 | 1545
23 | 1194
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 | 80
72 | 0
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | 70
83 | 0
84 |
85 | 211
86 |
87 | system
88 |
89 |
90 | 6
91 |
92 | 0
93 | major
94 |
95 |
96 | 4
97 | 4
98 |
99 |
100 | G
101 | 2
102 |
103 |
104 |
105 |
106 |
107 | C
108 | 4
109 |
110 | 4
111 | 1
112 | quarter
113 |
114 | 3
115 | 2
116 |
117 | up
118 |
119 |
120 |
121 |
122 |
123 |
124 | D
125 | 4
126 |
127 | 4
128 | 1
129 | quarter
130 |
131 | 3
132 | 2
133 |
134 | up
135 |
136 |
137 |
138 | E
139 | 4
140 |
141 | 4
142 | 1
143 | quarter
144 |
145 | 3
146 | 2
147 |
148 | up
149 |
150 |
151 |
152 |
153 |
154 |
155 | G
156 | 4
157 |
158 | 12
159 | 1
160 | half
161 | up
162 |
163 |
164 | light-heavy
165 |
166 |
167 |
168 |
169 |
170 |
--------------------------------------------------------------------------------
/tests/test_scores/musicxml/tuplet_score_1b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Finale 2014 for Windows
7 | Dolet Light for Finale 2014
8 | 2019-11-20
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 7.2319
19 | 40
20 |
21 |
22 | 1545
23 | 1194
24 |
25 | 70
26 | 70
27 | 88
28 | 88
29 |
30 |
31 |
32 |
33 | 0
34 | 0
35 |
36 | 121
37 | 70
38 |
39 |
40 | 0.7487
41 | 5
42 | 0.7487
43 | 0.7487
44 | 5
45 | 0.7487
46 | 0.7487
47 | 0.7487
48 | 0.7487
49 | 0.7487
50 | 60
51 | 60
52 | 120
53 | 8
54 |
55 |
56 |
57 |
58 |
59 | Score
60 |
61 |
62 |
63 | MusicXML Part
64 |
65 | SmartMusic SoftSynth 1
66 |
67 |
68 | 1
69 | 15489
70 | 1
71 | 80
72 | 0
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | 70
83 | 0
84 |
85 | 211
86 |
87 | system
88 |
89 |
90 | 2
91 |
92 | 0
93 | major
94 |
95 |
96 | 4
97 | 4
98 |
99 |
100 | G
101 | 2
102 |
103 |
104 |
105 |
106 |
107 | C
108 | 4
109 |
110 | 2
111 | 1
112 | quarter
113 | up
114 |
115 |
116 |
117 | D
118 | 4
119 |
120 | 2
121 | 1
122 | quarter
123 | up
124 |
125 |
126 |
127 | G
128 | 4
129 |
130 | 4
131 | 1
132 | half
133 | up
134 |
135 |
136 | light-heavy
137 |
138 |
139 |
140 |
141 |
142 |
--------------------------------------------------------------------------------
/tests/test_scores/polyphonic_score_1b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | ©
20 |
21 |
22 |
23 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-08-24 .
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
32 | hairpin, etc., includes MusicXML offset values.
33 | The parameters for musicxml2mei.xsl were set as follows:
34 | accidStyle: "attr",
35 | articStyle: "elem",
36 | formeWork: "strip",
37 | generateMIDI: "false",
38 | keepAttributes: "false",
39 | keepRights: "false",
40 | labelStyle: "attr",
41 | layout: "strip",
42 | tieStyle: "attr"
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
53 |
54 | 2019-08-27
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
--------------------------------------------------------------------------------
/tests/test_scores/test_all_details_1a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 | Test file 1a for command line detail options
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | lyric1
39 |
40 |
41 | lyric2
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | p
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | mp
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/tests/test_scores/test_all_details_1b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 | Test file 1b for command line detail options
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | p
58 |
59 |
60 |
61 |
62 |
63 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/tests/test_scores/tie_score_1a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-12 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-12
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/tests/test_scores/tie_score_1b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-12 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-12
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/tests/test_scores/tie_score_2a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-21 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-21
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/tests/test_scores/tie_score_2b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-21 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-21
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/tests/test_scores/tuplet_score_1a.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-20 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-20
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/tests/test_scores/tuplet_score_1b.mei:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Source MusicXML file created using Finale 2014 for Windows and Dolet Light for Finale 2014 on 2019-11-20 .
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Calculation of @tstamp and @tstamp2 values on control events, such as dir, dynam,
28 | hairpin, etc., includes MusicXML offset values.
29 | The parameters for musicxml2mei.xsl were set as follows:
30 | accidStyle: "attr",
31 | articStyle: "elem",
32 | formeWork: "strip",
33 | generateMIDI: "false",
34 | keepAttributes: "false",
35 | keepRights: "false",
36 | labelStyle: "attr",
37 | layout: "strip",
38 | tieStyle: "attr"
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | Transcoded from a MusicXML version 3.0 file using an XSLT stylesheet (musicxml2mei v. 3.0).
49 |
50 | 2019-11-20
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/tests/test_utils.py:
--------------------------------------------------------------------------------
1 | import music21 as m21
2 | from musicdiff import M21Utils
3 |
4 | def test_note2tuple1():
5 | n = m21.note.Note(nameWithOctave='D#5')
6 | expected_tuple = ("D5","sharp",False)
7 | assert(M21Utils.note2tuple(n) == expected_tuple )
8 |
9 | def test_note2tuple2():
10 | n = m21.note.Note(nameWithOctave='D--5')
11 | expected_tuple = ("D5","double-flat",False)
12 | assert(M21Utils.note2tuple(n) == expected_tuple )
13 |
14 | def test_note2tuple3():
15 | n = m21.note.Note(nameWithOctave='D--5')
16 | n.tie = m21.tie.Tie('start')
17 | expected_tuple = ("D5","double-flat",True)
18 | assert(M21Utils.note2tuple(n) == expected_tuple )
19 |
20 | def test_note2tuple4():
21 | n = m21.note.Note(nameWithOctave='D--5')
22 | n.tie = m21.tie.Tie('stop')
23 | expected_tuple = ("D5","double-flat",False)
24 | assert(M21Utils.note2tuple(n) == expected_tuple )
25 |
--------------------------------------------------------------------------------