Nachdem die stilistischen Marker für C64-Musik definiert wurden, folgt der eigentliche Prozess der Feature-Extraktion. Dieser Schritt ist entscheidend, da er die Brücke zwischen den konvertierten Rohdaten, d.h. MIDI-Dateien, und den Features schlägt, die für die stilometrische Analyse verwendet werden.
Vier Schritte von der Auswahl zur Validierung
Der Feature-Extraktionsprozess kann, wie bereits zuvor auch schon im Rahmen der Grundlagen skizziert, in mehrere Teilschritte unterteilt werden:
-
Auswahl der zu extrahierenden Features
Basierend auf den definierten stilistischen Markern wird festgelegt, welche spezifischen Features aus den Daten extrahiert werden sollen. Diese Auswahl wird durch die Forschungsfragen, die technischen Möglichkeiten und die musikwissenschaftliche Relevanz bestimmt. -
Implementierung der Extraktionslogik
Für jedes ausgewählte Feature muss eine spezifische Extraktionslogik implementiert werden. Für Standardmerkmale wie Tonhöhenverteilung oder Notendauerverteilung können etablierte Bibliotheken wiemusic21,jSymbolicodermusifsehr gut verwendet werden, die bereits entsprechende Funktionen bereitstellen. Für diese Arbeit wurde sich für eine Extraktion mittelsmusifentschieden aufgrund der bereits implementierten Möglichkeit eigene Features zu definieren. -
Anwendung der Extraktionslogik auf den Datensatz
Die implementierte Extraktionslogik wird auf alle Musikstücke im ausgewählten Korpus angewendet. Dies kann durch Schleifen über die MIDI-Dateien erfolgen. Die Ergebnisse der Extraktion werden in der typischen CSV-Datenstruktur basierend auf Pandas DataFrames gespeichert. -
Validierung und Überprüfung der extrahierten Features
Ein letzter, aber wichtiger Schritt ist es die extrahierten Features zu validieren und zu überprüfen, um sicherzustellen, dass diese korrekt und vollständig sind.
Erstellung und Übersicht des Feature-Datensatzes
Nachfolgend wird eine umfassende tabellarische Übersicht der verschiedenen Funktionen und deren Eigenschaften dargestellt, um einen klaren und strukturierten Überblick zu gewährleisten. Diese detaillierte Aufstellung soll es ermöglichen, die einzelnen Features präzise zu verstehen und ihre jeweiligen Einsatzmöglichkeiten und Spezifikationen nachvollziehen zu können.
Die Tabelle beinhaltet unter anderem Beschreibungen der Kernfunktionalitäten, relevanter technischer Details und potenzieller Anwendungsfälle.
Feature-Katalog im Überblick
| Kategorie | Feature | Beschreibung | Datengrundlage |
|---|---|---|---|
| Melodische | Tonhöhenverteilung (Pitch Class Histogram) | Häufigkeit des Auftretens jeder Tonhöhe im Musikstück. | MIDI-Daten |
| Melodische | Tonumfang | Durchschnitt-licher Bereich der verwendeten Tonhöhen. | MIDI-Daten |
| Melodische | Intervalle | Häufigkeit und Art der in Melodien verwendeten Intervalle. | MIDI-Daten |
| Melodische | Melodische Konturen | Verlauf der Melodielinie (aufsteigend, absteigend, gleich- bleibend). | MIDI-Daten |
| Melodische | Arpeggiation | Häufigkeit, Geschwindig-keit, Muster, Dauer und Größe von Arpeggio- Sequenzen. | Separate Stimmspuren der MIDI-Dateien, SSF-Daten (SID Sound Fragments) |
| Rhythmische | Notendauerverteilung | Häufigkeit verschiedener Notendauern (ganze, halbe, Viertelnoten etc.). | MIDI-Daten |
| Rhythmische | Rhythmische Dichte | Anzahl der Noten pro Zeiteinheit. | MIDI-Daten |
| Rhythmische | Synkopierung | Maße für das Auftreten von Synkopierung (betonte Noten auf unbetonten Zählzeiten). | MIDI-Daten |
| Rhythmische | Rhythmus im Rauschkanal | Analyse der rhythmischen Muster, die im Rauschkanal erzeugt werden (oft für Perkussion verwendet). | Separate Rauschkanal-Spur der MIDI-Daten oder SSF-Daten |
| Harmonische | Tonart | Ermittelte Tonart des Musikstücks. | MIDI-Daten (ggf. music21) |
| Harmonische | Modus | Dur- oder Moll-Modus des Musikstücks. | MIDI-Daten (ggf. music21) |
| Harmonische | Konsonanz/Dissonanz | Maße für das Auftreten von Konsonanz und Dissonanz basierend auf gleichzeitig klingenden Tönen oder Intervall- mustern in Arpeggios. | MIDI-Daten (ggf. music21) |
| Harmonische | Polyphoniegrad | Anzahl der gleichzeitig klingenden Stimmen (meist begrenzt auf maximal drei bei SID-Musik). | MIDI-Daten |
| Timbrale/Texturale | Stimmbenutzung | Anzahl gleichzeitig aktiver Stimmen und ihre Zuweisung zu musikalischen Rollen. | Separate Stimmspuren der MIDI-Dateien, ggf. Registerdaten |
| Timbrale/Texturale | Wellenformbenutzung | Häufigkeit der Auswahl der Grund- wellenformen (Dreieck, Sägezahn, Puls, Rauschen) pro Stimme. | Registerdaten |
| Timbrale/Texturale | Pulsbreitenmodulation (PWM) | Häufigkeit, Tiefe und Geschwindig- keit von PWM- Änderungen. | Registerdaten |
| Timbrale/Texturale | Filterbenutzung | Häufigkeit der Filter- aktivierung, Nutzung von Filter- Sweeps (Änderungen der Cutoff- Frequenz) und Resonanz. | Registerdaten |
| Timbrale/Texturale | Nutzung von Ringmodulation und Oszillator-Synchronisation | Vorkommen dieser fort- geschrittenen Techniken. | Registerdaten |
Feature-Extraktion und Analyse musikalischer Daten mithilfe von musif
Wie bereits kurz in dem Kapitel zu den gängigsten Software-Bibliotheken zur Feature-Extraktion als Teil der Grundlagen der Digitalen Musikwissenschaft und Ludomusikologie ist musif eine Open-Source-Python-Bibliothek (GitHub Repo) speziell für die automatisierte Extraktion charakteristischer Merkmale aus digitalen Musikpartituren. Sie ist vor allem für die musikwissenschaftliche Forschung entwickelt. Hierbei baut sie im Wesentlichen auf der bekannten Bibliothek music21 auf und erweitert die Möglichkeiten.
Das Tool wurde von einem interdisziplinären Expertenteam entwickelt, um wissenschaftlich valide Ergebnisse zu liefern und gleichzeitig Anpassbarkeit, Erweiterbarkeit und Benutzerfreundlichkeit zu gewährleisten. Es ist modular aufgebaut und verwendet eine zweistufige Verarbeitung: der FeaturesExtractor identifiziert musikalische Merkmale, während der DataProcessor die Daten für die Analyse vorbereitet. Musif unterstützt verschiedene Musikformate, wobei MusicXML aufgrund seiner Präzision bevorzugt wird, und bietet eine umfangreiche Palette vordefinierter Merkmale zur Analyse von Aspekten wie Harmonie, Rhythmus oder Dynamik. Um die Effizienz bei der Verarbeitung großer Datenmengen zu optimieren, nutzt Musif ein Caching-System und Parallelverarbeitung, was die Analysezeiten erheblich verkürzt und es zu einem leistungsstarken Werkzeug für umfassende musikwissenschaftliche Studien macht.
Diese Einordnung der Python-Bibliothek musif begründet gleichzeitig auch deren Anwendung im Rahmen dieser Arbeit zum Feature Engineering und zur Feature-Extraktion als Teil der Methodik. Das Hauptziel dieses Tools, die automatisierte Extraktion charakteristischer Merkmale aus symbolischen Musikdaten, primär für musikwissenschaftliche Korpusstudien, ist dabei nahezu deckungsgleich mit den definierten Zielen dieser Arbeit. Wenngleich es auch für andere Repertoires, wie die italienische Oper des 18. Jahrhunderts, Renaissance- oder Popmusik, entwickelt und getestet wurde ist die Bibliothek auch offen für andere Anwendungsbereiche konzipiert worden/Getting advanced.
musif ist modular aufgebaut. Die Implementierung gliedert sich methodisch in zwei Hauptphasen, die durch spezifische Python-Objekte gesteuert werden: den FeaturesExtractor und den DataProcessor. Der FeaturesExtractor ist für die primäre Merkmalsextraktion aus den Musikpartituren zuständig und generiert einen pandas.DataFrame mit den extrahierten Merkmalen. Optional kann die Analyse auch fensterbasiert erfolgen, wobei jede Zeile des DataFrames einem Zeitfenster (z.B. Takten) entspricht. Der DataProcessor führt nach der Extraktion eine Nachbearbeitung des DataFrames durch, welche die Bereinigung von Daten (z.B. Ersetzen von NaN-Werten), das Zusammenführen oder Entfernen von Spalten sowie die Aggregation von Merkmalen umfasst. Beide Objekte sind hochgradig konfigurierbar und können über YAML-Dateien oder direkte Schlüssel-Wert-Argumente gesteuert werden..
Vier Designprinzipien für Anpassbarkeit und Effizienz
Diese Designprinzipien von musif reflektieren das interdisziplinäre Fundament, welches die Anforderungen der Musikwissenschaft mit den Möglichkeiten der Computerwissenschaft und Statistik vereint, um ein robustes und vielseitiges Werkzeug für die Musikanalyse zu schaffen und umfassen:
-
Anpassbarkeit und Erweiterbarkeit: Das Framework ist darauf ausgelegt, benutzerdefinierte Anforderungen durch die Einführung neuer Features oder die Modifikation bestehender Prozesse zu erfüllen. Dieses Prinzip gewährleistet, dass das System flexibel an spezifische Forschungsfragen angepasst werden kann, indem neue Funktionalitäten hinzugefügt oder bestehende Extraktionspipelines modifiziert werden.
-
Benutzerfreundlichkeit: Trotz seiner inhärenten Komplexität wurde musif so konzipiert, dass es auch für Anwender mit minimaler technischer Expertise zugänglich ist, wobei Musikwissenschaftler als primäre Zielgruppe identifiziert wurden. Dies wird durch die Bereitstellung einer intuitiven Benutzeroberfläche mit optimierten Standardeinstellungen sowie durch eine umfassende Dokumentation und detaillierte Tutorials für Einsteiger und Fortgeschrittene unterstützt.
-
Unterstützung musikwissenschaftlicher Annotationsformate: Ein besonderes Augenmerk wurde auf die Kompatibilität mit Dateiformaten gelegt, die reichhaltige musikologische Annotationen ermöglichen, insbesondere MusicXML. Dies ist entscheidend, um die Verarbeitung hochwertiger, musikologisch kuratierter Datensätze zu gewährleisten.
-
Effizienz für Big Data Analysen: Um die Leistungsfähigkeit des Frameworks bei der Verarbeitung großer Datenmengen zu gewährleisten, wurden Maßnahmen zur Optimierung der rechnerischen Effizienz auf handelsüblichen Computersystemen implementiert. Dazu gehört insbesondere ein Caching-System, das die Verarbeitungszeiten erheblich reduziert.
Während musif primär für die Verarbeitung hochwertiger musikologischer Daten im MusicXML-Format konzipiert wurde, unterstützt musif trotzdem eine Vielzahl weiterer Standard-Dateiformate, die in der Computergestützten Musikwissenschaft gebräuchlich sind, darunter MIDI, MEI und Kern.
Zwölf Module vordefinierter Merkmale
musif bietet einen umfangreichen Satz vordefinierter Standard-Merkmale (Stock Features), die in verschiedene Module unterteilt sind, um eine gezielte musikalische Analyse zu ermöglichen. Diese Merkmale sind für Musikwissenschaftler und Musiktheoretiker bedeutsam und ermöglichen die Interpretation statistischer Ergebnisse. Zu den Hauptmodulen/FeatureDefinition gehören:
- Core-Merkmale: Grundlegende Identifikations- und Strukturdaten wie Dateiname, Taktnormen, Notenzahl, Taktarten und Tonart
- Besetzung (Scoring): Informationen zur Instrumentierung und den verwendeten Stimmen
- Tonart (Key): Merkmale bezüglich Tonart und Tonalität des Stücks, inklusive Krumhansl-Schmuckler-Tonalitätsschätzung und Modus (Dur/Moll)
- Tempo: Daten zu Tempoangaben in der Partitur, mit der Einschränkung einer variierenden Zuverlässigkeit je nach Repertoire
- Dichte (Density): Merkmale zur Notendichte in Bezug auf die Gesamtzahl der Takte oder klingende Takte für eine bestimmte Stimme oder Familie
- Harmonie: Modul basierend auf harmonischen Annotationen in MuseScore-Dateien zur Extraktion von Akkordfunktionen, harmonischen Rhythmus und Modulationen
- Rhythmus: Merkmale mit Bezug auf die Notendauern und spezifische rhythmische Figuren wie punktierte Rhythmen
- Skala (Scale): Merkmale im Zusammenhang mit bestimmten Skalengraden, sowohl in Bezug auf die Haupttonart als auch auf lokale Tonarten
- Dynamik: Merkmale zur Verteilung dynamischer Angaben in der Partitur
- Ambitus: Der melodische Bereich (Ambitus) des Stücks in Halbtönen, einschließlich der höchsten und tiefsten Tonhöhen
- Melodie: Eine große Sammlung von Merkmalen zur Verteilung und Art melodischer Intervalle
- Liedtext (Lyrics): Wenn verfügbar, Merkmale zur Ausrichtung von Liedtexten und Noten
- Textur: Das Verhältnis der Notenzahl zwischen zwei Stimmen
Eigene Merkmale selbst definieren
musif ermöglicht, wie bereits erwähnt, darüber hinaus die Implementierung benutzerdefinierter Merkmale (Custom Features), die entweder einmal pro Partitur (basic features) oder für jedes Zeitfenster (generic features) berechnet werden können/FeatureDefinition. Jedes benutzerdefinierte Merkmal erfordert die Implementierung von zwei Funktionen:
-
update_part_objects: Diese Funktion berechnet Merkmale für jeden einzelnen Part in der Partitur oder im Fenster. -
update_score_objects: Diese Funktion führt globale Berechnungen für die gesamte Partitur oder das Fenster durch, eventuell unter Verwendung der auf Part-Ebene berechneten Merkmale. Die Signaturen dieser Funktionen umfassen Dictionaries wie score_data (Daten aus der Partitur oder dem Cache), part_data (Daten des aktuell analysierten Parts), cfg (Konfigurationsobjekt) und parts_features sowie score_features (bereits berechnete Merkmale). Es ist strikt zu beachten, dass music21-Objekte innerhalb dieser Funktionen niemals modifiziert werden sollten, insbesondere wenn das Caching-System verwendet wird. Die modulare Struktur ermöglicht die Integration benutzerdefinierter Features als Python-Paket, Klasse oder Modul.
Caching: Bis zu fünffach schnellere Extraktion
Das Caching-System zur Leistungsoptimierung speichert music21-Objekte in einem serialisierbaren Format auf der Festplatte, was die für das Parsen benötigte Zeit bei wiederholten Läufen erheblich reduziert. In Experimenten konnte eine 2- bis 3-fache Beschleunigung der Codeausführung durch die Nutzung des Caches erzielt werden/Caching. Für MIDI-Dateien kann der Extraktionsprozess um den Faktor fünf beschleunigt werden. Bei MusicXML- und Kern-Dateien, wo musif und music21 dieselbe Parser-Engine nutzen, ermöglicht das Caching-System eine Reduktion der Extraktionszeiten um 50 %. Es ist jedoch zu beachten, dass die gecachten Objekte nur zum Lesen und nicht zum Schreiben verwendet werden können. Um Modifikationen an den geparsten Partituren vor dem Caching zu ermöglichen, wurden “Hooks” eingeführt, die es dem Benutzer erlauben, Funktionen in spezifischen Phasen des Extraktionsprozesses auszuführen/Hooks. Des Weiteren bietet musif im Gegensatz zu einigen anderen Tools eine out-of-the-box-Unterstützung für die Parallelverarbeitung großer Korpora, was die Gesamtbearbeitungszeit signifikant reduziert.
Die vom FeaturesExtractor generierten Daten können eine hohe Dimensionalität aufweisen und fehlende Werte (NaN) enthalten. Der DataProcessor von musif dient daher dazu, diese Rohdaten zu bereinigen und zu transformieren. Dies umfasst das Ersetzen oder Entfernen von NaN-Werten, das Zusammenführen von Spalten zur Reduzierung der Gesamtanzahl der Features und das Entfernen irrelevanter “First-Order”-Features. Die Behandlung fehlender Werte ist ein zentraler Aspekt, und musif bietet eine hybride Strategie, die das Entfernen von Zeilen oder Spalten basierend auf bestimmten Heuristiken ermöglicht.
Der musifAnsatz: Tools kombinieren statt isolieren
Ausführliche Untersuchungen im Rahmen des Didone-Projektes von Simonetta et al, die musif mit anderen etablierten Tools wie jSymbolic und music21 verglichen haben, zeigen, dass die optimale Feature-Extraktion oft durch die Kombination von Merkmalen aus mehreren Tools erreicht wird, anstatt sich auf ein einziges zu verlassen.
Für MIDI-Dateien ist jSymbolic grundlegend für die Modellgenauigkeit, aber die Integration von musif und music21 kann die Leistung im Allgemeinen verbessern. Während jSymbolic in einigen Fällen ohne Parallelverarbeitung, insbesondere bei MIDI-Dateien, aufgrund der Leistungsfähigkeit von Java schneller sein kann bietet musif eine signifikant größere Anzahl von Features und ist darauf ausgelegt, die reichhaltigeren Informationen aus MusicXML, MEI und Kern-Dateien voll auszuschöpfen, die von music21 geparst werden.
Neuere Versionen von musif integrieren die gesamten music21- und jSymbolic-Tools, um die Extraktion kombinierter Feature-Sets aus großen Korpora zu erleichtern.
Weiterführende Literatur
-
Cuthbert, M. S., Ariza, C., & Friedland, L. (2011). Feature Extraction and Machine Learning on Symbolic Music Using The Music21 Toolkit. ISMIR 2011. https://web.mit.edu/music21/papers/Cuthbert_Ariza_Friedland_Feature-Extraction_ISMIR_2011.pdf
-
Llorens, A., Simonetta, F., Serrano, M., & Torrente, Á. (2023). Musif: A Python Package for Symbolic Music Feature Extraction. https://doi.org/10.5281/ZENODO.8341211
-
musif. (2025). Musif 1.0.1 Documentation [Package Documentation]. https://musif.didone.eu/
-
Simonetta, F. (2025). Style-Based Composer Identification and Attribution of Symbolic Music Scores: A Systematic Survey. https://doi.org/10.48550/ARXIV.2506.12440
-
Simonetta, F., Llorens, A., Serrano, M., García-Portugués, E., & Torrente, Á. (2023). Optimizing Feature Extraction for Symbolic Music. Proceedings of the 24th International Society for Music Information Retrieval Conference, 802–809. https://doi.org/10.5281/zenodo.10265409