MusicXML in depth

MusicXML ist ein auf einer extensible markup language (dt. erweiterbare Auszeichnungssprache, kurz:XML) basierendes Dateiformat (Dateinamensendung .xml), welches explizit auf die Speicherung der musikalischen Notation ausgerichtet ist. Obwohl der userfreundlichste Weg, mit MusicXML zu interagieren, die Verwendung von einer Noteneditorsoftware (z.B. Musescore) ist, lässt auch mit Hilfe eines herkömmlichen Texteditor (z.B. den Texteditor von Windows oder Atom) aus einer MusicXML-Datei durchaus viele Informationen herauslesen.

Die Interne Struktur eines MusikXML-Files ist hierarchisch gebaut und wird durch Elements, Tags und Attribute definiert. Im folgenden Beispiel werden dies visuell hervorgehoben:

Die innerhalb der MusicXML verwendete Struktur ist weitgehend konform mit den üblichen Standards der Auszeichnungssprache und verwendet die MusicXML W3C XML schema. Eine ausführliche Übersicht dazu ist hier vorhanden. Das MEI-Format, das auch für digitale Noteneditionen verwendet wird, knüpft an das MusicXML-Format an und ist mit diesem kompatibel.

Angaben zu Werk und Komponist

Die Angaben zum Werk und Komponist werden in der Regel am Anfang einer MusicXML-Datei gespeichert und werden durch die Tags <work> sowie <creator> definiert.

Im folgenden Beispiel können wir sehen, welche Informationen in der MusicXML-Version des ersten Satzes der Missa „La sol fa re mi“ von Josquin Desprez (hier der Link dazu) enthalten sind:

Neben der innerhalb von <work> Tag enthaltenen Daten zur Bezeichnung des Werkes („Kyrie“) gibt es zusätzliche Information zum Werk, z.B. innerhalb von <movement-title> sowie als „parentTitle“-Attribut in <miscellaneous> Tags. Die auf Python basierte MusicXML-Parsingtools, wie z. B. music21, können diese Informationen für die Metadatensuche verwenden. So sieht die im Beispiel enthaltene Information nach dem Metadata-Parsing durch music21 folgendermaßen aus:

Somit definiert man durch die Verwendung von bestimmten Tags und Attributen in der MusicXML-Datei die ausgelesenen Informationen, was z.B. für den Aufbau eines Korpusses für eine Korpus-Studie entscheidend ist. Eine Übersicht der im Kontext der Metadatasuche durch music21 gelesene Tags und Attribute ist hier zu finden.

Angaben zu Stimmen und Instrumenten

In der Regel werden alle Informationen zu den in einer MusicXML-Datei enthaltenen Stimmen innerhalb des <part-list> Tags definiert. Dieser enthält nicht nur den Namen des Instruments (<part-name>), sondern auch Informationen, die lediglich zum Abspielen des Files innerhalb eines Noteneditors bereitgestellt wird (diverse Midi-Tags). In folgenden Beispiel sehen wir die komplette Beschreibung einer Stimme:

Angaben zu den Noten

Im Hauptteil der xml-Datei folgt dann gegliedert nach Stimmen (<part id>) und Taktnummern (<measure>) die Angaben zum Taktart, Notenschlüssel sowie den einzelnen Noten. Dabei ist es wichtig zu beachten, dass die viele der darin enthaltenen Daten hauptsächlich die layoutrelevanten Angaben enthalten und nur die ausgewählten Tags für die Speicherung der Information zur Tonhöhen und Dauern verwendet werden. Diese werden in der folgenden Übersicht hierarchisch dargestellt:

Neben der bereits erwähnten Unterteilung auf <part id> und <measure>, enthalten vor allem die Tags <attributes> sowie <note> alle relevanten Informationen zur Tonhöhe und Rhythmus der in dem MusicXML-File enthaltenen Notenmaterials. <attributes> enthält in der Regel alle Angaben zum Takt selbst, wie z.B. Schlüssel (<clef>), Taktangabe (<time> sowie <beats> und <beat-type>) und Vorzeichen (<key>). <divisions> enthält dabei die Information zur kleinstmöglichen rhythmischen Unterteilung des Taktes, und wird in Bruchteilen eines Viertels angegeben. Dieser Wert ist notwendig um die Dauern der jeweiligen Töne selbst bei komplexeren rhythmischen Gruppierungen exakt angeben zu können. Die exakte Formel zur Berechnung der Notenwerte in Vierteln heißt dann <duration>-Wert : <divisions>-Wert. Hier als Beispiel die erste Note aus dem bereits oben erwähnten Beispiel von Josquin:

80640 : 10080 = 8 oder 8 Viertel oder 2 Ganze. Das entspricht exakt der Brevis A in Takt 1 der ersten Stimme (Superius).

Die Pitchangaben (<pitch>) werden durch Tags <step>, <alter> und <octave> definiert. <step> beschreibt die Tonklasse (engl. pitch class), hierfür werden die Buchstaben „A“ bis „G“ verwendet (nach amerikanischen Schreibweise wird dabei „H“ als „B“ bezeichnet). <alter> beschreibt den Vorzeichen der jeweiligen Note, die ganzen Zahlen bezeichnen dabei die Halbtonschritte. Das heißt „+1“ entspricht exakt einem Kreuz, „-1“ hingegen einem b. Darüber hinaus können innerhalb des <alter>-Elements auch Komma-zahlen für die Mikrointervalle verwendet werden (-0.5 würde dabei z. B. einem Viertelton nach Unten entsprechen). <octave> definiert die Oktave, als Zahl von 0 bis 9 (entspricht exakt der MIDI-Bezeichnung - „4“ entspricht dabei der eingestrichenen Oktave).

Guidelines für die Erstellung der MusicXMLs

Um die bestmögliche Kompatibilität der MusicXML-Datei mit diversen Analysetools sowie der Noteneditoren zu gewährleisten, es ist ratsam folgende Punkte zu beachten:

1. Sicherstellen, dass die Stimmverteilung durch <part id> realisiert worden ist. Oft werden Stimmen NUR per <voice> zusammengefügt, was in meisten Fällen zur fehlerhaften Analysen bzw. Visualisierungen führen kann.

2. Die Taktnummerierung muss korrekt und einheitlich sein. Es ist besonders wichtig zu prüfen, dass die Taktnummern tatsächlich in der korrekten (aufsteigenden) Reihenfolge nummeriert werden und jedes <part> über die gleiche Taktanzahl (falls die Taktangabe und Gesamttaktanzahl im Original sich von Stimme zur Stimme unterscheiden sollte, bitte entsprechend anpassen) verfügt. Der Auftakt soll immer als <measure number=„0“> definiert werden!

3. Es ist wichtig die korrekten Bezeichnungen der Stimmen in <part-list> sowie die Abkürzungsformen in <part-abbreviation> einzufügen, da insbesondere bei den Analysetools die genauen Namen der jeweiligen Stimmen/Parts erheblich die Identifikation der entsprechenden Ergebnisse erleichtern.