[Top][Contents] |
Unofficial MusicXML test suite
[ << Top ] | [Top][Contents] | [ Test cases >> ] |
[ < Top ] | [ Up : Top ] | [ Test cases > ] |
1 Introduction
Why a MusicXML test suite?
This test suite of sample MusicXML files is supposed to fill a severe gap for all developers implementing MusicXML support in their application: There is no complete test suite of MusicXML files available for testing purposes.
License of the test suite
This collection of MusicXML test files is distributed under the MIT license, which means that you can use the files for any purpose, as long as you leave the copyright notice (or the LICENSE file) intact.
Connection with LilyPond
At the same time as providing a generic test suite for MusicXML
documents, this test suite also serves as proofs for the
musicxml2ly
script provided with LilyPond. The images
shown in this document were generated by running
musicxml2ly
and lilypond
on the MusicXML
files. As musicxml2ly
does not yet perfectly support
every single aspect of MusicXML, the output is not supposed to be
used as a definitive reference rendering, but rather as an
indication how one particular application supports and interprets
each of the test files.
If something does not seem right in the output, it might either be that this feature has not been implemented yet, has been wrongly implemented, or a regression has crept in recently...
In the web version of this document, you can click on the file name or figure for each example to see the corresponding .ly intermediary file.
Structure of this test suite
Each test file (typically hand-crafted from the MusicXML specification) checks one particular aspect of MusicXML. A short description of the particular feature for a file is given inside the file in a comment element of the form
<identification><miscellaneous> <miscellaneous-field name="description"> .... </miscellaneous-field> </miscellaneous></identification>
The files are categorized by their first two digits with the following meaning:
- 01–03
Basics: pitches, rests, rhythm.
- 11–14
Staff attributes: time signatures, clefs, key signatures, staff details.
- 21–24
Notes: chords, note settings, tuplets, grace notes.
- 31–34
Notations and articulations: dynamics (staff-attached), notations (note-attached), spanners, print-object, color, and font size issues.
- 41–43
Parts: multiple parts, multi-voice parts, multi-staff parts.
- 45–46
Repeat and measure issues.
- 51–52
Page issues: header fields, page layout.
- 55–59
Exact positioning of items, offsets, etc.
- 61
Lyrics.
- 71–75
Instrument-specific: guitar (chord, fretboards), transposing instruments, percussion, figured bass, other instruments.
- 81–89
MIDI generation (all sound-related issues).
- 90–99
Various other: compressed MusicXML files, compatibility with broken MusicXML files exported by other applications.
Some of the categories (in particular, the exact item positioning and the MIDI generation) don’t have any test cases yet.
[ << Introduction ] | [Top][Contents] | [ >> ] |
[ < Introduction ] | [ Up : Top ] | [ 01 ... Pitches > ] |
2 Test cases
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < Test cases ] | [ Up : Test cases ] | [ 02 ... Rests > ] |
01 ... Pitches
All pitches from G to c”” in ascending steps. First without accidentals, then with a sharp and then with a flat accidental, then with explicit natural accidentals. Double alterations and cautionary accidentals are tested at the end.
01a-Pitches-Pitches.xml
All pitch intervals in ascending jump size.
01b-Pitches-Intervals.xml
The <voice> element of notes is optional in MusicXML (although Dolet always writes it out). Here, there is one note with lyrics, but without a voice assigned. It should still be correctly converted.
01c-Pitches-NoVoiceElement.xml
Some microtones: c flat-and-a-half, d half-flat, e half-sharp, f sharp-and-a half. Once in the lower and once in the upper region of the staff.
01d-Pitches-Microtones.xml
Accidentals have the attributes ‘cautionary’, ‘editorial’, ‘parenthesized’, and ‘bracketed’. The first two measures each have a cautionary accidental, an editorial, a cautionary with parentheses off, and an editorial and cautionary accidental. The next two measures each have a normal accidental, a bracketed, a parenthesized, and a bracketed and parenthesized accidental.
01e-Pitches-ParenthesizedAccidentals.xml
Microtone accidentals can be cautionary or editorial. Each measure has a normal accidental, an editorial, a cautionary and an editioal and cautionary accidental.
01f-Pitches-ParenthesizedMicrotoneAccidentals.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 01 ... Pitches ] | [ Up : Test cases ] | [ 03 ... Rhythm > ] |
02 ... Rests
All different rest lengths: A two-bar multi-measure rest, a whole rest, a half, etc., until a 1024th-rest, then the same with dotted durations.
02a-Rests-Durations.xml
Rests can have explicit pitches to position them vertically. The first rest has no explicit pitch and should use the default position, all others are explicitly positioned somewhere else (E4, F5, A3, C6).
02b-Rests-PitchedRests.xml
Five multi-measure rests: 3 measures, 15 measures, 1 measure, 12 measures, and 3 measures with ‘use-symbols’ set.
02c-Rests-MultiMeasureRests.xml
Multi-measure rests should always be converted into durations that are a multiple of the time signature.
02d-Rests-Multimeasure-TimeSignatures.xml
In some cases, a rest might not have its type attribute set (this happens, for example, with voices in Finale, where you don’t manually insert a rest).
02e-Rests-NoType.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 02 ... Rests ] | [ Up : Test cases ] | [ 11 ... Time signatures > ] |
03 ... Rhythm
All note durations, from long, brevis, whole, etc., until 1024th. First with their plain values, then dotted, and finally double-dotted.
03a-Rhythm-Durations.xml
Two voices with a <backup> element that does not jump to the beginning of the measure for voice two but somewhere in the middle. Voice two thus won’t have any notes or rests for the first beat of the measure.
03b-Rhythm-Backup.xml
Although uncommon, the divisions of a quarter note can change somewhere in the middle of a MusicXML file. Here, the first half measure uses a division of 1, which then changes to 8 in the middle of the first measure and to 38 in the middle of the second measure.
03c-Rhythm-DivisionChange.xml
Several durations can be written with dots. For multi-measure rests it is also possible to have durations that cannot be expressed with dotted notes (like 5/8).
In bar 15 there is only a 16th note and no rest for the remaining part of the bar.
03d-Rhythm-DottedDurations-Factors.xml
No <divisions> element.
03e-Rhythm-No-Divisions.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 03 ... Rhythm ] | [ Up : Test cases ] | [ 12 ... Clefs > ] |
11 ... Time signatures
Various time signatures: 2/2 (alla breve), 4/4 (C), 2/2, 3/2, 2/4, 3/4, 4/4, 5/4, 3/8, 6/8, 12/8.
11a-TimeSignatures.xml
A score without a time signature (but with a key and clefs). The first bar misses a <time> element altogether, the second bar sets a 2/2 time with ‘print-object="no"’ for both staves, and the third bar sets a 4/4 time with ‘print-object="no"’ only for the lower staff.
11b-TimeSignatures-NoTime.xml
Compound time signatures with same denominator: (3+2)/8 and (5+3+1)/4.
11c-TimeSignatures-CompoundSimple.xml
Compound time signatures with separate fractions displayed: 3/8+2/8+3/4 and 5/2+1/8.
11d-TimeSignatures-CompoundMultiple.xml
Compound time signatures of mixed type: (3+2)/8+3/4.
11e-TimeSignatures-CompoundMixed.xml
A time signature of 3/8 with the ‘symbol="cut"’ attribute and two ‘symbol="single-number"’ attributes with compound time signatures. Shall the symbol be ignored in this case?
11f-TimeSignatures-SymbolMeaning.xml
Time signature displayed as a single number.
11g-TimeSignatures-SingleNumber.xml
Senza-misura time signature. The first bar has three eighth notes, the second bar contains a full-measure rest (indicated by setting ‘measure="yes"’ for the <rest> element) with a length of a dotted half note, and the third bar contains four eighth notes.
11h-TimeSignatures-SenzaMisura.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 11 ... Time signatures ] | [ Up : Test cases ] | [ 13 ... Key signatures > ] |
12 ... Clefs
Various clefs: G, C, F, percussion, TAB, and ‘none’ (in measure 17). Some clefs are also shown with transposition and on other staff lines than their default.
Each measure shows a different clef; only measure 18 has the same treble clef as the first measure.
12a-Clefs.xml
A score without a <key> or <clef> element (but with <time>). The default (4/4 in treble clef) should be used.
12b-Clefs-NoKeyOrClef.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 12 ... Clefs ] | [ Up : Test cases ] | [ 14 ... Staff attributes > ] |
13 ... Key signatures
Various key signatures: from 11 flats to 11 sharps. Each signature is shown twice, with one measure in major and the other measure in minor.
13a-KeySignatures.xml
All different modes: ‘major’, ‘minor’, ‘ionian’, ‘dorian’, ‘phrygian’, ‘lydian’, ‘mixolydian’, ‘aeolian’, ‘locrian’, and ‘none’. All modes are given with two sharps.
13b-KeySignatures-ChurchModes.xml
Non-traditional key signatures, where each alteration is separately given. The first signature is [f sharp, a flat, b flat]. The second one is [c flatflat, g sharp sharp, d flat, b sharp, f natural], with explicitly selected octaves for each alteration.
13c-KeySignatures-NonTraditional.xml
Non-traditional key signatures with microtone alterations: [g flat-and-a-half, a flat, b half-flat, c natural, d half-sharp, e sharp, f sharp-and-a-half].
13d-KeySignatures-Microtones.xml
Tests of key signature cancellation: at default location, at right, and before barline, then cancelling a key signature that does not exist.
13e-KeySignatures-Cancel.xml
Test the ‘print-object’ attribute of key signatures. The signature at the beginning of the second bar is a flat major and should be invisible; the following notes d flat, e flat, a flat, and b flat shouldn’t have a flat accidental.
13f-KeySignatures-Visible.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 13 ... Key signatures ] | [ Up : Test cases ] | [ 21 ... Chorded notes > ] |
14 ... Staff attributes
Testing staff line configurations and pitched notes. The number of staff lines can be modified by using the ‘staff-lines’ child of the ‘staff-details’ attribute. This can happen globally (the first staff has one line globally) or during the part at the beginning of a measure and even inside a measure (the second part has 5 lines initially, 4 at the beginning of the second measure, and 3 starting in the middle of the third measure). The fourth measure in the lower staff has five lines again but uses ‘print-object="no"’ in the ‘line-detail’ element to suppress the second and fourth staff line.
14a-StaffDetails-LineChanges.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 14 ... Staff attributes ] | [ Up : Test cases ] | [ 22 ... Note settings, heads, etc. > ] |
21 ... Chorded notes
One simple chord consisting of two notes.
21a-Chord-Basic.xml
Some subsequent (identical) two-note chords. In the second bar, the chords are tied (top note, bottom note, both notes).
21b-Chords-TwoNotes.xml
Some three-note chords, with various durations.
21c-Chords-ThreeNotesDuration.xml
Chords in the second measure, after several ornaments in the first measure and a ‘p’ at the beginning of the second measure.
21d-Chords-SchubertStabatMater.xml
Check for proper chord detection after a pickup measure (i.e., the first beat of the measure is not aligned with a multiple of the time signature)!
21e-Chords-PickupMeasures.xml
Between the individual notes of a chord there can be <direction> elements, which already belong to the next <note> element after the current one. The segno and the piano sign should be attached to the rest after the chord.
21f-Chord-ElementInBetween.xml
Different tremolos on different chord notes. The tremolo on the last chord is of type ‘unmeasured’.
21g-Chords-Tremolos.xml
A chord with normal, cautionary, and editorial accidentals.
21h-Chord-Accidentals.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 21 ... Chorded notes ] | [ Up : Test cases ] | [ 23 ... Triplets, Tuplets > ] |
22 ... Note settings, heads, etc.
Different note styles, using the <notehead> element. First, each note head style is printed with four quarter notes, two with filled heads, two with unfilled heads, where first the stem is up and then the stem is down. After that, each note head style is printed with a half note (should have an unfilled head by default). Finally, the Aiken note head styles are tested, once with stem up and once with stem down.
22a-Noteheads.xml
Staff-connected note styles: slash notation, hidden notes (with and without hidden staff lines).
22b-Staff-Notestyles.xml
Different note styles for individual notes inside a chord, using the <notehead> element.
22c-Noteheads-Chords.xml
Parenthesized note heads. A normal parenthesized note, a parenthesized note with an ‘x’ note head, a three-note chord with the middle note parenthesized, a three-note chord with all notes parenthesized, a normal quarter rest in parentheses, and a pitched quarter rest in parentheses.
22d-Parenthesized-Noteheads.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 22 ... Note settings, heads, etc. ] | [ Up : Test cases ] | [ 24 ... Grace notes > ] |
23 ... Triplets, Tuplets
Some tuplets (3:2, 3:2, 3:2, 4:2, 4:1, 7:3, 6:2) with the default tuplet bracket displaying the number of actual notes played. The second tuplet does not have a number attribute set.
23a-Tuplets.xml
Different tuplet styles: default, none, x:y, x:y-note, and x-note:y-note; each with bracket, slur, and without bracket. Finally, non-standard 4:3 and 17:2 tuplets are given.
23b-Tuplets-Styles.xml
Displaying tuplet note types that might not coincide with the displayed note. The first two tuplets take the type from the note, the second two from the <time-modification> element, the remaining pair of tuplets from the <tuplet> notation element.
The tuplets in measure 3 specify both a number of notes and a type inside the <tuplet-actual> and <tuplet-normal> elements, the ones in measure 4 specify only a note type (but no number), and the ones in measure 5 specify only a number of tuplet notes (but no type, which is deduced from the note’s type).
The first tuplet of measures 3 to 5 uses ‘display-type="actual"’, the second one ‘display-type="both"’.
FIXME: The tuplet-normal should coincide with the real notes!
23c-Tuplet-Display-NonStandard.xml
Tuplets can be nested. The first bar contains a 5:2 tuplet (with 16th notes) in the middle of a 3:2 tuple (with eighth notes). The second bar has a 5:2 tuplet at the beginning and at the end (with the tuplet number forced below) of a 3:2 tuple (with the bracket forced above).
23d-Tuplets-Nested.xml
Tremolo tuplets. The first bar contains normal eighth triplets with staccato points, the second bar holds three tremolo tuplets, the third bar holds a sextuple followed by a triplet, the third bar contains a sextuple (starting on the second beat) with a ‘fp’ sign, and the fifth bar is identical to the third bar.
23e-Tuplets-Tremolo.xml
Tuplets without brackets, using only <time-modification>. The upper staff contains two quarters followed by a quarter triplet. The lower staff holds two eighths, an eighths triplet, four 16th notes, and a 16th sextuplet.
23f-Tuplets-DurationButNoBracket.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 23 ... Triplets, Tuplets ] | [ Up : Test cases ] | [ 31 ... Dynamics and other single symbols > ] |
24 ... Grace notes
Different kinds of grace notes. First bar: single 1/16 grace note, beamed 1/16 grace notes, 1/16 appoggiatura, 1/8 appoggiatura. Second bar: slashed single 1/16 grace note, beamed 1/16 grace notes (with both notes marked as slashed), 1/16 acciaccatura, 1/16 grace note (without slash) right before the measure bar. Third bar: no grace note before chord, 1/4 grace note with sharp, two 1/4 grace notes with flats, 1/16 slashed grace note before rest.
24a-GraceNotes.xml
Chords as grace notes. The last (unslashed and beamed) grace group consists of two chords with one tie between the two grace chords and another tie between the last grace chord and the main chord.
24b-ChordAsGraceNote.xml
A grace note that appears at the measure end (without any steal-from-* attribute set). Some applications need to convert this into an after-grace.
24c-GraceNote-MeasureEnd.xml
Some grace notes and after-graces indicated by ‘steal-time-previous’ (for the first grace note) and ‘steal-time-following’ (for the second one). The remaining grace notes have no such attribute.
24d-AfterGrace.xml
A grace note on a different staff than the actual note.
24e-GraceNote-StaffChange.xml
A grace note with a slur to the actual note. The <grace> element has no ‘slash’ attribute; since MusicXML does not provide a default value it is up to the application to interpret the grace note as an acciaccatura or an appoggiatura.
24f-GraceNote-Slur.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 24 ... Grace notes ] | [ Up : Test cases ] | [ 32 ... Notations and Articulations > ] |
31 ... Dynamics and other single symbols
All <direction> elements defined in MusicXML. The lyrics for each note describes the direction element assigned to that note. Not marked with lyrics is a <scordatura> element at the very beginning.
31a-Directions.xml
Tempo Markings: ’quarter.=100’, ’quarter..=half.’, ’(quarter.=half..)’, ’(quarter.=77)’.
31c-MetronomeMarks.xml
This tests various combinations of <direction> children. The lyrics for each note describe the compound elements assigned to that note.
31d-Directions-Compounds.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 31 ... Dynamics and other single symbols ] | [ Up : Test cases ] | [ 33 ... Spanners > ] |
32 ... Notations and Articulations
All <notation> elements defined in MusicXML. The lyrics show the notation assigned to each note.
32a-Notations.xml
Text markup with different font sizes, weights, colors, horizontal positions, and vertical positions.
32b-Articulations-Texts.xml
It should not make any difference whether two articulations are given inside two different notation elements, inside two different articulations children of the same notation element or inside the same articulations element. Thus, all three notes should have a staccato and an accent.
32c-MultipleNotationChildren.xml
Different arpeggio kinds and directions.
32d-Arpeggio.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 32 ... Notations and Articulations ] | [ Up : Test cases ] | [ 34 ... Attribute issues > ] |
33 ... Spanners
Several spanners defined in MusicXML: tuplet, slur (solid, dashed), wedge (cresc, dim), trill with accidental mark and wavy-line (with another accidental mark on the second beat), single-note trill spanner, octave-shift (8va,15mb), bracket (solid down/down, dashed down/down, solid none/down, dashed none/up, solid none/none), dashes, glissando (wavy), slide (solid), grouping, two-note tremolo, hammer-on, pull-off, pedal line (down, change, up), pedal text (down, up).
33a-Spanners.xml
Two simple tied whole notes
33b-Spanners-Tie.xml
A note can be the end of one slur and the start of a new slur. Also, in MusicXML, nested slurs are possible like in the second measure where one slur goes over all four notes, and another slur goes from the second to the third note.
33c-Spanners-Slurs.xml
All types of octave shifts (15ma on the third eighth note, 15mb on the fourth and fifth, 8va on the sixth and seventh, and 8vb on the last two 16th notes). This test file positions <octave-shift type="stop"/>> before the associated note, as expected in MusicXML import of Finale and Sibelius, for example. Consequently, it contains ‘Sibelius’ as the <software> tag.
Note that the end of the last octave shift is anchored at the following bar line.
33da-Spanners-OctaveShifts-before.xml
All types of octave shifts (15ma on the third eighth note, 15mb on the fourth and fifth, 8va on the sixth and seventh, and 8vb on the last two 16th notes). This test file positions <octave-shift type="stop"/>> after the associated note, as expected in MusicXML import of MuseScore, for example. Consequently, it contains ‘MuseScore’ as the <software> tag.
Note that the end of the last octave shift is anchored at the following bar line.
33db-Spanners-OctaveShifts-after.xml
Invalid octave-shifts: 27 down, 11 up.
33e-Spanners-OctaveShifts-InvalidSize.xml
A trill spanner that spans a grace note and ends on an after-grace note at the end of the measure.
33f-Trill-EndingOnGraceNote.xml
Slurs on chorded notes: Only the first note of the chord should get the slur notation. Some applications print out the slur for all notes – these should be ignored.
33g-Slur-ChordedNotes.xml
All different types of glissando defined in MusicXML
33h-Spanners-Glissando.xml
Several ties that have their end tag missing.
33i-Ties-NotEnded.xml
Tests for double-note tremolo beams. The first bar shows a half-note tremolo (one beam, two strokes) followed by a dotted quarter-note tremolo with chords (three strokes). The second bar shows a half-note triplet with three tremolos (no beams, three strokes) followed by three beamed eighths-note chords with a tremolo (two strokes) between the second and third chord.
33j-Beams-Tremolos.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 33 ... Spanners ] | [ Up : Test cases ] | [ 41 ... Multiple parts (staves) > ] |
34 ... Attribute issues
Test various spanner elements (mostly from <notations>) starting from a <note> object with ‘print-object’ set to ‘no’, then test spanners ending with such a note object: beam, tuplet, slur, trill + wavy-line, glissando (wavy), slide (solid), two-note tremolo, hammer-on, pull-off. Spanners starting from an invisible object should be suppressed.
34a-Print-Object-Spanners.xml
Colors. The elements in the first bar have the ‘color’ attribute set to red for <note>, <notehead>, <stem>, <dot>, and <accidental>, respectively.
The elements in the second bar have the ‘color’ attribute set to red for <down-bow>, <tremolo>, <accent>, and <note> again (for the rest), respectively, followed by a red unpitched note.
The third and fourth bar consists of a red two-bar rest.
The fifth bar has a red rehearsal mark on its starting bar line. The first note has three fingerings, with the middle one in red; also attached is a red ‘ff’ sign. The second note has three plucks, with the first one in red. A red ‘Adagio’ tempo indication is on top of the third beat, which consists of a quadruplet with a red number. The fourth beat holds a red arpeggio, and the fifth beat demonstrates lyrics in red.
The sixth bar holds a red beamlet, a red beam, a red slur, a red pedal marker that gets continued with a blue one, and a red octave shift.
Measure seven contains a red trill with a black wavy line, a black trill with a red wavy line, a red bracket, a red glissando, and a red wedge.
Bar eight starts with a red and black tie connecting two chords, followed by ’cresc.’ and dashes in red, followed by ’dim.’ in black with red dashes.
The ninth measure demonstrates a red 6/8 time signature, followed by a red two-stem tremolo, a red breath mark.
Bar ten begins with a red, non-traditional key change, followed by a red, traditional one.
The eleventh bar starts with a red bass clef (actually, still in bar seven), followed by a blue percussion clef on a red two-line staff (where the middle line is omitted).
Measures 12 to 14 holds a repeat structure with two endings, with red bar lines at the beginning of measures 12 and 14, a blue bar line at the beginning of measure 13, and a red prima-volta bracket and number.
34b-Colors.xml
Font sizes. The elements in the first bar have the ‘font-size’ attribute set to a larger value for <note>, <notehead>, <trill-mark>, <dot>, and <accidental>, respectively.
The elements in the second bar have the ‘font-size’ attribute set to a larger value for <down-bow>, <accidental-mark>, <accent>, and <note> again (for the rest), respectively, followed by a larger percussion clef and a larger unpitched note.
The third and fourth bar consists of an oversized two-bar rest.
The fifth bar has an oversized rehearsal mark on its starting bar line. The first note has three fingerings, with the middle one oversized; also attached is an oversized ‘ff’ sign. The second note has three plucks, with the first one oversized. An oversized ‘Adagio’ tempo indication is on top of the third and fourth beats, which consist of a quadruplet with an oversized number. The fifth beat demonstrates oversized lyrics.
The sixth bar holds an oversized pedal marker with an oversized octave shift, an oversized trill with a wavy line, and an oversized ‘cresc.’ with dashes.
The seventh measure demonstrates an oversized, non-traditional key change, followed by an oversized 6/8 time signature, an oversized breath mark, an oversized bass clef, and an oversized, traditional key change.
34c-Font-Size.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 34 ... Attribute issues ] | [ Up : Test cases ] | [ 42 ... Multiple voices per staff > ] |
41 ... Multiple parts (staves)
A piece with four parts (P0, P1, P2, P3; different from what Finale creates!). Are they converted in the correct order?
41a-MultiParts-Partorder.xml
A piece with 20 parts to check whether an application supports that many parts and whether they are correctly sorted.
41b-MultiParts-MoreThan10.xml
A huge orchestra score with 28 parts and different kinds of nested bracketed groups. Each part/group is assigned a name and an abbreviation to be shown before the staff. Also, most of the groups show unbroken barlines, while the barlines are broken between the groups.
41c-StaffGroups.xml
Two properly nested part groups: One group (with a square bracket) goes from staff 2 to 4) and another group (with a curly bracket) goes from staff 3 to 4.
41d-StaffGroups-Nested.xml
Part names and abbreviations can contain line breaks.
41e-StaffGroups-InstrumentNames-Linebroken.xml
MusicXML allows for overlapping part-groups, while many applications do not allow overlapping groups, but require them to be properly nested. In this case, one group (within parenthesis) goes from staff 1 to 4 and another group (also within parenthesis) goes from staff 3 to 5.
41f-StaffGroups-Overlapping.xml
This piece has more part elements than the part-list section gives. One can either convert all the parts present, but not listed in the part-list, or simply not import / ignore them.
41h-TooManyParts.xml
MusicXML allows part-name and part-name-display in the score-part element. If part-name-display is given, it overrides the part-name for display.
The first staff uses only part-name, while the second one (same part-name) overrides it with a custom text. Similar for the part-abbreviation used in subsequent staves.
41i-PartNameDisplay-Override.xml
This score has multiple display-text elements in its part-name-display block. This is handled without crashing.
41j-PartNameDisplay-Multiple-DisplayText-Children.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 41 ... Multiple parts (staves) ] | [ Up : Test cases ] | [ 43 ... One part on multiple staves > ] |
42 ... Multiple voices per staff
Two voices share one staff. Each voice is assigned some lyrics.
42a-MultiVoice-TwoVoicesOnStaff-Lyrics.xml
A multi-voice / multi-staff part with a clef change in the middle of a measure and a <backward> for voice 2 jumping back beyond that clef change.
42b-MultiVoice-MidMeasureClefChange.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 42 ... Multiple voices per staff ] | [ Up : Test cases ] | [ 45 ... Repeats > ] |
43 ... One part on multiple staves
A simple piano staff
43a-PianoStaff.xml
A piano staff with different keys and clefs for each of its staves. The keys and clefs for both staves are given at the very beginning of the measure.
43b-MultiStaff-DifferentKeys.xml
A piano staff with different keys and clefs for each of its staves. The key and clef for the second staff is given only after a backward, just before the first note of the second staff is given, but after the whole measure for staff 1 has been given.
43c-MultiStaff-DifferentKeysAfterBackup.xml
Staff changes in a piano staff. The voice from the second staff has some notes/chords on the first staff. The final two chords have some notes on the first, some on the second staff.
43d-MultiStaff-StaffChange.xml
A piano staff with dynamics and clef changes, where each element (ffff, wedge and clef changes) applies only to one voice or one staff, respectively.
43e-Multistaff-ClefDynamics.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 43 ... One part on multiple staves ] | [ Up : Test cases ] | [ 46 ... Barlines, Measures > ] |
45 ... Repeats
A simple, repeated measure (repeated 5 times)
45a-SimpleRepeat.xml
A simple repeat with two alternative endings (volta brackets).
45b-RepeatWithAlternatives.xml
Repeats can also be nested.
45c-RepeatMultipleTimes.xml
Nested repeats, each with alternative endings.
45d-Repeats-Nested-Alternatives.xml
Some more nested repeats with alternatives. The barline between measure 7 and 8 will probably be messed up! (Should be a repeat on both sides!)
45e-Repeats-Nested-Alternatives.xml
Some more nested repeats with alternatives, where the MusicXML file does not make sense in the first place. How well are applications able to cope with improper repeats and alternatives?
45f-Repeats-InvalidEndings.xml
A forward-repeating bar line without an ending repeat bar.
45g-Repeats-NotEnded.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 45 ... Repeats ] | [ Up : Test cases ] | [ 51 ... Header information > ] |
46 ... Barlines, Measures
Different types of (non-repeat) barlines: default (no setting), regular, dotted, dashed, heavy, light-light, light-heavy, heavy-light, heavy-heavy, tick, short, none.
46a-Barlines.xml
Barlines can appear at mid-measure positions, without using an implicit measure!
46b-MidmeasureBarline.xml
A clef change in the middle of a measure, using either an implicit measure or simply placing the attributes in the middle of the measure.
46c-Midmeasure-Clef.xml
A 3/8 pickup measure, a measure that is split into one (incomplete, only 2/4) measure and an implicit measure, and an incomplete measure (containg 3/4).
46d-PickupMeasure-ImplicitMeasures.xml
Voice 2 should start at 2nd beat of first full measure.
46e-PickupMeasure-SecondVoiceStartsLater.xml
Measures can contain less notes than the time signature says. Here, the first and third measures contain only two quarters instead of four.
46f-IncompleteMeasures.xml
Pickup measure with chord names and figured bass.
46g-PickupMeasure-Chordnames-FiguredBass.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 46 ... Barlines, Measures ] | [ Up : Test cases ] | [ 52 ... Page layout > ] |
51 ... Header information
Several header fields and part names can contain quotes ("). This test checks whether they are converted/imported without problems (i.e. whether they are correctly escaped when converting).
51b-Header-Quotes.xml
There can be multiple <rights> tags in the identification element of the score. The conversion shall still work, ideally using both of them.
51c-MultipleRights.xml
A piece with an empty (but existing) work-title, but a non-empty movement-title. In this case the movement-title should be chosen, even though the work-title exists.
51d-EmptyTitle.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 51 ... Header information ] | [ Up : Test cases ] | [ 61 ... Lyrics > ] |
52 ... Page layout
Several page layout settings: paper size, margins, system margins and distances, different fonts, etc.
52a-PageLayout.xml
System and page breaks, given in a <print> element
52b-Breaks.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 52 ... Page layout ] | [ Up : Test cases ] | [ 71 ... Guitar notation > ] |
61 ... Lyrics
Some notes with simple lyrics: Syllables, notes without a syllable, syllable spanners.
61a-Lyrics.xml
Multiple (simple) lyrics. The order of the exported stanzas is relevant (identified by the number attribute in this test case)
61b-MultipleLyrics.xml
Lyrics assigned to the voices of a piano staff containing two simple staves. Each staff is assigned exactly one lyrics line.
61c-Lyrics-Pianostaff.xml
How to treat lyrics and slurred notes. Normally, a slurred group of notes is assigned only one lyrics syllable.
61d-Lyrics-Melisma.xml
Assigning lyrics to chorded notes.
61e-Lyrics-Chords.xml
Grace notes shall not mess up the lyrics, and they shall not be assigned to a syllable.
61f-Lyrics-GracedNotes.xml
A lyrics syllable can have both a number and a name attribute. The question is: What should be used to put syllables of the same voice together. This example uses different number/name combinations to check how different applications handle this unspecified case (The advice on the MusicXML mailing list was "there is no correct way, each application can do what it thinks is best").
61g-Lyrics-NameNumber.xml
Beaming or slurs can indicate melismata for lyrics. Also make sure that notes without an explicit syllable are treated as if they were part of a melisma.
In the second bar, ‘start’, ‘continue’, and ‘stop’ types are used for <extend>, together with a red color for the extender line.
61h-Lyrics-BeamsMelismata.xml
Each note of a chord can have some lyrics attached. In this case, each note of the chord has lyrics of the form "Lyrics [123]" attached, where each lyrics has a different number attribute to distinguish them. These syllables should be imported into three different stanzas and the timing should be correct.
61i-Lyrics-Chords.xml
Multiple lyrics syllables assigned to a single note are implemented either using a space in the lyrics’ <text> element or by using <elision>.
The first note has a single syllable, the second note has two syllables separated by a space, the third has two syllables with <elision> set to an undertie, and the fourth has three syllables (the first and third one in red, and the second one being in italic and overriding the color with blue), with a green undertie between the first and second syllable and an empty <elision> element between the second and third syllable, causing an application-specific elision glyph.
61j-Lyrics-Elisions.xml
Lyrics spanners: continued syllables and extenders, possibly spanning multiple notes. The intermediate notes do not have any <lyric> element.
61k-Lyrics-SpannersExtenders.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 61 ... Lyrics ] | [ Up : Test cases ] | [ 72 ... Transposing instruments > ] |
71 ... Guitar notation
A normal staff with several (complex) chord names displayed.
71a-Chordnames.xml
A staff with chord names and some fretboards shown. The fretboards can have an arbitrary number of frets/strings, can start at an arbitrary fret and can even contain fingering information.
71c-ChordsFrets.xml
Chords and fretboards assigned to the voices in a multi-voice, multi-staff part. There should be fret diagrams above each of the two staves.
71d-ChordsFrets-Multistaff.xml
Some tablature staves, with explicit fingering information and different string tunings given in the MusicXML file.
71e-TabStaves.xml
All chord types defined in MusicXML. The staff will only contain one c’ note (NO chord) for all of them, but the chord names should be properly printed.
71f-AllChordTypes.xml
There can be multiple subsequent harmony elements, indicating a harmony change during a note
71g-MultipleChordnames.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 71 ... Guitar notation ] | [ Up : Test cases ] | [ 73 ... Percussion > ] |
72 ... Transposing instruments
Transposing instruments: Trumpet in Bb, Horn in Eb, Piano; All of them show the C major scale (the trumpet with 2 sharp, the horn with 3 sharp).
72a-TransposingInstruments.xml
Various transposition. Each part plays a c”, just displayed in different display pitches. The second-to-last staff uses a transposition where the displayed c’ is an actual f”’ concert pitch. The final staff is an untransposed instrument.
72b-TransposingInstruments-Full.xml
An instrument change from one transposition (Clarinet in Eb) to another transposing instrument (Clarinet in Bb). The displayed instrument name should also be updated.
The whole piece is in Bb major (sounding), so first the key signature should be one flat, after the change it should have no accidentals.
72c-TransposingInstruments-Change.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 72 ... Transposing instruments ] | [ Up : Test cases ] | [ 74 ... Figured bass > ] |
73 ... Percussion
Three types of percussion staves: A five-line staff with bass clef for Timpani, a five-line staff with percussion clef, and a one-line percussion staff with only unpitched notes.
73a-Percussion.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 73 ... Percussion ] | [ Up : Test cases ] | [ 75 ... Other instrumental notation > ] |
74 ... Figured bass
Some figured bass containing alterated figures, bracketed figures and slashed figures.
Note that this file does not contain any extenders!
74a-FiguredBass.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 74 ... Figured bass ] | [ Up : Test cases ] | [ 90 ... Compressed MusicXML files > ] |
75 ... Other instrumental notation
All possible accordion registrations.
75a-AccordionRegistrations.xml
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 75 ... Other instrumental notation ] | [ Up : Test cases ] | [ 99 ... Compatibility with broken MusicXML > ] |
90 ... Compressed MusicXML files
A compressed MusicXML file, containing a simple MusicXML score and the corresponding .pdf output for reference.
90a-Compressed-MusicXML.mxl
[ << Test cases ] | [Top][Contents] | [ >> ] |
[ < 90 ... Compressed MusicXML files ] | [ Up : Test cases ] | [ > ] |
99 ... Compatibility with broken MusicXML
Dolet 3 for Sibelius (5.1) did not print out any closing beam tags, only starting and continuing beam tags. For such files, one either needs to ignore all beaming information or close all beams
99a-Sibelius5-IgnoreBeaming.xml
If we properly ignore all beaming information from the Dolet 3 for Sibelius export file, make sure that the lyrics syllables are still assigned to the correct notes.
99b-Lyrics-BeamsMelismata-IgnoreBeams.xml