(Version 2022_01_03)
Dieses Grundlagen-Tutorial zeigt Ihnen
Auf dieser Grundlage zeigen die Tutorials Part 2 und 3 Möglichkeiten der Darstellung und Visualisierung von Notentexten sowie einfacher statistischer Abfragen.
Ein Jupyter-Notebook ist eine Datei, die im Browser geöffnet und bearbeitet werden kann. Jedes Jupyter-Notebook besteht aus einer Folge von Textblöcken (Markdown cells) und Blöcken mit Python-Colde (Code cells). Beide Blöcke können von jedem User verändert und bearbeitet werden, indem innerhalb eines Blocks die Eingabetaste gedrückt wird. Eigene, veränderte Versionen des Notebooks können unter neuem Namen abgespeichert werden (Menu: File -> Save as...).
WICHTIG: Die Befehle jeder einzelnen Code cell werden mit dem Run-Button ausgeführt. Während der Ausführung (die bei manchen Befehlen einige Sekunden dauern kann) wird oben auf dem Browser-Tab ein Sanduhr-Symbol angezeigt. Anschließend werden ggf. Ergebnisse (oder Fehlermeldungen) angezeigt und der Cursor springt zur nächsten Box. Gehen Sie in den Tutorials jeweils Code cell für Code cell durch, aktivieren Sie den Code mit dem Run-Button und warten Sie ab, was geschieht!
In den Code Cells werden alle Zeilen hinter einem Rautezeicheen (#) nicht ausgeführt; dies bietet die Möglichkeit, entweder Erläuterungen zum Code in den Code cells zu vermerken oder zusätzliche deaktivierte Befehle zu vermerken, die durch Löschen der Raute (und anschließendem Run) ausgeführt werden.
# Mit den Befehlen können Sie selbstverständlich auch rechnen.
# Verändern Sie z.B. den folgenden Rechenbefehl:
21 * 7 + 1
# Drücken Sie bitte dann auf 'Run'!
Eine neue Cell wird mit dem +-Button oder den Menu-Punkt Insert erzeugt und kann dann im Menu als Markdown oder Code cell festgelegt werden. Hier können Sie Ihre eigenen Kommentare oder Befehle vermerken. (Und bitte nicht vergessen, das Notebook zuvor unter neuem Namen abzuspeichern!).
Parallel zum Notebook läuft ein Command-Fenster ("Anaconda Prompt"), das Sie nicht weiter beachten müssen - das Sie aber bitte auch nicht schließen! Beenden Sie ein Notebook bitte mit dem Menu-Befehl "File" -> "Close and Halt", loggen Sie sich dann aus und schließen Sie erst zum Schluss das Command-Fenster.
Jeder Start eines Jupyter Notebooks, in dem die Python-Bibliothek music21 verwendet wird, beginnt mit dem Import aller music21 - und zwar durch diesen einfachen Befehl:
from music21 import *
# mit diesem Befehl werden die music21-Bibliothek geladen:
# Klicken Sie also in die Zelle und dann auf den Button 'Run'!
# Dieser Befehl muss IMMER gestartet werden,
# wenn mit einem Notebook gearbeitet wird.
# Anschließend sind alle music21-Befehle sowie alle Stücke des music21-Corpus verfügbar.
Um eine Notendatei aus dem Internet aufrufen und als Partitur anzeigen und abspeichern zu können, müssen Sie ein Mal - und wirklich nur beim allerersten Mal! - music21 erlauben, Dateien aus dem Internet zu laden und in Ihrem Noteneditor (MuseScore) anzuschauen und abzuspeichern. Hierzu müssen Sie die Settings in der Datei 'music21-settings.xml' von music21 einrichten.
Dies ist in erster Linie bei Windows-Rechnern, aber auch bei manchen Mac-Betriebssystemen notwendig. Andere Mac-Betriebssyteme fragen die Settings bei der Ausführung interaktiv ab - was deutlich einfacher ist.
ACHTUNG: Im Folgenden sind alle Befehle durch eine Rautetaste (#) zu Beginn der Zeile deaktiviert. Sie müssen den jeweils durch Löschen der Raute aktivieren, zuvor gegebenenfalls durch Eingabe des Dateipfads auf Ihrem lokalen Computer anpassen, und anschließend auf 'Run' drücken. Sind die Settings erfolgreich angepasst, deaktivieren Sie die Befehle wieder - damit Sie sie nicht versehentlich erneut auslösen (etwa durch den Befehl 'Run All')!
Es gibt mehrere Möglichkeiten, die in den folgenden Code Cells erläutert und ausgeführt werden. Leider funktionieren nicht alle Möglichkeiten bei allen Betriebssytemen reibungslos. Daher werden im folgenden vier der Möglichkeiten vorgestellt.
Aktivieren Sie bitte die folgenden drei Befehlszeilen durch löschen des Rautezeichens (#) und klicken Sie auf "Run". Anschließend beantworten Sie bitte die angezeigten Fragen des 'music21 Configuration Assistant'.
# configure.run()
# settings = environment.UserSettings()
# settings['musescoreDirectPNGPath'] = settings['musicxmlPath']
Leider kann der Ordner, in dem automatisch alle Grafiken und andere Daten gespeichert werden, mit dem Assistenten jedoch nicht festgelegt werden. Sie können den Speicherplatz entweder bei jeder Abfrage individuell angeben, oder - was einfacher ist - den Pfad mit folgendem Befehl festlegen (bitte wieder die beiden #-Zeichen von run() löschen, anschließend 'Run' im Menu):
def run():
PfadAuswahl = str(input("Legen Sie einen Ordner fest, wo neu erzeugte Noten und Grafiken gespeichert werden. Bestätigen Sie anschließend mit Enter."))
settings = music21.environment.UserSettings()
# run()
# ACHTUNG: Bitte zunächst die gewünschten Pfade auf Ihrem Computer eintragen
# dann die Rautezeichen entfernen und schließlich auf den 'Run'-Button drücken:
# a. Hier zunächst die Befehle für die Integration Ihres Noteneditors
# (['musescoreDirectPNGPath'] und ['musicxmlPath']):
# settings = environment.UserSettings()
# settings['musescoreDirectPNGPath']='C:/Program Files/MuseScore 3/bin/MuseScore3.exe'
# settings['musicxmlPath']='C:/Program Files/MuseScore 3/bin/MuseScore3.exe'
# Bitte den Pfad auf Ihrem PC zur Datei 'MuseScore3.exe' eintragen
# (er liegt im bin-Ordner des Programm-Ordners, Bsp. s. unten);
# alternativ können Sie hier auch einen anderen Noteneditor (z.B. Sibelius) aktivieren.
# b. Außerdem müssen Sie einen Ordner festlegen,
# wo neu erzeugte Noten und Grafiken gespeichert werden:
# settings['directoryScratch']='C:/users/Name/Analyse'
# (Auch hier bitte wieder den gewünschten Pfad ergänzen, Rautezeichen entfernen, Run!)
# c. Schließlich der Befehl für die Erlaubnis des Downloads von Dateien aus dem Internet:
#settings['autoDownload']='allow'
# ... und der Integration des bevorzugten Notenformats:
#settings['showFormat']='musicxml'
#settings['writeFormat']='musicxml'
# ACHTUNG: Bitte zunächst die gewünschten Pfade auf Ihrem Computer eintragen
# dann die Rautezeichen entfernen und schließlich auf den 'Run'-Button drücken:
# a. Hier zunächst die Befehle für die Integration Ihres Noteneditors:
# Bitte den Pfad auf Ihrem PC zur Datei 'MuseScore3.exe' eintragen
# (er liegt im bin-Ordner des Programm-Ordners, Bsp. s. unten);
# alternativ können Sie hier auch einen anderen Noteneditor (z.B. Sibelius) aktivieren.
# Dann die Rautezeichen entfernen und schließlich auf den 'Run'-Button drücken:
# settings = environment.UserSettings()
# environment.set('musescoreDirectPNGPath', 'C:/Program Files/MuseScore 3/bin/MuseScore3.exe')
# environment.set('musicxmlPath', 'C:/Program Files/MuseScore 3/bin/MuseScore3.exe')
# b. Bitte im folgenden Befehl den Pfad eintragen,
# in dem die Grafik- und Notendateien gespeichert werden sollen.
# environment.set('directoryScratch', 'C:/users/Name/Analyse')
# c. Schließlich der Befehl für die Erlaubnis des Downloads von Dateien aus dem Internet:
environment.set('autoDownload','allow')
# Die Befehle ermöglichen den Zugriff auf die Settings-Datei
# und zeigen Ihnen den Pfad, wo sich die Settings-Datei befindet.
# (bitte zur Aktivierung das '#' vor dem Befehl ententfernen, dann 'Run')
settings = environment.UserSettings()
settings.getSettingsPath()
# Falls bei der Installation noch keine Settings-Datei generiert wurde,
# kann man Sie durch den folgenden Befehl erzeugen:
# settings.create()
# Dann erneut ausführen:
# settings = environment.UserSettings()
# settings.getSettingsPath()
WindowsPath('C:/Users/sugo9869/AppData/Roaming/music21-settings.xml')
Angezeigt ('Out[...]') wird nun der Pfad zu einer Datei mit dem Namen 'music21-settings.xml', die Sie in einem Texteditor ändern können, indem Sie in den einzelnen Zeilen Werte im Feld 'value' eintragen, z.B. 'allow' oder einen Daten-Pfad auf Ihrem Computer.
Die folgenden music21-Befehle werden außerdem auf der Website https://analyse.hfm-weimar.de/doku.php?id=music21 beschrieben.
Um aus dem Internet eine Datei zu aus dem Internet zu laden, müssen Sie lediglich mit der folgenden Syntax die Internet-Adresse des Files einfügen (rot markierter URL). Der URL kann der Notendatenbank entnommen werden, z.B. https://analyse.hfm-weimar.de/doku.php?id=mowo (Maus-Rechts-Klick auf den Link: "Link-Adresse kopieren"). Wir laden nun den ersten Satz des Streichquartetts No. 1, D-Dur, KV 80, von Wolfgang Amadeus Mozart.
music = converter.parse('https://analyse.hfm-weimar.de/database/03/MoWo_K80_COM_1-4_StringQuar_003_00838.xml')
# 'music' wird als Name (Variable) für die geladene ('geparste') Notendatei gewählt
Sie können sich die Datei auch zunächst auf Ihrem lokalen Rechner speichern (Maus-Rechts-Klick auf den Link: "Ziel speichern unter") und anschließend anstatt des URLs den lokalen Dateipfad eingeben. Auf diese Weise können Sie auch eigene Notendateien von Ihrer Festplatte einlesen:
# music = converter.parse('https://... lokaler Pfad ... / ... /MoWo_K155_COM_1-3_StringQuar_003_00842.xml')
# Geben Sie bitte Ihren lokalen Datei-Pfad ein (z.B. C:/analyse/MoWo_K155_COM_1-3_StringQuar_003_00842.xml)
# der Pfad darf nur /-Symbole, also kein \ enthalten!
# entfernen Sie vor der ersten Zeile (local = ...) das Rautezeichen (#) um den Befehl zu aktivieren.
# Drücken Sie bitte - wie immer - anschließend auf "Run".
Der 'converter.parse'-Befehl von music21 ist in der Lage, eine ganze Reihe unterschiedlicher Notenformate einzulesen - neben MusicXML (.xml) u.a. auch .krn, .abc, .mei und .mid (Midi). Eine Liste der konvertierbaren Notendatenformate finden Sie hier: https://web.mit.edu/music21/doc/moduleReference/moduleConverter.html
Sie können sich das Stück auch im Browser anhören - allerdings nur in einer Version mit MIDI-Klängen und wenn als Browser Firefox oder Chrome verwendet wird.
music.show('midi')
# Wenn einem die MIDI-Sounds nicht gefallen und man sich andere Sounds einstellen will, muss man diese Einstellungen im xml-Datei vornehmen.
# Sie können den Befehl immer einsetzen, wenn Sie sich etwas anhören wollen;
# evtl. müssen Sie dabei die Variable 'local' verändern / anpassen.
music21-Befehle sind in der Regel nach dieser Syntax aufgebaut: Am Beginn steht die Variable ('music'), die Sie selbst definiert haben. Dann folge der music21-Befehl ('show') - oder eine Reihe von Befehlen - und schließlich ein Attribut, wie der Befehl ausgeführt werden soll (hier: als 'midi' gezeigt bzw. abgespielt).
Die gesamte in der MusicXML gespeicherte Metadaten zum untersuchten Werk (Komponist, Werktitel, Entstehungsjahr, usw.) können mit dem folgenden Befehl angezeigt werden:
music.metadata.all()
[('None', 'Edmund Correia, Jr.'), ('composer', 'Mozart, Wolfgang Amadeus'), ('copyright', 'Copyright (c) 1994, 2000 Center for Computer Assisted Research in the Humanities'), ('countryOfComposition', 'Österreich'), ('movementName', 'Adagio'), ('movementNumber', 'Mvmt. 1'), ('title', 'String Quartet No. 1 in G Major')]
Notendaten können komplett oder in Ausschnitten, Stimmen etc. angezeigt werden. Bei längeren Stücken wird allerdings nur der Anfang im Browserfenster angezeigt. Zur Ansicht der kompletten Datei müssen Sie diese im Noteneditor öffnen.
music.show()
# zeigt den Beginn des Notentexts an.
# Das kann ein paar Sekunden dauern...
music.measures(3,5).show()
# Takt drei bis 5 wird ausgewählt.
len(music.parts)
# Die Anzahl der Stimmen (parts) wird abgefragt.
music.parts[0].measures(3,5).show()
# Die erste Stimme (parts[0]) wird ausgewählt und hiervon Takt 3-5 dargestellt.
# WICHTIG: Die Zählung der Stimmen beginnt nicht mit 1, sondern mit 0!
music.parts[0].write()
# Mit dem Befehl write wird eine neue xml-Datei geschrieben,
# die in Ihrem "Scratch"-Ordner abgespeichert wird (vgl. oben: settings['directoryScratch']),
# wobei Ihnen der Dateiname gennannt wird.
# Alternativ können Sie jedoch auch einen selbst gewählten Pfad- und Dateiname angegeben:
# music.parts[0].write(fp="D:/Dokumente/mozart_violine1.xml")
# Löschen Sie die # vor dem Befehl,
# geben Sie den lokalen Dateinnamen und -pfad an und drücken Sie auf Run!
# Hier eine alternative Methode: Man definiert eine neue Variable ('excerpt')
excerpt = music.parts[0].measures(2,4)
# als 'excerpt' wird die oberste Stimme (parts[0]) und daraus die Takte 2-4 ausgewählt.
excerpt.show()
# Der Ausschnit 'excerpt' wird dargestellt.
excerpt.write()
# Der Ausschnitt 'excerpt' wird lokal im Scratch-Ordner gespeichert
# Alternativ können Sie einen eigenen Pfad und Namen festlegen, s. oben.
# und schließlich: anhören!
excerpt.show('midi')
Zur Verwendung in anderen Computeranwendungen (Word, Powerpoint) können die Grafiken (als png-Datei) selbstverständlich exportiert werden:
Laden Sie weitere Notendateien aus dem Notenarchiv (https://analyse.hfm-weimar.de/doku.php?id=komponisten) oder von Ihrer Festplatte. Testen Sie an diesen Dateien die hier vorgestellten Befehle.
Überlegen Sie sich dazu analytische Fragestellungen: Was würden Sie gerne über die Kompositionen erfahren?