2.01. Konvertierung MEI zu MusicXML

Dank des letztjährigen Projektes "MusicXML-Integration in meico" konnte das Converter Framework meico um eine vollumfängliche API (Application Programming Interface) für das Datenformat MusicXML erweitert werden. Für die Konvertierung von und zu MusicXML wurden erste Vorbereitungen getroffen. U. a. wurden entsprechende Converter-Klassen und -Methoden angelegt. Unser Ziel im vorliegenden Projekt ist, diese nun mit Funktionalitäten zu füllen. Dazu wollen wir uns zuerst auf die Konvertierung von MEI zu MusicXML konzentrieren. Sie ist Grundlage dafür, dass MEI auch in handelsüblichen Musik- und Notensatzprogrammen importiert werden kann, was bislang nicht möglich ist. Erst mit dem jüngsten Versions-Update des Notensatzprogrammes MuseScore (aktuell bekannt unter dem Namen MuseScore Studio) auf Version 4.0 ist zumindest hier ein proprietärer MEI-Import und -Export entstanden. Unser Ziel in diesem Projekt war die Weiterentwicklung der Konvertierungsfähigkeiten des meico Frameworks für die Konvertierung von MEI zu MusicXML.

Zum Anfang des Projekts wurde eine möglichst genaue Abbildung von MEI auf MusicXML konzipiert. Dieses musste sorgfältig geschehen, da in MEI viele Informationen sowohl in Elementen als auch in Attributen gespeichert werden können. Global gesehen teilt sich eine MEI-Datei in zwei große Abschnitte:

  1. meiHeader, welcher Metadaten beinhaltet;
  2. music, welches das Notenmaterial und interpretatorische Anweisungen beinhaltet.

Beide können aber u. a. auch Informationen über das Layout des Notentextes beinhalten. Als Analysebasis wurden die MEI Sample Encodings verwendet, die neben dem MEI-Code auch den gerenderten Notentext als PDF-Dateien mitliefern. Die Beispieldaten wurden außerdem mit Verovio gerendert. Diese Renderings wurden mit MusicXML-Renderings in MuseScore abgeglichen.

Im Projektzeitraum konnte die Verarbeitung und Abbildung des meiHeader komplett abgeschlossen werden, wobei viele bibliographische Inhalte als miscellaneous abgelegt wurden. Diese wurden aber so codiert, dass daraus ggf. wieder eine vollständige MEI generiert werden kann. Die Konvertierung der music-Umgebung ist auf die Übertragung des Notenmaterials fokussiert. Alle interpretatorischen Elemente, wie Bindebögen, Artikulationen, Tempi, etc. aber auch weitere Layoutangaben, wie Klammern, oder non-default Taktstriche überstiegen den zeitlichen Rahmen dieses Projektes und bleiben für ein Anschlussprojekt offen. Je nach Struktur der MEI werden pro Datei mehrere MusicXML-Dateien erstellt, pro mdiv-Element eine neue Datei. Dieses entspricht einem Satz in einem mehrsätzigen Werk, z. B. einem Satz in einer Sonate oder einer Arie in einer Oper.

MEI erlaubt redundante Codierungen, bei denen die gleichen Informationen an unterschiedlichen Stellen im XML-Baum codiert werden und sich sogar widersprechen können. Für die Prozessierung und Konvertierung stellte dies eine besondere Herausforderung dar, da MusicXML hier Eindeutigkeit fordert. Aus Gründen der Stabilität der Software war es auch wichtig, dass evtl. invalide MEI-Dateien verarbeitet werden können. Dieses bedeutet, dass der Bruch von Konventionen, z. B. bei der Setzung von Attributinhalten, oder der Reihenfolge von Elementen bei der Implementierung aktiv einbezogen werden mussten. Die Implementierungen wurden mit weiteren mehreren hundert MEI-Dateien aus verschiedenen aktiven Projekten getestet.

Die implementierten Algorithmen sind nicht nur umfangreich getestet, sondern bereits teilweise optimiert. Weiteres Potenzial für Optimierungen ist aber vorhanden und kann in Zukunft vorgenommen werden. Im meico GitHub Repository wurde darüber hinaus eine ausführliche Dokumentation des Mappings der Elemente und Attribute von MEI zu MusicXML hinterlegt, die durch detaillierte Code-Kommentare ergänzt wird.

Der Code dieses Projekts sowie kompilierte Assets (jar-Dateien) sind im Repository veröffentlicht und stehen unter der Open-Source-Lizenz GPL 3.0.

Axel Berndt und Matthias Nowakowski