Mathematisch-Naturwissenschaftliche Fakultät II Institut für Informatik Automatisiertes Motivsuchen in Musikwerken im MusicXML Format von Andreas Lehmann Gutachter: Prof. Dr. Wolfgang Coy Prof. Dr. Reiner Kluge Datum: 12. Juni 2009 Betreuer: Dr. Jochen Koubek SELBSTSTÄNDIGKEITSERKLÄRUNG Ich erkläre hiermit, dass ich die vorliegende Arbeit selbstständig und unter Verwendung der angegebenen Quellen und Hilfsmittel angefertigt habe. Berlin, den 12. Juni 2009 Andreas Lehmann 2 INHALTSVERZEICHNIS Vorwort ......................................................................................................................................................... 5 1 2 3 4 Musikalische Grundlagen zu Motiven und Motivverarbeitungen ................................................ 7 1.1 Der Motivbegriff ......................................................................................................................... 7 1.2 Motivverarbeitungsformen ...................................................................................................... 11 1.3 Manuelle Suche nach Motiven und Motivverarbeitungen in drei Beispielwerken ......... 15 Das MusicXML-Format ................................................................................................................... 21 2.1 Die Beschreibungssprache MusicXML ................................................................................. 21 2.2 Abbildungsform der Noteninformationen in MusicXML .................................................. 22 2.3 Aufbau einer MusicXML-Datei .............................................................................................. 24 2.4 Validität eines MusicXML-Dokuments je nach Erstellungsart .......................................... 28 Das Konzept des Motivanalysealgorithmus ................................................................................. 31 3.1 Die Idee der Konturanalyse zur Erweiterung des MusicXML-Datenbestands .............. 31 3.2 Konzept zur separaten Abspeicherung der Noteninformationen ..................................... 36 3.3 Systematischer Bezug der Motivverarbeitung zum Originalmotiv .................................... 38 3.3.1 Originalmotiv / Wiederholung ....................................................................................... 38 3.3.2 Imitation ............................................................................................................................. 39 3.3.3 Sequenz .............................................................................................................................. 39 3.3.4 Umkehrung ........................................................................................................................ 42 3.3.5 Krebs .................................................................................................................................. 46 3.3.6 Spiegelkrebs ....................................................................................................................... 50 3.3.7 Intervallweitung ................................................................................................................ 52 3.3.8 Intervallengung ................................................................................................................. 53 3.3.9 Augmentation .................................................................................................................... 54 3.3.10 Diminution ........................................................................................................................ 55 3.3.11 Weitere Formen ................................................................................................................ 56 Der Algorithmus................................................................................................................................ 57 4.1 Das Einlesen und Abspeichern der Quelldaten ................................................................... 57 4.1.1 Einlesen genereller Informationen: Notenschlüssel, Tonart und Taktart ................ 60 4.1.2 Einlesen der Tonhöhe ...................................................................................................... 63 4.1.3 Einlesen und Berechnen der Notenwerte ..................................................................... 66 3 4.2 Problem- und Sonderfälle beim Einlesen aus MusicXML .................................................. 71 4.2.1 Betrachtung von Akkorden vor der Konturanalyse .................................................... 71 4.2.2 Instrumente mit zwei Systemen in MusicXML ........................................................... 74 4.2.3 Überbindungen.................................................................................................................. 77 4.2.4 Punktierte Noten............................................................................................................... 78 4.2.5 Vorschlagsnote .................................................................................................................. 80 4.2.6 Alterationen ....................................................................................................................... 80 4.3 Erweiterung des MusicXML-Datenbestands für die Konturanalyse ............................... 82 4.3.1 Indizierung der Notenlage ............................................................................................... 82 Die chromatische Notenlage ....................................................................................................... 82 Die diatonische Notenlage ........................................................................................................... 85 4.3.2 Implementierung der Musikalischen Konturen............................................................ 86 Der Parsons-Code ......................................................................................................................... 86 Die diatonische Kontur ................................................................................................................ 87 Die Chromatische Kontur ........................................................................................................... 87 Die Pause und deren Auswirkung auf die Motivkontur .......................................................... 87 5 4.4 Allgemeine Funktionsweise des Motivanalyseprogramms .................................................. 89 4.5 Extraktion der Daten je nach Verbindungstyp ..................................................................... 92 4.6 Erstellung eines Strings aus dem multidimensionalen Array .............................................. 96 4.7 Kriterien zum Auffinden von Motiven ................................................................................. 98 4.8 Die Motivsuche ......................................................................................................................... 99 4.9 Berechnung der Motivverarbeitungsformen ....................................................................... 102 4.10 Reduktion und Transformation der Noteninformationen ................................................ 104 4.11 Die Motivanalysefunktion ...................................................................................................... 110 4.12 Die Einordnung der Ergebnisse zu möglichen Motivverarbeitungsformen .................. 112 Fazit und Ausblick ........................................................................................................................... 116 Anhang ...................................................................................................................................................... 122 1 Noten der Musikbeispiele................................................................................................................ 122 2 Quellenverzeichnis ........................................................................................................................... 142 4 VORWORT „Wenn Ihnen ‘Mein kleiner grüner Kaktus‘ von den Comedian Harmonists gefällt, dann könnten Ihnen auch folgende Lieder gefallen.“ Hinter solchen Sätzen, die CD-Verkäufe von OnlineMusikshops ankurbeln sollen, steckt neuerdings eine Software, die musikalische Ähnlichkeiten zwischen Musikwerken erkennt. Eine solche Software ist beispielsweise Pandora, die auf Basis von über 400 zugewiesenen subjektiven Attributen wie „Sax playing“, „Slow moving Bass Line“ oder „Emotional Female Lead Vocal Performance“ Ähnlichkeiten zwischen Musikwerken aus einer Datenbank abfragt. Diese Attribute werden von Experten des „Music Genome Project“ ständig ergänzt.1 Eine Alternative stellt der vom Fraunhofer-Institut entwickelte MPEG7Standard dar. Eine Komponente von MPEG7 ist die Analyse einer Melodiekontur z.B. in einer Audio-Datei. So können Gemeinsamkeiten zwischen Musikstücken gefunden werden. Die Firma mufin von Magix bietet eine Software mit der MPEG7-Implementierung an. Dieser Diplomarbeit liegt ein Algorithmus zugrunde, welcher die Idee des MPEG7-Standards − die Suche nach einer Melodiekontur − aufgreift und erweitert. Grundlage der Musikanalyse ist eine MusicXML-Datei. MusicXML ist ein Dateiformat zur Beschreibung von Musiknoten sowie deren Darstellung in einer Partitur. Es basiert auf der Auszeichnungssprache XML und besitzt eine eigene Dokumenttypdefinition (DTD). Das Ziel dieser Arbeit ist das automatisierte Finden von Motiven und deren Motivverarbeitungen innerhalb eines Musikwerkes. Ein Motiv ist die kleinste musikalische Zelle, der Grundbaustein eines Musikstückes: ein Melodiefragment aus wenigen Noten. Aus mehreren zusammengesetzten Motiven bzw. Motivverarbeitungen entstehen Phrasen und später ganze Melodien. Motivverarbeitungen sind Möglichkeiten, ein Motiv so umzugestalten, dass ein Musikstück interessant bleibt und stets in sich geschlossen wirkt. Als bekannteste Motivverarbeitungen sind die Sequenz (Wiederholung auf einer anderen Tonstufe) und Krebs (das Rückwärtssetzen des Motivs) zu nennen. Als Weiterentwicklung der Ergebnisse der Diplomarbeit kann eine Datenbank mit Motiven und Motivverarbeitungen erstellt werden, die zur Plagiatssuche dient oder Empfehlungen gibt, welche Musikwerke zu anderen Musikwerken ähnlich klingen. Das erste Kapitel der Diplomarbeit befasst sich mit den musikalischen Grundlagen rund um den Begriff Motiv sowie Motivverarbeitungsformen. Unterschiedliche Definitionen werden zu einer neuen Motivdefinition zusammengefasst. Die wichtigsten Motivverarbeitungsformen werden vorgestellt. Im zweiten Kapitel wird das MusicXML-Format sowie die Beschreibung von musikalischen vgl. Pandora Radio - Listen to Free Internet Radio, Find New Music: "The Music Genome Project". URL: http://www.pandora.com/mgp.shtml [Stand: 8. März 2009] 1 5 Elementen mit MusicXML behandelt. Hier werden alle relevanten Elemente vorgestellt, die in MusicXML für die Motivanalyse benötigt werden. Es folgt im dritten Kapitel die Vorstellung des Konzepts des Motivanalysealgorithmus. Dabei ist vor allem der für den Algorithmus benötigte Datenbestand von Interesse. Zu jeder Motivverarbeitungsform werden Abbildungsvorschriften aus mathematischer Sicht erstellt, um aus einem Motiv Motivverarbeitungen ableiten zu können. Schließlich wird der Motivanalysealgorithmus selbst vorgestellt. Im Mittelpunkt steht dabei die Extraktion des Datenbestands aus einem MusicXML-Dokument, auf welche Weise ein Motiv von einem Algorithmus gefunden werden kann und wie Motivverarbeitungen durch den Algorithmus identifiziert werden können. Außerdem erfolgt die Auseinandersetzung mit verschiedenen Problemen, die mit einer automatisierten Motivsuche und -analyse in Verbindung stehen. Im letzten Kapitel werden schlussendlich Anwendungsmöglichkeiten für den Algorithmus vorgestellt. Außerdem werden Möglichkeiten, den Algorithmus zu erweitern, betrachtet. 6 1 MUSIKALISCHE GRUNDLAGEN ZU MOTIVEN UND MOTIVVERARBEITUNGEN Musikalische Motive sind Hörern im Alltag sehr bekannt. Sei es das markante Anfangsmotiv der „5. Sinfonie” von Ludwig van Beethoven, das auffällige Gitarrenriff in „Smoke on the water“ von Deep Purple oder das Mundharmonika-Motiv von „Spiel mir das Lied vom Tod“ aus dem gleichnamigen Spielfilm. Nachdem der Motivbegriff erklärt wird, soll eine Analyse an drei gewählten Musikbeispielen erfolgen, um die Existenz von Motiven und Motivverarbeitungen zu verdeutlichen. 1.1 DER MOTIVBEGRIFF Der dtv-Atlas zur Musik beschreibt das Motiv als „kleinste, meist melodische Sinneinheit, ein typisches und einprägsames Gebilde, definiert durch die Kraft der Verselbstständigung.“ 2 Im ABC Musik wird Motiv als kleinster Baustein bezeichnet, der eine „unverwechselbare, musikalisch sinnvolle Einheit“ 3 darstellt. Theodor Wiehmayer erklärt in seiner Publikation „Musikalische Formenlehre in Analysen“, die sich zu einem großen Teil mit der Thematik Motiv beschäftigt, dass das Motiv der kleinste organische Bestandteil der Tonsprache ist und sich Urformen des musikalischen Rhythmus in griechischen Versfußformen befinden.4 Michels, U. (2005): Musiklehre/Form II, dtv-Atlas Musik, Band 1, Systematischer Teil Musikgeschichte von den Anfängen bis zur Renaissance. München: Deutscher Taschenbuch Verlag GmbH & Co. KG, 106. 3 Ziegenrücker, W. (1997) Das Motiv, ABC Musik – Allgemeine Musiklehre. Leipzig: Deutscher Verlag für Musik, Wiesbaden: Breitkopf & Härtel, 173 f. 4 vgl. Wiehmayer, T. (1927) Grundfragen der metrischen Analyse, Musikalische Formenlehre in Analysen. Magdeburg: Heinrichshofen’s Verlag, 1 ff. 2 7 Die Motiverklärungen lassen sich zu folgender Motivdefinition zusammenfassen: Ein Motiv ist der kleinste Baustein der musikalischen Sprache, der melodisch und rhythmisch prägnant ist und die Kraft hat, sich zu verselbstständigen. Die Elemente eines Motivs sind der Rhythmus sowie der Melodieverlauf, welcher sich in Intervallen widerspiegelt. Die Analyse dieser beiden Elemente wird im Motivanalysealgorithmus wesentlich sein. Daher ist zunächst der Begriff Intervall zu klären. Der Abstand zwischen zwei zeitlich hintereinander gespielten Noten wird als melodisches Intervall bezeichnet. Erklingen zwei Noten gleichzeitig, ist der Abstand zwischen diesen beiden Noten als ein harmonisches Intervall zu bezeichnen.5 Es werden Intervalle des diatonischen und des chromatischen Raumes unterschieden. Im diatonischen Raum werden immer nur Noten aus dem Tonvorrat der gerade vorherrschenden Tonart verwendet.6 Der gesamte Tonvorrat besteht aus zwölf Tönen (Halbtonschritten) − c, cis/des, d, dis/es, e, f, fis/ges, g, gis/as, a, ais/b und h. Innerhalb einer Tonart werden aber nur sieben Töne verwendet, die je nach Tongeschlecht (Dur/Moll) aus einer speziellen Verteilung an aufeinanderfolgenden Ganz- bzw. Halbtonschritten gebildet werden.7 Im Gegensatz dazu werden im chromatischen Raum alle zwölf Halbtöne betrachtet. Die folgenden tabellarischen Auflistungen benennen die Intervalle im diatonischen und chromatischen Raum. Notenabstand zwischen zwei Noten in der Diatonik 0 1 2 (Bsp. c´ – e´) 3 4 (Bsp. f´ – c´´) 5 6 7 (Bsp. g´ – g´´) 8 9 10 11 12 13 14 Tabelle 1 - Intervallbezeichnungen für Ganztonschritte Intervallbezeichnung Prime Sekunde Terz Quarte Quinte Sexte Septime Oktave None (Oktave + Sekunde) Dezime (Oktave + Terz) Undezime (Oktave + Quarte) Duodezime (Oktave + Quinte ) Terzdezime (Oktave + Sexte) Quartdezime (Oktave + Septime) Quintdezime (Oktave + Oktave) 5 vgl. Ziegenrücker, W. (1997) Das Motiv, ABC Musik – Allgemeine Musiklehre. Leipzig: Deutscher Verlag für Musik, Wiesbaden: Breitkopf & Härtel, 77. 6 vgl. Amon, R. (2005) Tonsysteme, Lexikon der Harmonielehre. Wien-München: Doblinger Metzler Verlag, 299. 7 So besteht eine Dur-Tonleiter aus Halbtonschritten zwischen dem 3. und 4. sowie zwischen dem 7. und 8. Ton, die restlichen Tonabstände sind Ganztonschritte. Eine reine Moll-Tonleiter hingegen hat ihre Halbtonschritte zwischen dem 2. und 3. sowie zwischen dem 5. und 6. Ton 8 Notenabstand zwischen zwei Noten in der Chromatik 0 1 2 3 4 5 6 7 8 9 10 11 12 Tabelle 2 - Intervallbezeichnungen für Halbtonschritte Intervallbezeichnung Prime Kleine Sekunde Große Sekunde Kleine Terz Große Terz Reine Quarte Tritonus Quinte Kleine Sexte Große Sexte Kleine Septime Große Septime Reine Oktave In einem Notensystem ist zwischen zwei Ebenen zu unterscheiden. In der vertikalen Ebene werden synchrone Momente wie Harmonik (auch harmonische, also gleichzeitig erklingende Intervalle) sichtbar. Die Horizontale hingegen repräsentiert ein Motiv oder Melodie hinsichtlich seiner zeitlichen Struktur − also den Rhythmus, z.B. durch Pausenzeichen oder durch Notenwerte. Werden beide Ebenen gleichzeitig betrachtet, so ist zu beobachten, dass die melodischen Intervalle immer eine Richtung besitzen: von einer zur nächsten Note ist das Intervall entweder aufwärts oder abwärts strebend oder gleichbleibend (Prime). Die Angabe der Intervallrichtung wird später für den Algorithmus essenziell wichtig sein. In der horizontalen Ebene geben Notenwerte Aufschluss über die relative Dauer der Noten zueinander. Die gängigen Notenwerte sind ganze Note ( ), halbe Note ( ), Viertelnote ( ), Ach- telnote ( ) und Sechszehntelnote ( ). Die exakte Dauer eines Notenwertes hängt hingegen von dem Tempo eines Musikstückes ab.8 Eine genauere Unterteilung von Notenwerten kann durch Überbindungen von zwei oder mehreren Noten oder durch Punktierungen (Verlängerung der Note um jeweils die Hälfte des angegebenen Notenwertes) geschaffen werden. Eine weitere rhythmische Besonderheit ist die X-tole, die die Begriffe Duole, Triole, Quartole usw. zusammenfasst. So nehmen beispielsweise bei einer typischen Triole drei Viertelnoten die Zeit von zwei Viertelnoten ein. Die beiden folgenden Darstellungen geben Aufschluss über einige Notenwerte und ihre Dauern. Eine Zählzeit bzw. ein Schlag entspricht hier einer Viertelnote. Das Tempo wird durch die Angabe bpm − beats per minute − (1 beat entspricht in der Regel einer Viertelnote − bei 120 bpm dauert eine Viertelnote demzufolge eine halbe Sekunde), oder durch MM − Mälzels Metronom − angegeben. Vgl. Erpf, H. (1967) Formenlehre heute – Form und Zeitablauf, Form und Struktur in der Musik. Mainz: B. Schott’s Söhne, 10. 8 9 Schlag m m+1 m+2 m+3 m+4 2x Ganze Note 3x Halbe Note 5x Viertelnote Einfach punktierte halbe Note, 2x Viertelnote Abbildung 1 - Übersicht der Notenwerte und ihre Zählzeiten Notenwert Ganze Note Halbe Note Viertelnote Achtelnote Sechszehntelnote Einfach punktierte Viertelnote 1 Vierteltriole auf zwei Viertelnoten verteilt Tabelle 3 - Beschreibung der Dauer von Notenwerten Dauer Schlagm bis Schlagm+4 Schlagm bis Schlagm+2 Schlagm bis Schlagm+1 (Schlagm bis Schlagm+1)/2 (Schlagm bis Schlagm+1)/4 (Schlagm bis Schlagm+1)+(Schlagm zu Schlagm+1)/2 (Schlagm bis Schlagm+2) /3 Diese musiktheoretischen Grundlagen zu Rhythmus und Intervallen sollen genügen, um ein Motiv zu erklären und später mathematisch zu erfassen. 10 1.2 MOTIVVERARBEITUNGSFORMEN Jede motivthematische Arbeit besitzt einen Bezug zum Originalmotiv. Einige Motivverarbeitungen sind sehr einfach zum Originalmotiv zurückzuführen, bei anderen Motivverarbeitungen ist der Bezug nicht ganz so offensichtlich. Die wichtigsten Motivverarbeitungen werden in diesem Abschnitt erarbeitet. Für das Beschreiben der Motivverarbeitungen wird ein selbst komponiertes Motiv betrachtet, welches in Abbildung 2 dargestellt ist. Dieses Motiv ist speziell für den Motivanalysealgorithmus aufbereitet, indem es Noteninformationen enthält, die der Algorithmus verarbeiten kann. Auch im weiteren Verlauf dieser Arbeit wird dieses Motiv zur Veranschaulichung herangezogen werden. Abbildung 2 - Beispielmotiv Die bekannteste musikalische Verarbeitungsform ist keine Verarbeitung im eigentlichen Sinn: es ist die Wiederholung des Motivs. Die Wiederholung ist für den Hörer ein sehr wichtiges musikalisches Ereignis.9 Musik wird in einer zeitlichen Abfolge wahrgenommen. Das Werk ist in seiner Gesamtheit erst nach dem Verklingen des letzten Tones erfassbar. Daher fügen erst Motivwiederholungen die einzelnen Abschnitte zu einem zusammenhängenden Werk zusammen. Nach Aktivierung der Aufmerksamkeit wird mit Hilfe der Wiederholung ein Motiv im Gedächtnis verankert. Die „Wiederholung ist somit ein obligatorisches Element für die Bildung eines (Leit-)motivs“.10 Trivial betrachtet sorgt die häufige Anwendung von Motivwiederholungen für die OhrwurmQualität. Die erste tatsächliche Motivverarbeitungsform ist die Imitation. Bei der Imitation wird das vorliegende Motiv in einer anderen Stimme nachgeahmt und meist nach einigen Noten variiert.11 Geschichtlich gesehen stammt die Imitation aus der Kirchenvokalmusik, bei der nacheinander die Vokalstimmen Bass, Tenor, Alt beziehungsweise Sopran einsetzten. Die erste Gesangsstimme singt die ersten Noten einer Melodie, die zweite Stimme setzt ein und imitiert diese Melodie in der eigenen Gesangslage. Die Imitation der zweiten Stimme setzt meist in der Oktave oder im 9 vgl. Amon, R. (2005) Motiv – Motivisch-thematische Arbeit, Lexikon der Harmonielehre. Wien-München: Doblinger Metzler Verlag, 193 f. 10 Flückiger, B. (2007) Leitmotive, Sound Design – Die virtuelle Klangwelt des Films. Marburg: Schüren Verlag, 186 f. 11 vgl. Holst, I. (1992) Die Anfänge der Kontrapunktik, Das ABC der Musik. Stuttgart: Phillip Reclam jun. GmbH, 72. 11 Quintton zur ersten Stimme ein.12 In Abbildung 3 ist eine Imitation des Beispielmotivs aus Abbildung 2 in der darunterliegenden Oktave dargestellt. Abbildung 3 - Imitation des Beispielmotivs Eine ähnliche Motivverarbeitung wie die Imitation ist die Sequenz. Eine Sequenz ist eine Wiederholung des Motivs auf einer anderen Tonstufe13 und kommt in der Regel etwa so häufig wie die Wiederholung selbst vor. Bei der Sequenz wird im Gegensatz zur Imitation das Motiv nicht variiert. Es werden zwei Ausprägungen der Sequenz unterschieden: die tonale Sequenz und die reale Sequenz. Bei einer tonalen Sequenz werden die Intervalle zwischen den Noten diatonisch beibehalten, d.h. die Intervalle in der Sequenz werden der Tonart angepasst. Dadurch kann beispielsweise eine große Terz aus dem Originalmotiv zu einer kleinen Terz in der tonalen Sequenz werden. Bei einer realen Sequenz hingegen bleiben alle Intervalle zwischen den Noten exakt erhalten. Abbildung 4 zeigt beide Versionen ausgehend vom Beispielmotiv. Kompositorisch ermöglichen die Formen der Sequenz einen Ausbruch aus dem bestehenden kompositorischen Material, um neues Musikmaterial zu schaffen:14 so führt eine reale Sequenz zu anderen Tonarten, während durch eine tonale Sequenz neue harmonische Verbindungen erschlossen werden. Abbildung 4 - Tonale (links) und reale Sequenz (rechts) des Beispielmotivs Eine vollkommen neue Melodiekontur entsteht mit der Umkehrung. Die Umkehrung wird auch als Inversion oder Spiegel bezeichnet. Sie entsteht durch das beliebige Anlegen einer gedachten horizontalen Achse an einer Notenlinie oder an einem Notenlinienzwischenraum. So führt beispielsweise eine Terz aufwärts im Originalmotiv zu einer Terz abwärts in der Umkehrung. Auch vgl. Lemacher, H., Schroeder, H. (1977) Der zweistimmige Satz, Lehrbuch des Kontrapunktes. Mainz: Schott Musik International, 21. 13 vgl. Ziegenrücker, W. (1997) Das Motiv, ABC Musik – Allgemeine Musiklehre. Leipzig: Deutscher Verlag für Musik, Wiesbaden: Breitkopf & Härtel, 175. 14 vgl. Amon, R. (2005) Motiv – Motivisch-thematische Arbeit, Lexikon der Harmonielehre. Wien-München: Doblinger Metzler Verlag, 194. 12 12 im Fall der Umkehrung gibt es zwei Ausprägungen: die tonale und die reale Umkehrung. Hierbei gelten für die Intervalle die gleichen Bedingungen wie für die Sequenz. In Abbildung 5 sind wiederum beide Varianten der Umkehrung anhand des Beispielmotivs dargestellt. Abbildung 5 - Tonale und reale Umkehrung Eine Spiegelung eines Motivs kann nicht nur in der Horizontalen, sondern auch in der Vertikalen, erfolgen. Diese Form der Motivverarbeitung wird Krebs15 genannt. Beim Krebs befindet sich die Spiegelachse parallel zu den Taktstrichen: der Krebs entspricht also dem rückwärts gelesenen Originalmotiv. Durch diese Art der Motivverarbeitung werden Intervalle zwischen den Noten nicht verändert. Das Krebsmotiv gibt es in zwei Ausprägungen. Bei der ersten Form, Krebs I, wird das gesamte Motiv 1:1 gespiegelt. Bei der Form Krebs II werden alle Intervalle gespiegelt, der Rhythmus aber bleibt wie bei dem Originalmotiv (siehe Abbildung 6). Abbildung 6 - Krebs I (links) und Krebs II (rechts) Bei den Motivverarbeitungsmöglichkeiten Augmentation und Diminution nimmt ein Motiv neue Notenwerte an. Die Augmentation streckt das Motiv in die Länge. Aus mathematischer Sicht werden die Notenwerte mit dem Faktor Zwei multipliziert: so wird z.B. aus einer halben Note eine ganze Note und aus einer Achtelnote eine Viertelnote. Die Diminution ist das Gegenstück der Augmentation. Hier werden die Notenwerte halbiert. Vom Hörerlebnis können diese Motivformen so betrachtet werden, als ob das Motiv schneller oder langsamer gespielt wird. Abbildung 7 - Augmentation und Diminution vgl. Lemacher, H., Schroeder, H. (1977) Der zweistimmige Satz, Lehrbuch des Kontrapunktes. Mainz: Schott Musik International, 21. 15 13 Eine Dehnung oder Stauchung eines Motivs ist nicht nur in der Horizontalen − also der zeitlichen Ebene − möglich, sondern auch in der Vertikalen. Hierzu zählen die Motivverarbeitungsformen Intervallweitung und Intervallengung (siehe Abbildung 8). Bei der Intervallweitung werden die Intervalle beliebig größer gesetzt, beispielsweise wird aus einer Terz eine Sexte. Die Intervallrichtung (auf- oder abwärts) muss allerdings gleichbleiben. Entsprechend verhält es sich bei der Intervallengung, nur dass die Intervalle kleiner gesetzt werden. So wird beispielsweise eine Terz im Originalmotiv zu einer Sekunde verarbeitet. Abbildung 8 - Intervallweitung und Intervallverengung Eine weitere sehr vielseitige Motivverarbeitungsform ist die Variation. Hierbei werden einzelne Motivelemente wie etwa Rhythmus oder Melodie so belassen, andere Elemente hingegen werden variiert. So bleiben beispielsweise bei einer rhythmischen Variation Melodie und Harmonie gleich, während der Rhythmus variiert wird. Demgegenüber werden bei einer melodischen Variation lediglich die Tonhöhen verändert, der Rhythmus aber bleibt bestehen. Kurz erwähnt sei als motivthematische Verarbeitungsmöglichkeit abschließend die Abspaltung, bei der ein Teil des Motivs in einem neuen musikalischen Kontext gestellt wird. Bei den genannten Beispielen handelt es sich um die am häufigsten auftretenden Motivverarbeitungsformen. Durch Kombination entstehen noch diverse weitere Möglichkeiten, ein Motiv zu verarbeiten. 14 1.3 MANUELLE SUCHE NACH MOTIVEN UND MOTIVVERARBEITUNGEN IN DREI BEISPIELWERKEN Die behandelten Motivverarbeitungsformen sollen nun in drei Musikwerken auf deren Vorkommen hin beleuchtet werden, um vorweg zu prüfen, auf welche Besonderheiten der MotivsucheAlgorithmus ausgelegt sein muss. Hierzu werden Musikwerke aus verschiedenen Epochen und Stilen gewählt, um einen möglichst breiten Anwendungsbereich abzudecken. Zu den ausgewählten Musikstücken gehört ein Choralwerk, ein Stück einer Filmmusik und ein Popsong aus den 90iger Jahren. Zunächst muss das Originalmotiv anhand von markanten und wiederkehrenden Notenverläufen, Rhythmen und Intervallen ausfindig gemacht werden. Erst wenn ein mögliches Motiv im Musikwerk gefunden wurde, können motivthematische Verarbeitungen identifiziert werden. Diese Vorgehensweise ist vergleichbar mit dem zu implementierenden Algorithmus. Die vollständigen Musikwerke befinden sich im Anhang dieser Diplomarbeit. Das Musikwerk „Exsultate Deo“ B-Teil von Alessandra Scarlatti befindet sich im Anhang 1, „Solange“ (aus 007James Bond Casino Royale) von David Arnold befindet sich im Anhang 2 und „When we dance“ von Sting befindet sich im Anhang 3. Die in diesem Abschnitt abgebildeten Partituren sind zusammengesetzte Ausschnitte aus dem Werk, welche ein herausragendes Motiv und seine Verarbeitungen hintereinander zeigt. Exsultate Deo B-Teil von Alessandra Scarlatti Exsultate Deo ist ein Choralwerk für vier Stimmen, komponiert von Alessandra Scarlatti. Scarlatti lebte von 1660 bis 1725 und schuf vor allem in der Zeit des Barock viele Musikwerke.16 Interessant am vorliegenden Werk ist der B-Teil, da hier das Anfangsmotiv von zwei weiteren Vokalstimmen imitiert wird. Abbildung 9 zeigt diverse Motivverarbeitungsformen aus dem Choralwerk als Auszug aus allen vier Stimmen. Die Motive und Motivverarbeitungen sind beschriftet und durchnummeriert. 16 Dürr, W. (2005) Scarlatti, Pietro Alessandro Gaspare, Musiklexikon. Stuttgart, Weimar: Verlag J.B. Metzler, 168 15 Abbildung 9 - Exsultate Deo B-Teil in Motivauszügen aus allen Stimmen Tabelle 4 soll die in Abbildung 9 durchnummerierten Motive einigen Motivverarbeitungsformen zuordnen und deren Vorkommen zusammenfassen. 16 Motiv 1 Originalmotiv 2 3 4 X Imitation X X Sequenz X X Variation X X Rhythmische Verschiebung Abspaltung 5 6 X X 8 9 10 11 12 13 14 15 16 ∑ 3 X 3 X* X X X* 6 X X X X X* X Rhythmische Augmentation 7 5 3 X X X X Rhythmische Diminution Umkehrung 2 X 3 X 1 X Entfernt verwandtes Motiv Melodische Variation 1 X 1 X X 2 Tabelle 4 - Zusammenfassung der Motive für das Werk Exsultate Deo B-Teil Die mit einem Stern (*) notierten Motive in Tabelle 4 sind nicht motivthematische Verarbeitungen des Originalmotivs, sondern eines bereits verarbeiteten Motivs. Die Tabelle verdeutlicht, wie vielschichtig Scarlatti Gebrauch der motivthematischen Arbeit gemacht hat. Sehr viele Motivverarbeitungen treten hier auf − allerdings nie alleinstehend und vollständig. Vielmehr handelt es sich stets um Mischformen, die ineinander übergehen. Sollen die zuvor besprochenen Motivverarbeitungsmöglichkeiten alleinig in ihrer reinen vollständigen Form betrachtet werden, so müssten das gesuchte Originalmotiv auf die vier Anfangsnoten beschränkt werden. Von diesen vier Noten wiederum wäre es erst möglich, vollständige Verarbeitungen zu finden. Solange (aus 007-James Bond Casino Royale) von David Arnold Filmmusik, wie beispielsweise in einem James Bond-Film, wird oftmals mit Hilfe der Leitmotivtechnik gestaltet.17 Diese Technik beinhaltet, dass den Protagonisten, Orten, Handlungen, Zeiten oder anderen Objekten jeweils ein markantes musikalisches Motiv zugeteilt wird. Immer wenn ein Objekt auf der Leinwand erscheint, dem ein Leitmotiv zugeordnet ist, erklingt „sein“ Motiv. Auf diese Weise erhält der Zuschauer einen markanten auditiven Bezug zu einem sichtbaren Objekt. Abbildung 10 zeigt einen Auszug mit den Motiven und Motivverarbeitungen aus „Solange“, einem Musikstück aus dem Soundtrack zum James Bond-Film Casino Royale. Das Musikstück enthält das Leitmotiv, welches immer wiederkehrt, sobald das Bond-Girl Solange Dimitrios auftritt. 17 vgl. Spehr, G. (2007) Audio-Branding – alles neu?, Audio-Branding. München: Verlag Reinhard Fischer, 38. 17 Abbildung 10 - „Solange“ in Motivauszügen Motiv Originalmotiv Sequenz 1 2 Rhythmische Variation 4 5 X 6 X X Melodische Variation Abspaltung 3 8 9 X X ∑ 3 X X X 7 2 X 3 X 2 X X 2 Tabelle 5 - Zusammenfassung der Motive für das Werk „Solange“ aus 007-James Bond Casino Royale Tabelle 5 fasst wiederum die Motive aus „Solange“ zu Motivverarbeitungsformen zusammen. Es zeigt sich, dass hier wenige Mischformen der Motivverarbeitungen auftreten. Da der Motivanalysealgorithmus nur die Motivverarbeitungen findet, welche ihm in Reinform hinterlegt sind, sind die Motive im Werk „Solange“ vom Algorithmus gut aufzufinden. 18 When we dance von Sting In der Popmusik ist die Wiederholung von Motiven bzw. Melodien ein beliebtes Mittel, um den musikalischen Eindruck im Ohr des Hörers zu festigen. In Abbildung 11 wird dies durch die Markierung und Benennung der Motive in dem Popsong „When we dance“ von Sting deutlich. Abbildung 11 - „When we dance“ in Motivauszügen 19 Motiv Originalmotiv Sequenz Variation Erweiterung 1 X 2 X 3 X 4 X 5 6 X 7 X 8 X 9 10 X X X X X X X X 12 13 X X X 11 X X X X X* X X ∑ 8 4 10 3 Tabelle 6 - Zusammenfassung der Motive in „When we dance“ Tabelle 6 veranschaulicht wie in den vergangenen Musikbeispielen das Vorkommen einzelner Motivverarbeitungsformen. Es zeigt sich hier ein ähnliches Bild wie bei dem Choralwerk von Scarlatti. Die meisten Motivverarbeitungen sind Mischformen. Auch hier würden die reinen, vollständigen Motivverarbeitungen erst auffindbar, wenn als Originalmotiv eine kürzere Notenfolge betrachtet würde. Es kann zusammengefasst werden, dass es von großer Bedeutung ist, wie lang ein Motiv für die Analyse ist. Ist es zu kurz gewählt, werden zu viele Motivverarbeitungen in die Ergebnismenge aufgenommen. Dies schließt die Gefahr ein, dass Motivverarbeitungen in die Ergebnismenge aufgenommen werden, die in keinem motivthematischen Zusammenhang zum Originalmotiv stehen. Ist das Motiv jedoch zu lang gewählt, besteht die Möglichkeit, dass die Ergebnismenge unbefriedigend gering ist. Die Problematik kann auf den ersten Blick nur durch den menschlichen Eingriff gelöst werden. Deswegen gehört zur Programmieranforderung, dass die Motivanalysesoftware nicht nur eigenständig Motive zur Analyse auswählt, sondern der Mensch die Möglichkeit hat, ein Motiv von Hand einzugeben. Somit ist es möglich, dass ein Motiv beliebig gekürzt oder verlängert wird bis die Ergebnismenge zufriedenstellend ist. 20 2 DAS MUSICXML-FORMAT 2.1 DIE BESCHREIBUNGSSPRACHE MUSICXML Das MusicXML-Datenformat ist eine Beschreibungssprache für Musik. Sie ist abgeleitet von XML, der Extensible Markup Language. XML ist wiederum aus der SGML, Standard Generalized Markup Language, entstanden. SGML sowie XML bieten systemunabhängige und strukturierte Repräsentationen von Texten. Diese Sprachen sind Metasprachen, mit der eine Auszeichnungssprache, auch Markup Language genannt, definiert werden kann. Es sind drei Eigenschaften zusammenzufassen: Markup Language-Dokumente werden auf Basis von Elementen gegliedert. Diese besitzen einen vordefinierten Namen und sind vordefinierten Typen zugeordnet. In einer zusätzlichen Datei, der DTD-Document Type Definition, werden die für die in XML zulässigen Dokumenttypen Namen für die Elemente und Verschachtelungsreihenfolgen festgelegt. Für die Interpretation ist ein entsprechender Parser oder eine Programmiersprache nötig, die mit Hilfe der DTD das XML-Dokument analysiert und darstellt. XML-Dokumente sind wohldefiniert. Die Dokumente sind an lokale Zeichensätze anpassbar, ohne dass das Dokument selbst geändert werden muss. Mit XML-Dokumenten lassen sich maschinenunabhängige Dokumente erstellen.18 Der übliche Weg eine MusicXML-Datei zu erstellen, ist es, ein Notationsprogramm zu verwenden, das die Partitur in Form einer MusicXML-Datei speichern kann. Die bekanntesten Notationsprogramme dieser Art sind Sibelius19 und Finale.20 Im MusicXML-Format sind die Informationen zu einer Note in Elementen eingebettet. Die Struktur ist dabei <element>Elementinhalt</element>. Elemente können in MusicXML ineinander verschachtelt sein. So ist das äußerste Element für das Beschreiben einer Note das Element vgl. Ferber, R. (2003) Explizit strukturierte Elemente - XML, Information Retrieval. Heidelberg: dpunkt Verlag, 255. vgl. Sibelius: "Was ist neu". URL: http://www.sibelius.com/products/sibelius/ [Stand: 1. Februar 2009] 20 vgl. Klemm Music & Makemusic: "Notensatz und Notenschreibprogramme Finale". URL: http://www.klemmmusic.de/coda/ [Stand: 1. Februar 2009] 18 19 21 <note>. Innerhalb dieses Elements umschließt das Element <pitch> die Elemente 21 <step>Notenname</step>, <alter>Alteration </alter> und <octave>Oktavlage</octave>. Es ist zu erkennen, dass diese drei Elemente für die Beschreibung der vertikalen Ebene einer Note zum Element <pitch> zusammengefasst sind. Für die Darstellung der horizontalen Ebene existieren u.a. die Elemente <duration> für die relative Notenlänge und <type> als englische Bezeichnung des Notenwertes. Das folgende Beispiel zeigt die eben beschriebenen MusicXML-Elemente, angewendet auf ein eingestrichenes Ces. <note> <pitch> <step>C</step> <alter>-1</alter> <octave>4</octave> </pitch> <duration>4</duration> <type>quarter</type> </note> Quelltext 1 - vereinfachtes MusicXML-Beispiel für die Beschreibung der Note Ces' Die im Quelltext 1 mittels Zahlen bzw. Buchstaben codierten Noteninformationen sollen im folgenden Abschnitt erläutert werden. 2.2 ABBILDUNGSFORM DER NOTENINFORMATIONEN IN MUSICXML Wieder soll das selbst komponierte Beispielmotiv aus dem ersten Kapitel zur Veranschaulichung dienen. Die Notenreihe ohne Beachtung der Vorzeichen lautet: E, G, B22, D, C, B, D, E, C, A. Diese Buchstaben werden in MusicXML für die Darstellung der Notennamen direkt so verwendet. Das Motiv enthält an der Position der Note g eine Alteration. Die typischen Hochalterationszeichen sind Kreuz ( ) für eine Anhebung um einen Halbtonschritt aufwärts und Doppelkreuz ( ) für eine Anhebung um zwei Halbtonschritte aufwärts. Für das Tiefalterieren von Noten wird das b ( ) für eine Verminderung um einen Halbtonschritt abwärts und das Doppel-b ( ) für eine Erhöhung bzw. Erniedrigung der Note um einen oder auch mehreren Halbtonschritte mit Hilfe eines Vorzeichens Für eine einheitliche Konvention zum MusicXML-Format wird fortwährend statt der deutschen Notenbezeichnung h der englische Notenname b verwendet. 21 22 22 Verminderung um zwei Halbtonschritte abwärts verwendet. In MusicXML wird eine Note ohne Alteration mit 0 gekennzeichnet, eine Note mit Kreuzvorzeichen mit +1, eine Note mit dem Doppelkreuz mit +2, eine Note mit dem -Vorzeichen mit -1 und mit dem - Vorzeichen mit -2. Für das verwendete Beispielmotiv ergibt sich somit die Alterationsfolge: 0, +1, 0, 0, 0, 0, 0, 0, 0, 0. Eine weitere Noteninformation eines Motivs ist die Oktavlage einer Note im Notensystem. Durch die Anwendung eines Notenschlüssels im Notensystem, typischerweise ein Violinschlüssel oder ein Bassschlüssel, wird die genaue Tonhöhe und auch die Oktavlage auf den Notenlinien bestimmt. Eine Übersicht über die Oktavlagen ist in Abbildung 12 dargestellt. Abbildung 12 - Darstellung der Oktavlagen Die Oktavlagen werden in MusicXML wie folgt abgebildet: Subkontra-Oktave =0 Kontra-Oktave =1 große Oktave =2 kleine Oktave =3 eingestrichene Oktave = 4 zweigestrichene Oktave = 5 dreigestrichene Oktave = 6 usw. 23 Insgesamt lässt MusicXML für die Oktavlage einen Wertebereich von 0 bis 9 zu.23 Für das gewählte Beispielmotiv ergibt sich die folgende Oktavlagenreihe: 4, 4, 4, 5, 5, 4, 4, 4, 4, 3. Mit den beschriebenen drei Parametern Notenname, Alteration und Oktave ist die vertikale Ebene von Noten innerhalb eines Notensystems beschrieben. Für die horizontale, zeitliche Ebene ist der Notenwert das entscheidende Kriterium. Der Notenwert, der aus der Form der Note (gefüllt/leer, mit/ohne Hals, mit/ohne Fähnchen) hervorgeht, wird in einer Zahl kodiert. Diese setzt sich aus mehreren Werten zusammen und ist abhängig von der Taktart. Es können aber auch zusätzliche Zeichen erscheinen, die den Notenwert verändern und als eigene Noteninformation in MusicXML auftreten. Zum einen ist es die Punktierung, bei der der ausgeschriebene Notenwert um nochmals die Hälfte des eigenen Notenwertes verlängert wird. Zum anderen verändert auch eine X-tole (z.B. eine Duole oder Triole) den Notenwert. Nur wenn Punktierungen oder X-tolen vorliegen, wird dies in MusicXML angegeben. 2.3 AUFBAU EINER MUSICXML-DATEI Um das MusicXML-Datenformat konkret zu beschreiben, wird hier ein sogenanntes „Hello World“-Beispiel (siehe Quelltext 2) zur Veranschaulichung genommen. Das Beispiel beschreibt Grundelemente von MusicXML und die Dokumentstruktur anhand eines eingestrichenen C (siehe Abbildung 13). Die Analyse eines MusicXML-Dokuments ermöglicht das Verständnis, wie ein Algorithmus alle notwendigen Elementinhalte aus MusicXML herauslesen kann. Abbildung 13 - Ein eingestrichenes C Recordare: Internet Music Publishing and Software: "MusicXML 1.0 Alphabetical Index". URL: http://www.recordare.com/dtds/1.0/musicxml-index.html [Stand: 2. Februar 2009] 23 24 1. <?xml version="1.0" encoding="UTF-8"?> 2. <!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 1.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd"> 3. <score-partwise> 4. <identification> 5. <encoding> 6. <software>Finale for Windows</software> 7. <software>Dolet Light for Finale 2006</software> 8. <encoding-date>1900-00-00</encoding-date> 9. </encoding> 10. </identification> 11. <part-list> 12. <score-part id="P1"> 13. <part-name>Violine</part-name> 14. <score-instrument id="P1-I1"> 15. <instrument-name>Violine</instrument-name> 16. </score-instrument> 17. <midi-instrument id="P1-I1"> 18. <midi-channel>1</midi-channel> 19. <midi-program>41</midi-program> 20. </midi-instrument> 21. </score-part> 22. </part-list> 23. <!--===========Hier beginnt der Hauptteil==============--> 24. <part id="P1"> 25. <measure number="1"> 26. <attributes> 27. <divisions>1</divisions> 28. <key> 29. <fifths>0</fifths> 30. <mode>major</mode> 31. </key> 32. <time symbol="common"> 33. <beats>4</beats> 34. <beat-type>4</beat-type> 35. </time> 36. <clef> 37. <sign>G</sign> 38. <line>2</line> 39. </clef> 40. </attributes> 41. <sound tempo="120"/> 42. <note> 43. <pitch> 44. <step>C</step> 45. <octave>4</octave> 46. </pitch> 47. <duration>4</duration> 48. <voice>1</voice> 49. <type>whole</type> 50. </note> 51. <barline location="right"> 52. <bar-style>light-heavy</bar-style> 53. </barline> 54. </measure> 55. </part> 56. <!--=========================================================--> 57. </score-partwise> Quelltext 2 - MusicXML-Code des Hello World-Beispiels Eine MusicXML-Datei ist in Prolog, auch Einleitungsteil genannt, und Hauptteil gegliedert. Der Prolog beschreibt grundlegende Daten über das MusicXML-Dokument. Der Hauptteil repräsentiert Daten, die zur Darstellung der Partitur notwendig sind. Prolog und Hauptteil werden durch das Element <score-partwise> umschlossen. 25 Der Prolog besitzt als Kindelemente <identification> und <part-list>. <identification> beinhaltet u.a. das Element <software>, in dem die Software angegeben wird, mit der die MusicXMLDatei erstellt wurde. <part-list> enthält das Element <score-part>, welches das Notensystem mit dem dazugehörigen assoziierten Musikinstrument beschreibt. Zudem besitzt es das Attribut id, mit dem beschrieben wird, in welchem Notensystem das Musikinstrument steht. Hier weist beispielsweise der Wert P1 die Elementinhalte in <score-part> dem Instrument zu, das an oberster Stelle im Notensystem steht. Nach P1 wird die Zahl für jedes neue Notensystem um 1 inkrementiert: <score-part id=P[z]>...</score-part> mit z (Natürliche Zahlen). In <part-name> wird ein Instrumentenname vergeben, der im Notenbild dem Notensystem vorangestellt wird. Im Element <score-instrument> können mehrere Instrumente, die in den Elementen <instrument-name> bezeichnet sind, zu einer Gruppe zusammengefasst werden. Hier erscheint stets der vollständige Instrumentenname. Die Elemente <midi-instrument> mit den Kindelementen <midi-channel> und <midi-program> sind reserviert für das Abspielen der Partitur über die Soundkarte per MIDI. MIDI ist ein Protokoll zur Ansteuerung von MIDI-fähigen Instrumenten und Soundkarten. In <midi-channel> wird der Kanal des jeweiligen Instruments angegeben, das die Verbindung zum Notensystem über das Attribut id in <midi-instrument> und <score-instrument> schafft. Das Element <midi-channel> kann die Werte 1 bis 16 annehmen. Über diese Kanäle werden die MIDI-Signale des entsprechenden Notensystems an die MIDI-fähige Software verschickt. Das Element <midi-program> beinhaltet eine Zahl zwischen 1 und 128. Jede dieser Zahlen ist einem bestimmten Musikinstrument zugeordnet.24 Im vorliegenden Beispiel entspricht die Zahl 41 dem Instrument Violine. Der Hauptteil des MusicXML-Dokuments beschreibt alle in der Partitur sichtbaren Daten. Jedes Musikinstrument erhält für die Präsentation seiner Noten einen eigenen Elementbereich. Dieser wird mit <part> bezeichnet. Die gleichen Werte vom Attribut id im Element <part> schaffen eine Verknüpfung der initialisierten Musikinstrumente aus dem Prolog mit dem Hauptteil. Innerhalb von <part> werden einzelne Takte mit <measure> angegeben. Jedes dieser Elemente besitzt das Attribut number. Beginnt ein neuer Takt, wird der Zahlenwert in number um 1 inkrementiert. Werden am Anfang eines Taktes Notenschlüssel, Tonarten oder Taktarten verändert, werden diese Informationen zu Beginn eines Taktes innerhalb von <attributes> eingefügt. Darin enthalten ist u.a. das Element <key>, welches mit Hilfe der Kindelemente <fifths> und <mode> die Tonart beschreibt. Der Wert in <fifths> gibt die Tonstufe und der Wert in <mode> das Tongeschlecht an. Weiterhin enthält <attributes> die Elemente <time>, <clef> und <divisions>. <time> besitzt als Kindelemente <beats>, das die Anzahl der Zählzeiten wiedergibt und <beat-type>, das angibt, welcher Notenwert einer Zählzeit entspricht. Beide Werte liegen hier bei 4, dementsprechend MIDI Manufacturers Association: "General MIDI Level 1 Sound Set". URL: http://www.midi.org/techspecs/gm1sound.php [Stand: 1. April 2009] 24 26 handelt es sich um einen 4/4-Takt. Für die Angabe des Notenschlüssels wird das Element <clef> benutzt. Es besitzt als Kindelemente <sign> für die Angabe des Notenschlüssels und <line> für die Angabe der Notenlinie, auf der der Notenschlüssel positioniert wird. <divisions> beschreibt die Basiseinheit für die Tondauer, auf die sich alle Noten ab dem Takt beziehen, in dem <divisions> initialisiert bzw. re-initialisiert wird. Der Wert in <divisions> ist wichtig, um mit Hilfe des später auftretenden Elements <duration> den Notenwert zu errechnen. Nach dem Element <attributes> folgt das Element <sound> mit dem Attribut tempo, welches erwartungsgemäß das Tempo der folgenden Takte angibt. Mit dem nun folgenden Element <note> wird jede Note einzeln beschrieben. Befinden sich mehrere Noten in einem Takt, werden die Elemente <note> nacheinander platziert. Dies ermöglicht dem Algorithmus ein lineares Auslesen der MusicXML-Datei. Im Element <note> sind u.a. die Kindelemente <pitch>, <duration>, <voice> und <type> enthalten. In <pitch> gibt es die Kindelemente <step> für den Notennamen und <octave> für die Oktavlage einer Note. Wird eine Note alteriert, so befindet sich in <pitch> zusätzlich das Kindelement <alter>, welches die Alteration in Halbtonschritten angibt. Zulässig sind alle ganzen Zahlen von -9 bis 9. Das Alterationszeichen wird zusätzlich mit dem Element <accidental> beschrieben. Die häufigsten Elementinhalte sind natural ( n-Auflösungszeichen), sharp ( m-Vorzeichen) oder flat ( bVorzeichen). <duration> ist neben <divisions> die zweite Angabe, um den Notenwert zu errechnen. Im vorliegenden „Hello World“-Beispiel hat <divisions> den Wert 1, und <duration> besitzt für die Note C den Wert 4. Der Notenwert wird nach folgender Rechnungsvorschrift ermittelt: Notenwert = duration/divisions = 4/1 = 4. Die vier wird in diesem Beispiel mit der ganzen Note gleichgesetzt, da sie in einem 4/4 Takt alle vier Zählzeiten einnimmt. Eine halbe Note würde demnach dem Wert 2 und eine Viertelnote dem Wert 1 entsprechen. Der Notenwert wird zusätzlich im Element <type> als englisches Wort ausgeschrieben. Sofern zusätzlich eine Punktierung vorliegt, wird das leere Element <dot /> eingefügt. Tritt eine X-tole auf, so wird das Element <time-modification> mit den Kindelementen <actual-notes>, <normal-notes> und <beam> eingefügt. Das Element <voice> benennt die Stimme im System, zu der die Note gehört. Die Angabe von <voice> ist nötig, wenn mehrere Gesangsstimmen in einem Notensystem untergebracht sind. Das letzte wichtige Element ist <stem>, welches die Halsausrichtung einer Note wiedergibt. Mögliche Werte sind up und down. Das Ende einer Partitur wird mit einem Doppelstrich, dem Element <barline> und <barlinestyle> angegeben. 27 2.4 VALIDITÄT EINES MUSICXMLDOKUMENTS JE NACH ERSTELLUNGSART Das zu untersuchende MusicXML-Dokument muss anhand der Dokumenttypdefinition validierbar sein. Nur so kann gewährleistet werden, dass der Algorithmus korrekte Ergebnisse erzielt. Eine MusicXML-Datei kann auf mehrere Arten erstellt werden: Üblicherweise über ein Notensatzprogramm, häufig aber auch mit Hilfe eines MIDI-Software-Sequenzer wie Apple LogicStudio oder Steinberg Cubase. Je nach Transformationssoftware (z.B. Notensatzprogramm oder MIDI-Software) werden verschiedene MusicXML-Ausgaben erzeugt. So binden beispielsweise die beiden bekanntesten Notationsprogramme Sibelius25 und Finale26 neben allgemeingültigen MusicXML-Sprachelementen auch noch weitere Elemente ein, die das Layout einer Partitur im eigenen Notationsprogramm beschreiben und optimieren. Somit enthält eine mit Hilfe eines Notationsprogramms erstellte MusicXML-Datei stets zusätzliche Sprachelemente, die nur indirekt etwas mit dem MusicXML-Standard zu tun haben und so Fehler während der Motivanalyse hervorrufen können. Aber auch die Erzeugung einer MusicXML-Datei durch Konvertierung aus einer MIDI-Datei ist problembehaftet für die Motivanalyse durch den Algorithmus. Sehr viele Musikwerke unterschiedlichster Komponisten und Interpreten sind im MIDI-Format rund um den Globus im Internet verfügbar. Populär ist MIDI vor allem aufgrund der geringen Dateigröße geworden. Heute gilt MIDI vor allem im Musikproduktionsbereich als Format, das sich etabliert hat. Es liegt daher nahe, dass für die Motivanalyse eine MusicXML-Datei benutzt wird, die mit einer Konvertierungssoftware aus einer MIDI-Datei umgewandelt wurde. Wie stark aber das Notenbild einer durch MIDI-Konvertierung erstellte MusicXML-Datei vom eigentlichen Notenbild abweichen kann, soll im Folgenden verdeutlicht werden. Wird eine in einem Notationsprogramm erstellte Partitur im MIDI-Format gespeichert und diese im gleichen Notationsprogramm erneut geöffnet, so sind viele Musiksymbole beim Speichern der MIDI-Datei unwiderruflich verlorengegangen. Abbildung 14 zeigt eine Partitur, wie Sie im Notensatzprogramm Finale eingegeben wurde. Diese Partitur wurde als MIDI-Datei gespeichert und besitzt danach die Darstellung wie in Abbildung 15. vgl. Sibelius: "Was ist neu". URL: http://www.sibelius.com/products/sibelius/ [Stand: 1. Februar 2009] vgl. Klemm Music & Makemusic: "Notensatz und Notenschreibprogramme Finale". URL: http://www.klemmmusic.de/coda/ [Stand: 1. Februar 2009] 25 26 28 Abbildung 14 - Notenbeispiel mit Noten und musikalischen Symbolen Abbildung 15 - In das Notensatzprogramm importierte MIDI-Datei Der Vergleich beider Abbildungen zeigt, dass MIDI keine Informationen über die Darstellung einer Partitur sowie Interpretationshinweise enthält. MIDI ist in erster Linie kein Darstellungsformat für Noten und deren Partituren, sondern ein Datenaustauschformat zwischen Synthesizern, Samplern, Drumcomputern, Sequenzerprogrammen und anderen Hardwaregeräten bzw. Software. Für deren Kommunikation untereinander sind viele musikalische Symbole und Zeichen irrelevant. Welche musikalischen Zeichen und Symbole von MIDI ausgewertet werden, ist in der MIDI-Spezifikation27 nachzulesen. Wird ein MusicXML-Dokument, das aus einer MIDI-Datei konvertiert wurde, für die Motivanalyse benutzt, können zwei Arten von Verfälschungen des Notenbildes entstehen: 1. Die Lesbarkeit einer Partitur ist beeinträchtigt. Die vorherrschende Tonart wird nicht wie üblich am Anfang des Notensystems dargestellt. Stattdessen werden Alterationen (Vorzeichen-Symbole wie b oder m) vor jeder Note einzeln verwendet. Die Informationen, die für eine Motivanalyse an sich notwendig sind, sind jedoch nicht verfälscht. Es fehlen au vgl. MIDI Manufacturers Association Incorporated: "Tech Specs & Info". URL: http://www.midi.org/techspecs/ [Stand: 1. Februar 2009] 27 29 ßerdem dynamische Zeichen zur Lautstärke sowie der Notentext, was die Motivanalyse jedoch nicht beeinträchtigt. Die Motivanalyse kann trotz fehlender Zeichen durchgeführt werden. 2. Die aus der MIDI-Datei konvertierte MusicXML-Datei erschwert die Motivanalyse oder macht sie gar unmöglich. Wird z.B. eine Partitur, die Vorschlagsnoten enthält, als eine MIDI-Datei gespeichert, so werden diese Noten in normale − rhythmusrelevante − Noten umgewandelt, obwohl Vorschlagsnoten nicht mit ihrem Notenwert im Takt gezählt werden. In der Partitur sind nun neue Noten vorhanden, die auch als solche in der Motivanalyse interpretiert werden. Ebenfalls werden auch beim Speichern in das MIDIFormat bestimmte Notensysteme zusammengefasst. So wird ein Klaviersystem, das aus Bass- und Diskantsystem besteht, miteinander verbunden. Zwei vollkommen getrennten Melodiestrukturen bilden neue Intervall- und Akkordstrukturen, die in der Motivanalyse falsch bewertet werden. Es kann zusammengefasst werden, dass je ähnlicher eine gespeicherte Partitur der Originalpartitur im Notenbild ist, die Motivanalyse umso erfolgsversprechender ist. Es dürfen maximal Notenbildverfälschungen der ersteren Art auftreten. 30 3 DAS KONZEPT DES MOTIVANALYSEALGORITHMUS Die grundlegende Idee des Algorithmus besteht darin, die Noten eines Musikwerkes getrennt nach Parametern aus MusicXML einzulesen, und anschließend die Noteninformationen je Parameter miteinander zu vergleichen. Hierbei sind insbesondere die Parameter Notenname, Alteration, Oktavlage, Notenwert sowie die beiden rhythmischen Zusatzzeichen Punktierung und X-tole von Interesse. Diese Elemente sollen für den Algorithmus fortwährend getrennt voneinander betrachtet werden. Voraussetzung ist, dass die einzelnen Noteninformationen zusammengesetzt wieder der ursprünglichen Note entsprechen. Handelt es sich bei einer Melodie um ein Motiv, so werden sich die dazugehörigen Noteninformationen der aufeinanderfolgenden Noten innerhalb des Musikstückes im Regelfall wiederholen. So kann beispielsweise die längste Reihe dieser aufeinanderfolgenden Noteninformationen, die im Musikwerk immer wiederkehrt, als Originalmotiv erkannt werden. Ist das Originalmotiv gefunden, so wird das Musikstück auf weitere übereinstimmende Noteninformationsreihen abgesucht und es wird ein Zusammenhang zwischen Originalmotiv und Motivverarbeitung gesucht. Grundlegend bringt der Motivanalysealgorithmus nur dann sinnvolle Ergebnisse, wenn der Komponist des zu analysierenden Werkes kompositorische Regeln zu Motivverarbeitungen korrekt und in nicht allzu freier Interpretation angewendet hat. Hat der Komponist ein Motiv nicht eins zu eins verarbeitet, sondern z.B. innerhalb einer Sequenz auch nur eine Note verändert, kann der Algorithmus dies nicht mehr als Sequenz erkennen. 3.1 DIE IDEE DER KONTURANALYSE ZUR ERWEITERUNG DES MUSICXMLDATENBESTANDS Neben den eben genannten Parametern, die für die Motivanalyse direkt aus MusicXML ausgelesen werden können, ist weiterhin die Melodiekontur ein wichtiger Bestandteil zur Motivanalyse. So wird durch die Analyse der Melodiekontur die Ergebnismenge an Motivverarbeitungen einge- 31 grenzt, wodurch die Motivsuche beschleunigt wird. Außerdem sind einige Motivverarbeitungsformen ohne Konturanalyse gar nicht auffindbar. MusicXML enthält jedoch keine Angaben über eine Kontur, sodass die Angaben hierzu aus den anderen Noteninformationen errechnet werden müssen. Die Kontur beschreibt den Melodieverlauf. Dabei sind drei Genauigkeitsstufen möglich: der Parsons-Code, die diatonische Kontur und die chromatische Kontur. Der Parsons-Code beschreibt, ob sich die kommende Note höher, tiefer oder auf der gleichen Stufe zur aktuellen Note befindet. Die diatonische Kontur beinhaltet den diatonischen Intervallabstand von Note zu Note und die chromatische Kontur beinhaltet den chromatischen Intervallabstand von Note zu Note. Mit Hilfe des Konturverlaufs kann das bereits gefundene Originalmotiv im Weiteren wie eine Schablone über die gerade zu analysierende Notenfolge gelegt werden. Hierbei wird das Musikstück durchsucht, um eine Übereinstimmung − ein Matching − der Noten zur Schablone zu finden. Dadurch können die Motivverarbeitungen erkannt werden. Im Folgenden wird n als Zeigerfunktion verwendet, welche das aktuell betrachtete musikalische Ereignis (Note, Pause oder Akkord) in der vertikalen Ebene bezeichnet. n+1 ist das nächste zeitlich folgende musikalische Ereignis − unabhängig davon, ob es nach einer Viertelnote oder etwa einer ganzen Note folgt. Je nachdem, ob sich Note, Pause oder Akkord an der Notenposition n+1 befindet, muss der Konturverlauf von n zu n+1 für den Parsons-Code, die diatonische oder chromatische Kontur neu berechnet werden. Diese Berechnung wird im MotivsucheAlgorithmus mit einer if-else Anweisung realisiert. Insgesamt sind neun Arten − neun Verbindungstypen − möglich, wie Notenposition n und Notenposition n+1 belegt sein können. In den Klammern stehen die jeweiligen Abkürzungen, die bei Bedarf benutzt werden: Notenposition n Notenposition n+1 Note Note Note Akkord Akkord Akkord Pause Pause Pause Note Akkord Pause Note Akkord Pause Note Akkord Pause → → → → → → → → → (N→N) (N→A) (N→P) (A→N) (A→A) (A→P) (P→N) (P→A) (P→P) Abbildung 16 - n→n+1 Verbindungstypen 32 Für jede dieser Kombinationen muss der Algorithmus eine entsprechende Anweisung ausführen, um die richtige Kontur zu errechnen. Bei Akkorden nimmt die Konturbewegung von einer Akkordposition oder zu einer Akkordposition verschiedene Verlaufsrichtungen ein. Enthält beispielsweise Notenposition n eine Note und Notenposition n+1 einen Akkord mit drei Noten, so gibt es von Position(n) zu Position(n+1) drei Konturverläufe, die für die Motivanalyse jeweils einzeln zu betrachten und zu analysieren sind. Jeder dieser drei Konturverläufe kann mit der Kontur des gesuchten Motivs oder einer Motivverarbeitung übereinstimmen. Es ist nicht zu vernachlässigen, dass die Komplexität zunimmt, je mehr Akkorde ein Musikwerk enthält. Besteht beispielsweise Notenposition n aus einem Akkord mit drei Noten und Notenposition n+1 ebenfalls aus einem Akkord mit drei Noten, so ergeben sich von Position(n) zu Position(n+1) bereits neun Konturverläufe, die analysiert werden müssen. Sind alle Notenpositionen und deren Belegung mit Note, Pause oder Akkord analysiert, kann eine Kontur erstellt werden. Der Parsons-Code beschreibt die Intervallrichtung von Note n zur Note n+1. Eine Note an der ersten Position eines Musikwerkes wird mit dem Startzeichen (S oder auch *) initiiert. Die nachfolgende Note kann entweder den Wert „Repeat“ (R), „Up“ (U) oder „Down“ (D) annehmen. Wie die Bezeichnungen bereits wiedergeben, wird das Intervall von Position(n) zu Position(n+1) für den Parsons-Code an Position(n+1) beschrieben. Liegt die Note an Position(n+1) höher als die Note an Position(n), so ist der Parsons-Code an Position(n+1)=U. Liegt die Note jedoch tiefer, ist der Parsons-Code an Position (n+1)=D. Liegen zwei aufeinanderfolgende Noten auf dem gleichen Intervall, ist der Parsons-Code mit R zu bezeichnen. Rhythmen werden im ParsonsCode ignoriert. Anhand von Parsons-Code-Reihen können alle Musikstücke systematisiert und katalogisiert werden. Die Publikation „The Directory of Tunes and Musical Themes“ von Denys Parsons beschreibt wichtige Klassikwerke, Volksmusik und Populäre Musik im Parsons-Code.28 Möchte ein Musikinteressierter den Titel und Interpreten eines im „The Directory of Tunes and Musical Themes“ publizierten Musikstücks herausfinden, so muss er die Melodie des Stückes gedanklich nachsingen und den Parson-Code daran ableiten. Wie in einem Duden nähert er sich mit jedem neuen Buchstaben im Parsons-Code seinem gewünschten Musikstück. „Happy birthday“, ein Lied, dass weltweit fast jede Person kennt, lässt sich als Parsons-Code auf folgende Weise beschreiben: *RUDUDDRUDUD. Der Parsons-Code, der auch im MPEG7Standard implementiert ist, ist eine bedeutende Idee für die Motivanalyse. Im Gegensatz zum Parsons-Code wird anhand der diatonischen Kontur erkannt, wie viele Tonschritte im diatonischen Raum zwischen zwei Noten bestehen. Die erste Note eines Musikwerkes 28 vgl. Parsons, D. (2002): The Directory of Tunes and Musical Themes. Lübeck: Bohmeier Verlag. 33 wird mit einem Asterisk (*) initiiert. Intervalle, die von Notenposition(n) nach Notenposition(n+1) aufwärts verlaufen, werden mit ganzzahligen positiven Zahlen entsprechend des jeweiligen Intervalls gekennzeichnet. Intervalle, die von Notenposition(n) nach Notenposition(n+1) abwärts verlaufen, werden dementsprechend mit ganzzahligen negativen Zahlen gekennzeichnet. Die chromatische Kontur ist im Gegensatz zum Parsons-Code und zur diatonischen Kontur die genaueste Methode, Intervalle zwischen Noten zu bestimmen. Mit der chromatischen Kontur wird das Intervall zwischen zwei aufeinanderfolgenden Noten im Halbtonschritt ermittelt. Aufwärts verlaufende Intervalle werden mit positiven Zahlen und abwärts verlaufende Intervalle mit negativen Zahlen entsprechend der Halbtonschritte angegeben. Für die Suche nach einigen Motivverarbeitungen muss nur die Kontur des Parsons-Codes betrachtet werden, da die Betrachtung weiterer Konturen oder Noteninformationen keine genaueren Ergebnisse bringt. Andere Motivverarbeitungen können nur voneinander unterschieden werden, wenn sie alle Konturtests durchlaufen. Welche Motivverarbeitung welche Konturtests durchlaufen muss, zeigt Abbildung 17. 34 Parsons‐Code Intervallengung Intervallweitung tonale Sequenz tonale Umkehrung diatonische Kontur Spiegelkrebs reale Umkehrung reale Sequenz chromatische Kontur Augmentation Diminution Krebs I Krebs II Originalmotiv Abbildung 17 - Suche nach Motivverarbeitungen mit Hilfe der Konturtests Die Noteninformationen aus den Parametern Notenname, Alteration, Oktavlage, Notenwert sowie die Daten aus der Konturanalyse ergeben den kompletten Datenbestand, der von dem Motivanalysealgorithmus benötigt wird. 35 3.2 KONZEPT ZUR SEPARATEN ABSPEICHERUNG DER NOTENINFORMATIONEN Mit einer multidimensionalen Arraystruktur können alle einzelnen Informationen einer Note in separate Arrayzellen gespeichert werden. Mit Hilfe eines Arrayschlüssels ist es zu jeder Zeit möglich, auf einzelne oder alle Informationen einer Note zuzugreifen. Weiterhin kann die multidimensionale Arraystruktur skaliert und um weitere Informationen erweitert werden. Dies ist vor allem für den Ausbau des Motivanalysealgorithmus hilfreich. n-3 n-2 n-1 aktuelle Note n n+1 1 2 3 4 5 e g h d . 4 4 4 5 . 1/8 1/8 ¼ 1/8 . 0 1 0 0 0 Alteration Notenwert Oktavlage Notenname Index / Arrayschlüssel Abbildung 18 - Darstellung einer multidimensionalen Arraystruktur Die Abbildung 18 zeigt eine mögliche multidimensionale Arraystruktur mit den direkt aus MusicXML gelesenen Noteninformationen Notenname, Oktavlage, Alteration und Notenwert anhand des selbst komponierten Motivbeispiels. Für den Algorithmus soll nun die Arraystruktur um den n→n+1 Verbindungstyp, den Parsons-Code, die diatonische und chromatische Kontur sowie die Noteninformation Punktierung und X-tole erweitert werden, wie in Abbildung 19 dargestellt. 36 n-3 1 e 4 1/8 0 * * * n-2 2 g 4 1/8 1 U +2 +4 n-1 3 h 4 ¼ 0 U +2 +3 aktuelle Note n 4 d 5 1/8 0 U +2 +3 n+1 5 . . . 0 D -1 -2 Note → Note Note → Note Note → Note Note → Note Note → Note nein nein nein nein nein nein nein nein ja nein X-tole Punktierung n→n+1 Verbindungstyp Chromatische Kontur Diatonische Kontur Parsons-Code Alteration Notenwert Oktave Notenname Index / Arrayschlüssel Abbildung 19 - Darstellung einer erweiterten multidimensionalen Arraystruktur Abbildung 19 zeigt, wie später alle Noten und Pausen eines Werkes in einem multidimensionalen Array untergebracht werden. Die Daten aus diesem Array werden bei der Suche nach Motivverarbeitungen miteinander verglichen. Mit Hilfe mathematischer Regeln können so Motivverarbeitungen zum Originalmotiv zurückgeführt werden. Im Folgenden werden die Noteninformationen, die bei den einzelnen Motivverarbeitungsformen im Array auftreten, vorgestellt und mathematische Regeln zur Rückführung der Motivverarbeitungen zum Originalmotiv entwickelt. 37 3.3 SYSTEMATISCHER BEZUG DER MOTIVVERARBEITUNG ZUM ORIGINALMOTIV 3.3.1 ORIGINALMOTIV / WIEDERHOLUNG Ein Originalmotiv ist die Basis, aus der alle Motivverarbeitungen entstehen. Daher ist es wichtig, dass so viele Noteninformationen wie möglich aus dem Originalmotiv extrahiert werden, um über gutes Ausgangsmaterial für die Analyse der Motivverarbeitungen zu verfügen. Das Originalmotiv wird als solches anhand seiner Wiederholungen identifiziert. Die Wiederholung ist hier gleichzusetzen mit dem Originalmotiv. Zur Veranschaulichung wird wieder das selbst komponierte Motiv als Beispiel genutzt. Notenname E G B D C B D E C A Alteration Oktave 0 4 +1 4 0 4 0 5 0 5 0 4 0 4 0 4 0 4 0 3 Notenwert Punktierung X-tole 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/4 nein nein Note → Note 1/8 nein nein Note → Note 1/4 ja nein Note → Note 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/2 nein nein Note → Note n→n+1 (Parsons) Start Up Up Up Down Down Down Up Down Down Start +2 +2 +2 -1 -1 -5 +1 -2 -2 Start +4 +3 +3 -2 -1 -9 +2 -4 -3 n→n+1 Verbindungstyp n→n+1 (Diatonisch) n→n+1 (Chromatisch) Tabelle 7 - Noteninformationen des Originalmotivs Die Tabelle 7 stellt alle für die Motivanalyse zur Verfügung stehenden Noteninformationen dar: Notenname, Alteration, Oktave, Notenwert, Punktierung und X-tole, den n→n+1Verbindungstyp, den Parsons-Code, die diatonische sowie die chromatische Kontur. 38 3.3.2 IMITATION Eine Imitation kann nach einigen Noten frei weitergeführt werden. Durch die freie Weiterführung ist es nicht möglich, diese Motivverarbeitungsform vollständig auf das Originalmotiv automatisiert zurückzuführen. Eine Analyse der Imitation ist dann möglich, wenn der frei weitergeführte Motivschwanz nicht betrachtet würde. Dies hat allerdings zur Folge, dass unter Umständen das Motiv zu kurz ist und der Algorithmus Notenfolgen als motivthematische Verarbeitungen ausgibt, die an sich gar keine sind. Für die Diplomarbeit soll die Imitation daher unbeachtet bleiben. 3.3.3 SEQUENZ Es ist zwischen tonaler und realer Sequenz zu unterscheiden. Die tonale Sequenz ist eine zur Notenlinie parallel verschobene Wiederholung des Originalmotivs, bei der die Tonart und damit auch die diatonische Kontur erhalten bleiben. So bleibt in einer tonalen Sequenz eines Motivs in G-Dur beispielsweise das Fis bestehen, sofern dieses in der Sequenz erreicht wird. Es tritt jedoch in diesem Fall an einer anderen vertikalen Position auf. Es treten keine zusätzlichen Alterationen auf einer anderen Tonhöhe auf. Die einzige Ausnahme ist eine Alteration, die außerhalb der Tonart auch im Originalmotiv auftritt. Diese findet sich in der Sequenz (sowohl bei der tonalen als auch der realen) an der gleichen zeitlichen Position wieder. Abbildung 20 - Tonale Sequenz und deren Konturverlauf Wie in Abbildung 20 angedeutet, ist es relativ frei, um wie viele Tonschritte die Sequenz nach oben oder unten verschoben wird, jedoch muss der Anfangston aus dem Notenvorrat der vorherrschenden Tonart kommen, sofern nicht bereits der Anfangston des Originalmotivs tonartenunabhängig alteriert ist. 39 Durch das vertikale Verschieben gehen diverse Noteninformationen, die ein Motiv in der Vertikalen beschreiben, verloren. Somit können Notenname und Oktavlage nicht mehr zur Analyse der tonalen Sequenz herangezogen werden. Auch wären Noteninformationen zur Alteration nur auswertbar, wenn das Originalmotiv in C-Dur notiert wäre, und somit tonartenabhängige Alterationen nicht auftreten. Daher können zur Identifizierung der tonalen Sequenz nur die Informationen herangezogen werden, die in Tabelle 8 enthalten sind. Hierzu zählen die Daten des ParsonsCode und der diatonischen Kontur, ebenso die horizontalen Noteninformationen Notenwert, Punktierung und X-tole. Die Noteninformationen zur chromatischen Kontur sind erwartungsgemäß für das Finden einer tonalen Sequenz nicht nutzbar. Notenname Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) (+1)29 1/8 nein nein Note → Note Start 1/8 nein nein Note → Note Up 1/4 nein nein Note → Note Up 1/8 nein nein Note → Note Up 1/4 ja nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Up 1/8 nein nein Note → Note Down 1/2 nein nein Note → Note Down Start +2 +2 +2 -1 -1 -5 +1 -2 -2 Tabelle 8 - Noteninformationen der tonalen Sequenz Die folgende Tabelle stellt dar, welche Noteninformationen der tonalen Sequenz nicht mehr dem Originalmotiv entsprechen. Originalmotiv Tonale Sequenz Notenname Alteration Oktavlage Notenwert Notenwert Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code Diatonische Kontur Diatonische Kontur Chromatische Kontur Tabelle 9 - Vergleichbare Noteninformationen zwischen der tonalen Sequenz und Originalmotiv Ist das Originalmotiv in einer Kreuz- bzw. B-Tonart notiert, können weitere Alterationen durch die Parallelverschiebung auftreten, die sich dann an dieser Position mit der tonartenunabhängigen Alteration summieren. 29 40 Die reale Sequenz ist im Vergleich zur tonalen Sequenz mathematisch genauer und eindeutiger zu identifizieren. Bei der realen Sequenz werden alle Intervalle chromatisch beibehalten, somit dient die chromatische Kontur als weiteres Kriterium zur Auffindung einer realen Sequenz. Eine reale Sequenz kann auf jeder beliebigen Tonstufe beginnen, also auch auf einer bereits alterierten Tonstufe. Daher sind auch hier, wie bei der tonalen Sequenz, die Noteninformationen zur Tonhöhe, Alteration und Oktavlage bei einem Vergleich mit dem Originalmotiv innerhalb der Motivanalyse nicht verwendbar. Tabelle 10 stellt die zur Verfügung stehenden Noteninformationen einer beliebigen realen Sequenz des Beispielmotivs dar. Notenname Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/4 nein nein Note → Note 1/8 nein nein Note → Note 1/4 ja nein Note → Note 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/8 nein nein Note → Note 1/2 nein nein Note → Note Start Up Up Up Down Down Down Up Down Down Start +2 +2 +2 -1 -1 -5 +1 -2 -2 Start +4 +3 +3 -2 -1 -9 +2 -4 -3 Tabelle 10 - Noteninformationen der realen Sequenz Originalmotiv Reale Sequenz Notenname Alteration Oktavlage Notenwert Notenwert Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code Diatonische Kontur Diatonische Kontur Chromatische Kontur Chromatische Kontur Tabelle 11 - Vergleichbare Noteninformationen zwischen realer Sequenz und Originalmotiv Tabelle 11 zeigt alle Noteninformation eines Originalmotivs und dessen realer Sequenz, die während der Motivanalyse miteinander verglichen werden. Neben dem Parsons-Code und der diatonischen Kontur muss auch die chromatische Kontur der realen Sequenz mit der des Originalmotivs übereinstimmen. 41 3.3.4 UMKEHRUNG Auch bei Umkehrungen wird zwischen tonalen und realen Umkehrungen unterschieden. Soll eine tonale Umkehrung gefunden werden, so ist erstmalig ein Transformationsschritt vom Originalmotiv zur Umkehrung notwendig. Eine tonale Umkehrung als an die Tonart angepasste horizontale Spiegelung des Originalmotivs kann auf einer beliebigen Tonstufe innerhalb der Tonart beginnen. Betrachtet werden drei mögliche tonale Umkehrungen des Beispielmotivs in Abbildung 21. Mit Hilfe dieser drei Beispiele soll eine mathematische Beschreibung gefunden werden. Originalmotiv Einige Formen der tonalen Umkehrung Abbildung 21 - Mögliche tonale Umkehrungen des Originalmotivs Auffällig ist, dass alle Notenwerte auch in der tonalen Umkehrung erhalten bleiben. Es kann auch für die reale Umkehrung vorausgesetzt werden, dass durch die Spiegelung an der Horizontalen der Rhythmus nicht beeinflusst wird. Weiterhin ist gut sichtbar, dass eine Umkehrung stets spiegelverkehrt zum Verlauf des Originalmotivs ist. Eine aufwärts verlaufende Kontur geht in der Umkehrung abwärts, eine abwärts verlaufende Kontur im Originalmotiv geht in der Umkehrung aufwärts. Wird aufwärts mit einem „+“ und abwärts mit einem „-“ symbolisiert, so lässt sich folgende Abbildungsvorschrift für das Originalmotiv zur Umkehrung beschreiben: 42 wenn n→n+1(Originalmotiv) = + wenn n→n+1(Originalmotiv) = - Befindet sich eine Note genau auf der Achse, an der die Spiegelung verläuft, befindet sich die Note im Originalmotiv wie auch in der Umkehrung auf der gleichen Tonhöhe. n→n+1(Umkehrung) = n→n+1(Umkehrung) = + Eine Abbildungsregel lässt sich daraus für den Parsons-Code, für die diatonische, sowie auch für die chromatische Kontur bilden. Für den Parsons-Code wird die Abbildungsregel wie folgt angepasst: wenn n→n+1(Originalmotiv) = U n→n+1(Umkehrung) = D wenn n→n+1(Originalmotiv) = D n→n+1(Umkehrung) = U wenn n→n+1(Originalmotiv) = R n→n+1(Umkehrung) = R Für die diatonische und chromatische Kontur muss stets nur das Vorzeichen geändert werden. Sei x wenn n→n+1(Originalmotiv) = (+)x wenn n→n+1(Originalmotiv) = -x n→n+1(Umkehrung) = -x n→n+1(Umkehrung) = (+)x 30 Die chromatische Kontur ist jedoch für die Betrachtung der tonalen Umkehrung irrelevant, da die chromatischen Schritte je nach Tonart unterschiedlich und daher nicht mehr mit der chromatischen Kontur des Originalmotivs zu vergleichen sind. Die chromatische Kontur ist daher nur bei der realen Umkehrung von Interesse. Abbildung 22 zeigt die drei möglichen tonalen Umkehrungen aus Abbildung 21 mit den für die Motivanalyse verwendbaren Konturen. 30 Da bei ganzen Zahlen in einem MusicXML-Dokument keine Pluszeichen angezeigt werden, sind die Pluszeichen zur Verdeutlichung in Klammern gesetzt. 43 Originalmotiv S U U U D D D U D D Parsons-Code * 2 -1 -1 -5 1 -2 -2 Diatonische Kontur Form 1 der tonalen Umkehrung S D D D U U U D U U Parsons-Code * 1 5 -1 2 2 Diatonische Kontur Form 2 der tonalen Umkehrung S D D D U U U D U U Parsons-Code * 1 5 -1 2 2 Diatonische Kontur Form 3 der tonalen Umkehrung S D D D U U U D U U Parsons-Code * 5 -1 2 2 Diatonische Kontur 2 -2 -2 -2 2 -2 -2 -2 -2 -2 -2 1 1 1 1 Abbildung 22 - Mögliche Formen der Umkehrung und deren Kontur Da die Spiegelachse bei der Umkehrung frei gewählt wird, können weder Notennamen noch Oktavlagen dazu genutzt werden, in der Motivanalyse eine Umkehrung aufzufinden. Ebenso ist auch die Alteration ähnlich wie bei der tonalen und realen Sequenz nicht zu verwenden. Bei der automatisierten Suche nach tonalen Umkehrungen sind also lediglich die rhythmischen Werte sowie die diatonische Kontur und der Parsons-Code ausschlaggebend. Tabelle 12 zeigt die für die Motivanalyse zur Verfügung stehenden Noteninformationen einer beliebigen tonalen Umkehrung des Beispielmotivs. Notenname Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/8 nein nein Note → Note Start 1/8 nein nein Note → Note Down 1/4 nein nein Note → Note Down 1/8 nein nein Note → Note Down 1/4 ja nein Note → Note Up 1/8 nein nein Note → Note Up 1/8 nein nein Note → Note Up 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Up 1/2 nein nein Note → Note Up Start -2 -2 -2 +1 +1 +5 -1 +2 +2 Tabelle 12 - Noteninformationen der tonalen Umkehrung Eine Übersicht der Parameter, die bei der Suche nach tonalen Umkehrungen mit dem Originalmotiv verglichen werden können, ist in Tabelle 13 enthalten. 44 Originalmotiv Tonale Umkehrung Notenname Alteration Oktavlage Notenwert Notenwert Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code der Umkehrung Diatonische Kontur Diatonische Kontur der Umkehrung Chromatische Kontur Tabelle 13 - Vergleichbare Noteninformationen zwischen tonaler Umkehrung und Originalmotiv Für die reale Umkehrung gelten die gleichen Abbildungsregeln in der Konturanalyse wie für die tonale Umkehrung. Auch sind die gleichen Parameter der realen Umkehrung zu betrachten: Rhythmus und Konturen (siehe Tabelle 14 und Tabelle 15). Bei der realen Umkehrung ist aber die Analyse der chromatischen Kontur zu ergänzen, da die reale Umkehrung chromatisch eins zu eins gespiegelt wird. Notenname Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/8 nein nein Note → Note Start 1/8 nein nein Note → Note Down 1/4 nein nein Note → Note Down 1/8 nein nein Note → Note Down 1/4 ja nein Note → Note Up 1/8 nein nein Note → Note Up 1/8 nein nein Note → Note Up 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Up 1/2 nein nein Note → Note Up Start -2 -2 -2 +1 +1 +5 -1 +2 +2 Start -4 -3 -3 +2 +2 +9 -2 +4 +3 Tabelle 14 - Noteninformationen der realen Umkehrung Originalmotiv Reale Umkehrung Notenname Alteration Oktavlage Notenwert Notenwert Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code der Umkehrung Diatonische Kontur Diatonische Kontur der Umkehrung Chromatische Kontur Chromatische Kontur der Umkehrung Tabelle 15 - Vergleichbare Noteninformationen zwischen realer Umkehrung und Originalmotiv 45 3.3.5 KREBS Auch der Krebs wird in zwei verschiedenen Formen betrachtet: Krebs I sowie Krebs II. Der Krebs I ist die Motivform, bei der das Motiv von hinten nach vorn gelesen wird. Wie in Tabelle 16 dargestellt, sind im Krebs I immer noch alle Noteninformationen aus dem Originalmotivs enthalten, lediglich anders sortiert. Notenname A C E D B C D B G E Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 0 3 1/2 nein nein Note → Note Start 0 4 1/8 nein nein Note → Note Up 0 4 1/8 nein nein Note → Note Up 0 4 1/8 nein nein Note → Note Down 0 4 1/8 nein nein Note → Note Up 0 5 1/4 ja nein Note → Note Up 0 5 1/8 nein nein Note → Note Up 0 4 1/4 nein nein Note → Note Down +1 4 1/8 nein nein Note → Note Down 0 4 1/8 nein nein Note → Note Down Start +2 +2 -1 +5 +1 +1 -2 -2 -2 Start +3 +4 -2 +9 +1 +2 -3 -3 -4 Tabelle 16 - Noteninformationen des Krebs I Originalmotiv Krebs I Notenname Notenname (rückwärtige Reihenfolge) Alteration Alteration (rückwärtige Reihenfolge) Oktavlage Oktavlage (rückwärtige Reihenfolge) Notenwert Notenwert (rückwärtige Reihenfolge) Punktierung Punktierung (rückwärtige Reihenfolge) X-tole X-tole (rückwärtige Reihenfolge) Parsons-Code Parsons-Code (rückwärtige Reihenfolge und Symboltausch) Diatonische Kontur Diatonische Kontur (rückwärtige Reihenfolge und Vorzeichentausch) Chromatische Kontur Chromatische Kontur (rückwärtige Reihenfolge und Vorzeichentausch) Tabelle 17 - Vergleichbare Noteninformationen zwischen Krebs I und Originalmotiv Um festzustellen, ob es sich bei einer Notenfolge um das Krebs I-Motiv des Originalmotivs handelt, sind alle Parameter in rückwärtiger Reihenfolge zu betrachten (siehe Tabelle 17). Die Transformation des Parsons-Codes, der diatonischen sowie der chromatischen Kontur verlangt jedoch, wie es sich in Abbildung 23 erahnen lässt, einen weiteren Schritt. 46 Originalmotiv ParsonsS U U U Code Diatonische * 2 2 2 Kontur Chromatische * 4 3 3 Kontur D D D U D D Krebs I S U U D U U U D D D -1 -1 -5 1 -2 -2 * 2 2 -1 5 1 1 -2 -2 -2 -2 -1 -9 2 -4 -3 * 3 4 -2 9 1 2 -3 -3 -4 Abbildung 23 - Konturen vom Originalmotiv und Krebs I Für die Bildung der Konturen für Krebs I ist ein Zweischrittverfahren notwendig, welches Abbildung 24 verdeutlichen soll. Im ersten Schritt werden die Konturenreihen in verkehrter Reihenfolge angeordnet. Im zweiten Schritt müssen alle Vorzeichen getauscht sowie die Symbole im Parsons-Code invertiert werden. 47 1. Ausgangssituation Das vorliegende Originalmotiv S U U U D D D * 2 2 2 -1 -1 -5 * 4 3 3 -2 -1 -9 U 1 2 D -2 -4 D -2 -3 2. Krebsbildung 3. Umwandlung Parsons-Code: -Symbol am Reihenanfang wird durch * ersetzt -Symbolumwandlungen: D→U, U→D und R→R Konturreihe wird in verkehrter Reihenfolge gebildet. Diatonische Kontur: -Zahl am Reihenanfang wird durch * ersetzt -Symbole ersetzen: - → + und + → - D -2 -4 D -2 -3 U -2 -3 D 1 2 D 1 1 D 5 9 U -1 -2 U 2 4 U 2 3 S * * Chromatische Kontur: -Zahl am Reihenanfang wird durch * ersetzt -Symbole ersetzen: - → + und + → S U U D U U U D D D * 2 2 -1 5 1 1 -2 -2 -2 * 3 4 -2 9 1 2 -3 -3 -4 Abbildung 24 - Transformationsprozess vom Originalmotiv zur Krebsform I Nur wenn in einer Notenreihe nach der Transformation alle Noteninformationen aller Parameter mit denen des Originalmotivs übereinstimmen, handelt es sich eindeutig um einen Krebs I. Der Krebs II ist ähnlich zu analysieren wie der Krebs I. Jedoch sind hier nur die Intervalle rückwärts zu lesen, der Rhythmus ist bei Krebs II mit dem Originalmotiv identisch. Durch die Beibehaltung der Notenwerte ist es für den Hörer für gewöhnlich leichter, den Bezug zum Originalmo- 48 tiv zu erkennen.31 Wieder sind alle Parameter in die Analyse einzubeziehen. Wie die Werte der Parameter bei dem Krebs II des Beispielmotivs lauten, ist in Tabelle 18 dargestellt. Die Transformation der Konturen, Notennamen, Alterationen sowie Oktavlagen durch den Algorithmus vom Originalmotiv zum Krebs II erfolgt auf die gleiche Weise wie bei Krebs I. Jedoch müssen die Notenwerte nicht transformiert werden, diese liegen somit in der gleichen Reihenfolge wie beim Originalmotiv vor. Notenname A C E D B C D B G E Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 0 3 1/8 nein nein Note → Note Start 0 4 1/8 nein nein Note → Note Up 0 4 1/4 nein Nein Note → Note Up 0 4 1/8 nein nein Note → Note Down 0 4 1/4 nein nein Note → Note Up 0 5 1/8 ja nein Note → Note Up 0 5 1/8 nein nein Note → Note Up 0 4 1/8 nein nein Note → Note Down +1 4 1/8 nein nein Note → Note Down 0 4 1/2 nein nein Note → Note Down Start +2 +2 -1 +5 +1 +1 -2 -2 -2 Start +3 +4 -2 +9 +1 +2 -3 -3 -4 Tabelle 18 - Noteninformationen des Krebs II Originalmotiv Krebs II Notenname Notenname (rückwärtige Reihenfolge) Alteration Alteration (rückwärtige Reihenfolge) Oktavlage Oktavlage (rückwärtige Reihenfolge) Notenwert Notenwert Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code (rückwärtige Reihenfolge und Symboltausch) Diatonische Kontur Diatonische Kontur (rückwärtige Reihenfolge und Vorzeichentausch) Chromatische Kontur Chromatische Kontur (rückwärtige Reihenfolge und Vorzeichentausch) Tabelle 19 - Vergleichbare Noteninformationen zwischen Krebs II und Originalmotiv Tabelle 19 zeigt, welche Noteninformationen des Krebses II bei der Transformation aus dem Originalmotiv zum Originalmotiv gleich bleiben. vgl. Amon, R. (2005) Motiv – Motivisch-thematische Arbeit, Lexikon der Harmonielehre. Wien-München: Doblinger Metzler Verlag, 193 f. 31 49 3.3.6 SPIEGELKREBS Der Spiegelkrebs ist eine Kombination aus tonaler Umkehrung und Krebs I, auch Krebsumkehrung genannt. Aufgrund der horizontalen Spiegelung, durch die der Spiegelkrebs auf jeder beliebigen Tonstufe innerhalb der vorherrschenden Tonart beginnen kann, sind Notennamen, Alterationen, Oktavlagen sowie die chromatische Kontur keine brauchbaren Parameter, um den Spiegelkrebs auf das Originalmotiv zurückzuführen. Tabelle 20 zeigt alle Parameter, aufgrund derer der Spiegelkrebs durch Vergleich mit dem Originalmotiv in der Motivanalyse als solcher erkannt wird. Wiederum ist es notwendig, Transformationen vorzunehmen. Originalmotiv Notenname Alteration Oktavlage Notenwert Punktierung X-tole Parsons-Code Diatonische Kontur Spiegelkrebs Notenwert (rückwärtige Reihenfolge) Punktierung (rückwärtige Reihenfolge) X-tole (rückwärtige Reihenfolge) Parsons-Code (rückwärtige Reihenfolge) Diatonische Kontur (rückwärtige Reihenfolge) Chromatische Kontur Tabelle 20 - Vergleichbare Noteninformationen zwischen Spiegelkrebs und Originalmotiv Es spielt keine Rolle, ob zuerst die Umkehrung und dann Krebs I oder zuerst der Krebs I und dann die Umkehrung gebildet wird. Dies wird in Abbildung 25 anhand des Transformationsprozesses für den Parsons-Code verdeutlicht. 50 Originalmotiv S U U U D D D U D D Umkehrung Krebs Spiegelkrebs S U U D U U U D D D S D D D U U U D U U Umkehrung Krebs = S D D U D D D U U U S D D U D D D U U U Abbildung 25 - Transformationsmöglichkeiten vom Originalmotiv zum Spiegelkrebs anhand des Parsons-Codes Die Transformation der Konturen bei Krebs I verlangt das rückwärtige Lesen der Noten sowie einen Symboltausch bzw. Vorzeichentausch, während bei der Umkehrung zusätzlich ein Symboltausch bzw. Vorzeichentausch notwendig wird. Somit hebt sich der Symbol- und Vorzeichentausch wieder auf. Die Konturen des Spiegelkrebses unterscheiden sich vom Originalmotiv also nur in der rückwärtigen Reihenfolge. Welche konkreten Werte bei einem beliebigen Spiegelkrebs des Beispielmotivs entstehen, zeigt Tabelle 21. Notenname Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/2 nein nein Note → Note Start 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Up 1/8 nein nein Note → Note Down 1/4 ja nein Note → Note Up 1/8 nein nein Note → Note Up 1/4 nein nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Down Start -2 -2 +1 -5 -1 -1 +2 +2 +2 Tabelle 21 - Noteninformationen des Spiegelkrebses Je nachdem, ob zunächst die Umkehrung oder erst der Krebs durchgeführt wird, fallen einige Parameter in unterschiedlicher Reihenfolge als Basis für einen Vergleich der Noteninformationen 51 zwischen Originalmotiv und Verarbeitung weg. Das Endresultat ist aber bei beiden Reihenfolgen dasselbe, da die Reihenfolge der Transformation irrelevant ist. Abbildung 26 zeigt auf der linken Seite, welche Noteninformationen für die Motivanalyse zu verwenden sind, wenn zunächst die Umkehrung und danach davon der Krebs I gebildet werden. Eine Umkehrung ist mit dem Originalmotiv allein durch die Parameter Notenwert, Parsons-Code sowie die diatonische Kontur vergleichbar. Wird danach der Krebs I gebildet, so sind alle diese betrachteten Noteninformationen zur Motivanalyse zu verwenden. Auf der rechten Seite von Abbildung 26 wird zunächst der Krebs I gebildet, bei dem alle Noteninformationen zum Vergleich mit dem Originalmotiv verwendet werden können. Erst danach fallen Notennamen, Alterationen, Oktavlagen sowie die chromatischen Konturen als brauchbare Noteninformationen weg. Anhand dieser Darstellung wird deutlich, dass es wesentlich effizienter ist, zuerst die Umkehrung und danach den Krebs zu bilden, da so vom Algorithmus bei der Berechnung des Krebses wesentlich weniger Noteninformationen durchgearbeitet werden müssen. Originalmotiv Umkehrung Notenname Alteration Oktavlage Notenwert Chromatische Kontur Diatonische Kontur Parsons-Code Notenwert - Krebs der Umkehrung (Spiegelkrebs) Notenwert - Diatonische Kontur Parsons-Code Diatonische Kontur Parsons-Code Originalmotiv Krebs Notenname Alteration Oktavlage Notenwert Chromatische Kontur Diatonische Kontur Parsons-Code Notenname Alteration Oktavlage Notenwert Chromatische Kontur Diatonische Kontur Parsons-Code Umkehrung des Krebses (Spiegelkrebs) Notenwert Diatonische Kontur Parsons-Code Abbildung 26 - Verlust der Noteninformationen in den einzelnen Umwandlungsstufen 3.3.7 INTERVALLWEITUNG Bei der Intervallweitung werden die Intervalle gestreckt. Es können beliebige Tonhöhen erreicht werden, solange die Intervallrichtung bestehen bleibt. Dies macht es unmöglich, Notennamen, Alterationen sowie Oktavlagen als Kriterium in der Motivanalyse zu verwenden. Auch sind die diatonische und die chromatische Kontur nicht mehr mit dem Originalmotiv vergleichbar. Tabelle 22 zeigt die Parameter, die bei der Motivanalyse ein durch Intervallweitung verarbeitetes Motiv auf das Originalmotiv zurückführen lassen. 52 Originalmotiv Intervallweitung Notenname Alteration Oktavlage Notenwert Notenwert Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code Diatonische Kontur Chromatische Kontur Tabelle 22 - Vergleichbare Noteninformationen zwischen Intervallweitung und Originalmotiv Die Noteninformationen des intervallgeweiteten Motivs sind in Tabelle 23 verzeichnet. Notenname Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/8 nein nein Note → Note Start 1/8 nein nein Note → Note Up 1/4 nein nein Note → Note Up 1/8 nein nein Note → Note Up 1/4 ja nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 Nein Nein Note → Note Up 1/8 nein nein Note → Note Down 1/2 nein nein Note → Note Down Tabelle 23 - Noteninformationen der Intervallweitung 3.3.8 INTERVALLENGUNG Für die Intervallengung gelten ähnliche Regeln, wie bei der Intervallweitung. Der Unterschied liegt hierbei darin, dass Intervalle bei der Intervallengung kleiner sein müssen, als die des Originalmotivs. Wie bei der Intervallweitung liegen die Gemeinsamkeiten der Intervallengung zum Original in den rhythmischen Parametern Notenwert, Punktierung und X-tole sowie im Parsons-Code (siehe Tabelle 24). 53 Originalmotiv Intervallengung Notenname Alteration Oktavlage Notenwert Notenwert Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code Diatonische Kontur Chromatische Kontur Tabelle 24 - Vergleichbare Noteninformationen zwischen Intervallengung und Originalmotiv Auffällig ist, dass auch die konkreten Noteninformationen des durch Intervallengung verarbeiteten Originalmotivs, wie in Tabelle 25 dargestellt, sich nicht von den entsprechenden Noteninformationen der Intervallweitung unterscheiden. Da nur diese Parameter zur Beschreibung von Notenverläufen zur Verfügung stehen, ist auch durch den Algorithmus nicht zwischen Intervallengung und Intervallweitung zu trennen. Die Frage, um welche Motivverarbeitungsform es sich handelt, ist jedoch zweitrangig. Wesentlicher ist es, dass überhaupt die Motivverarbeitungen im Allgemeinen gefunden werden. Notenname Alteration Oktave Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/8 nein nein Note → Note Start 1/8 nein nein Note → Note Up 1/4 nein nein Note → Note Up 1/8 nein nein Note → Note Up 1/4 ja nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Down 1/8 nein nein Note → Note Up 1/8 nein nein Note → Note Down 1/2 nein nein Note → Note Down Tabelle 25 - Noteninformationen der Intervallengung 3.3.9 AUGMENTATION Bei der Augmentation werden alle Notenwerte des Originalmotivs mit dem Faktor Zwei multipliziert. Alle anderen Noteninformationen bleiben mit dem Originalmotiv identisch und können in der Motivanalyse direkt verglichen werden. 54 Tabelle 26 zeigt die durch den Algorithmus zu vergleichenden Noteninformationen zwischen Originalmotiv und Augmentation. Originalmotiv Augmentation Notenname Notenname Alteration Alteration Oktavlage Oktavlage Notenwert Notenwert * 2 Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code Diatonische Kontur Diatonische Kontur Chromatische Kontur Chromatische Kontur Tabelle 26 - Vergleichbare Noteninformationen zwischen Augmentation und Originalmotiv Wie die Noteninformationen der Augmentation des Beispielmotivs aussehen, ist in Tabelle 27 dargestellt. Da hier alle Parameter mit Noteninformationen belegt sind, kann die Augmentation eindeutig identifiziert werden. Auch ist die Analyse der Augmentation für den Algorithmus sehr einfach, da neben dem simplen Vergleich der Noteninformationen lediglich zuvor die Notenwerte mit dem Faktor Zwei multipliziert werden müssen. Notenname E G B D C B D E C A Alteration Oktave 0 4 +1 4 0 4 0 5 0 5 0 4 0 4 0 4 0 4 0 3 Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/4 nein nein Note → Note Start 1/4 nein nein Note → Note Up 1/2 nein nein Note → Note Up 1/4 nein nein Note → Note Up 1/2 ja nein Note → Note Down 1/4 nein nein Note → Note Down 1/4 nein nein Note → Note Down 1/4 nein nein Note → Note Up 1/4 nein nein Note → Note Down 1/1 nein nein Note → Note Down Start +2 +2 +2 -1 -1 -5 +1 -2 -2 Start +4 +3 +3 -2 -1 -9 +2 -4 -3 Tabelle 27 - Noteninformationen der Augmentation 3.3.10 DIMINUTION Ebenso wie die Augmentation ist die Berechnung der Diminution innerhalb eines Musikwerkes einfach, da hier bis auf die Notenwerte alle Noteninformationen direkt mit dem Originalmotiv verglichen werden können. Die Notenwerte des Motivs müssen vor dem Vergleich mit dem Originalmotiv durch Zwei dividiert werden (siehe Tabelle 28). 55 Originalmotiv Augmentation Notenname Notenname Alteration Alteration Oktavlage Oktavlage Notenwert Notenwert / 2 Punktierung Punktierung X-tole X-tole Parsons-Code Parsons-Code Diatonische Kontur Diatonische Kontur Chromatische Kontur Chromatische Kontur Tabelle 28 - Vergleichbare Noteninformationen zwischen Diminution und Originalmotiv Für die Motivanalyse der Diminution des Beispielmotivs stehen folgende Werte zum Vergleich: Notenname E G B D C B D E C A Alteration Oktave 0 4 +1 4 0 4 0 5 0 5 0 4 0 4 0 4 0 4 0 3 Notenwert Punktierung X-tole n→n+1 Verbindungstyp n→n+1 (Parsons) n→n+1 (Diatonisch) n→n+1 (Chromatisch) 1/16 nein nein Note → Note Start 1/16 nein nein Note → Note Up 1/8 nein nein Note → Note Up 1/16 nein nein Note → Note Up 1/8 ja nein Note → Note Down 1/16 nein nein Note → Note Down 1/16 nein nein Note → Note Down 1/16 nein nein Note → Note Up 1/16 nein nein Note → Note Down 1/4 nein nein Note → Note Down Start +2 +2 +2 -1 -1 -5 +1 -2 -2 Start +4 +3 +3 -2 -1 -9 +2 -4 -3 Tabelle 29 - Noteninformationen der Diminution 3.3.11 WEITERE FORMEN Weitere motivthematische Verarbeitungen, wie beispielsweise Abspaltung, Erweiterung, Differenzierung und entwickelnde Variation sind mathematisch nicht oder nur schwer zu fassen.32 Es ist nicht auszuschließen, dass für diese Motivverarbeitungen Transformationsregeln entwickelt werden können, um eine Verbindung zum Originalmotiv herstellen zu können. Zu einem späteren Zeitpunkt wäre die Ausweitung des dieser Diplomarbeit zugrundeliegenden Algorithmus in Hinsicht weiterer Motivverarbeitungen denkbar. vgl. Amon, R. (2005) Motiv – Motivisch-thematische Arbeit, Lexikon der Harmonielehre. Wien-München: Doblinger Metzler Verlag, 195 f. 32 56 4 DER ALGORITHMUS Viele Programmiersprachen stellen Module und Funktionen für die Analyse, Manipulation und Bearbeitung von XML-Dokumenten bereit. Die Programmiersprache PHP stellt gleich eine ganze Reihe an Klassen und Modulen zur XML-Bearbeitung zur Verfügung. Wichtige Klassen sind dabei DOM XML, libxml, XML-Parser, XSLT mit XSL und SimpleXML. Für diese Diplomarbeit wird daher PHP genutzt, insbesondere mit den Funktionen und Klassen von SimpleXML. 4.1 DAS EINLESEN UND ABSPEICHERN DER QUELLDATEN Liegt ein zu analysierendes MusicXML-Dokument vor, muss diese Datei zunächst vollständig eingelesen werden (siehe Quelltext 3). $musicxmldatei = “Beispiel.xml”; $this->xml = simplexml_load_file($musicxmldatei); Quelltext 3 - Initialisierung in SimpleXML Mit Hilfe der Funktion simplexml_load_file(string $filename) wird die gesamte MusicXMLDatei geladen und in ein Objekt umgewandelt. Im nächsten Schritt wird eine Schleife angelegt, die das gesamte Objekt parst, um die nötigen Noteninformationen für eine Motivanalyse zu extrahieren. Dabei wird dem Objekt die Funktion xpath(string $path) angehangen, die das direkte Navigieren zu MusicXML-Elementen ermöglicht (siehe Quelltext 4). So kann gezielt auf Elemente, auf deren Kindelemente oder auf ganze Bäume navigiert werden. foreach($this->xml->xpath("/score-partwise/part") as $presentation2){ foreach($presentation2->xpath("measure") as $key_out => $presentation){ … } } Quelltext 4 - Auslesen der Partitur mit Hilfe zweier foreach-Schleifen 57 Enthält ein MusicXML-Dokument eine Partitur mit mehreren Notensystemen, so sind diese in MusicXML nacheinander innerhalb des Elements <score-partwise> angeordnet, wie in Quelltext 5 verkürzt dargestellt ist. Das Element eines Systems wird mit <part> angegeben. Die Systeme wiederrum enthalten alle Takte. Diese werden jeweils mit <measure> angegeben. <score-partwise> <part id="P1"> <measure number="1"> <note> ... </note> </measure> <measure number="2"> ... </measure> ... </part> <part id="P2"> <measure number="1"> ... </measure> </part> ... </score-partwise> // 1. System // 1. Takt des ersten Systems // 2. Takt des ersten Systems // 2. System // 1. Takt des zweiten Systems Quelltext 5 - Anordnung der Systeme innerhalb von MusicXML Mit Hilfe der Funktion xpath kann über den Pfad „score-partwise/part“ direkt in die Präsentationsebene der Noten innerhalb des MusicXML-Dokuments navigiert werden. Dabei ist der Rückgabewerte von xpath stets ein multidimensionales Array. Wie in Abbildung 27 dargestellt, navigiert die erste foreach-Schleife (gestrichelte Linien) direkt in einzelne Notensysteme einer Partitur, während die innere foreach-Schleife (durchgezogene Linien) durch die einzelnen Takte eines Notensystems parst. 58 Innere foreach-Schleife Äußere foreach-Schleife _._ äußere foreach-Schleife ___ innere foreach-Schleife Abbildung 27 - Anweisungsreihenfolge der foreach-Schleifen im MusicXML-Dokument Abgespeichert werden die eingelesenen Daten in ein multidimensionales Array. 59 4.1.1 EINLESEN GENERELLER INFORMATIONEN: NOTENSCHLÜSSEL, TONART UND TAKTART Jeder neue Taktanfang ist darauf zu überprüfen, ob ein Wechsel von Notenschlüssel, Vorzeichen oder Taktart angegeben ist. Die Elemente, die hierzu aus MusicXML ausgelesen werden müssen, befinden sich als Kindelemente in der Elementverschachtelung <measure> <attributes>. Die Überprüfung an jedem Taktanfang kann erst durch die zwei ineinander geschachtelten foreach-Schleifen realisiert werden. Die folgenden Codezeilen rufen an jedem Taktanfang die Art des Notenschlüssels und seine Position auf den Notenlinien auf. Beides wird im Element <clef> angegeben. echo ‘Schlüssel: ‘.$this->presentation->attributes->clef->sign; echo ‘Schlüssel an Notenlinie: ‘.$this->presentation->attributes->clef->line; Quelltext 6 - Zugriff auf Notenschlüssel und Schlüsselposition Tabelle 30 zeigt eine Übersicht einiger typischer Notenschlüssel sowie deren Werte in MusicXML. <sign> gibt die Art des Notenschlüssels an (Tabelle 30, 2. Spalte). Diese wird in MusicXML wie in der Musiktheorie mit dem Buchstaben des Notennamens angegeben, welcher durch den jeweiligen Notenschlüssel auf einer bestimmten Notenlinie definiert wird. So befindet sich beispielsweise zwischen den beiden Punkten in der Darstellung des Bassschlüssels (Tabelle 30, 3. Zeile) stets die Note F. Daher wird der Bassschlüssel auch F-Schlüssel genannt und in MusicXML mit <sign>F</sign> angegeben. Dieselbe Form des Notenschlüssels kann auf jeder beliebigen Notenlinie platziert werden, wodurch sich jeweils die Zuordnung des Notennamens zur Notenlinie verändert. Welche Notenlinie der Notenschlüssel umschließt, ist in <line> (Tabelle 30, 3. Spalte) angegeben. 60 Notenschlüssel presentation->attributes->clef->sign presentation->attributes->clef->line G 2 C 3 F 4 A 2 F Zusatz: 4 <clef-octave-change>-1<clef-octave-change> G Zusatz: 2 <clef-octave-change>-1<clef-octave-change> Tabelle 30 - Wichtige Notenschlüssel und deren Werte in MusicXML Werden Notenschlüssel um ein oder zwei Oktaven nach oben oder unten oktaviert, wird innerhalb des <clef>-Elements das zusätzliche Element <clef-octave-change> eingefügt. Übliche Werte sind hierbei -2, -1, 1 und 2. Alle Informationen im Element <clef> sind alleinig zur Darstellung des Notenschlüssels da. Sie beeinflussen jedoch keinesfalls die Noteninformationen der Noten, da diese stets absolut angegeben werden. Werden beispielsweise Noten durch einen Notenschlüssel nach oben oder unten oktaviert, so werden vom Notationsprogramm auch die Oktavwerte der Noten im Element <octave> an die neue Oktavlage angepasst. Weiterhin wird in jedem neuen Takt die Tonart überprüft. Werden durch Tonartwechsel Alterationen den Noten vorangestellt, so müssen diese Alterationen zusätzlich zur Angabe der Tonart jeder betreffenden Note innerhalb von MusicXML im Element <pitch> als Element <alter> eingefügt werden. Der Zugriff auf die Tonart und das Geschlecht im Element <key> erfolgt ebenfalls mit Hilfe der xpath-Funktion. Tonart und Tongeschlecht werden mit folgenden Codezeilen abgefragt: 61 echo ‘Tonart: ‘.$this->presentation->attributes->key->fifths; echo ‘Tongeschlecht: ‘.$this->presentation->attributes->key->mode; Quelltext 7 - Zugriff auf Tonart und Tongeschlecht gibt das Tongeschlecht an, welches die Werte major (Dur) oder minor (Moll) erlaubt. Die Tonart, die mit <fifths> angegeben wird, wird in ganzzahlige Werte kodiert, welche in der folgenden Tabelle aufgeschlüsselt werden. <mode> Tonart in Dur / Moll Wert im Element <fifths> F# = Gb / Ebm = D#m 6 H / G#m 5 E / C#m 4 A / F#m 3 D / Hm 2 G / Em 1 C / Am 0 F / Dm -1 B / Gm -2 Eb / Cm -3 Ab / Fm -4 Db / Bm -5 Gb = F# / Ebm = D#m -6 Tabelle 31 - Tonarten und deren Wertezuordnung in MusicXML Die letzte wichtige Information, die in MusicXML zu Beginn eines jeden neuen Taktes ausgelesen wird, ist die Taktart. Mit den folgenden Codezeilen lässt sich die Taktart aus dem Element <time> lesen. echo ‘Beat: ‘.$this->presentation->attributes->time->beats; echo ‘Beat-Type: ‘.$this->presentation->attributes->time->beat-type; Quelltext 8 - Zugriff auf Beats und Beat-Type Die Angabe der Taktart verhält sich wie ein mathematischer Bruch. Die möglichen Werte in <beats> als Zähler und <beat-type> als Nenner sind natürliche Zahlen. Die Einhaltung der richtigen Anzahl an Notenwerten innerhalb eines Takts entsprechend der Taktart muss durch das Notensatzprogramm selbst gewährleistet werden. So lassen es neuere Softwareversionen der meisten Notensatzprogramme gar nicht mehr zu, dass beispielsweise mehr als vier Viertelnoten in einen 4/4 Takt notiert werden. 62 Abschließend sei zu erwähnen, dass die Angabe des Notenschlüssels, der Tonart und der Taktart für die Analyse rein informativen Charakter besitzt, da alle Noten stets vollständig in ihren eigenen Elementen definiert sind. Die folgenden Abschnitte zeigen, wie auf einzelne Noteninformationen innerhalb des MusicXML-Dokuments zugegriffen wird. Dieser Schritt bildet die Basis der Motivanalyse. 4.1.2 EINLESEN DER TONHÖHE In MusicXML sind die Noteninformationen zur Tonhöhe im Element <note> beschrieben. Dadurch, dass mit Hilfe der Funktion xpath() in der inneren foreach-Schleife bis zum Element <measure> navigiert wird, ist der Zugriff auf die darunterliegenden Elemente <note> und dessen Kindelemente problemlos möglich. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 1.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd"> <score-partwise> <part id="P1"> <measure number="1"> <note> <pitch> <step>E</step> <octave>5</octave> <alter>-1</alter> </pitch> <accidental>flat</accidental> </note> <note> <pitch> <step>G</step> ... </pitch> </note> ... </measure> ... </part> </score-partwise> Quelltext 9 - MusicXML Elemente zum Beschreiben einer Note Wie Quelltext 9 zeigt, befinden sich die Elemente zur Angabe der Tonhöhe − <step>, <octave> und <alter> − für jede Note stets in der gleichen Verschachtelungstiefe „/scorepartwise/part/measure/note/pitch/“ ab der MusicXML-Dokumentenwurzel. Für die Angabe der konkreten Tonhöhe wird der Notenname aus dem Element <step>, der Alterationswert aus dem Element <alter> sowie der Wert für die Oktavlage aus dem Element <octave> gelesen. 63 MusicXML ist ein Datenformat mit vielen Redundanzen. So werden alle Alterationen vor jeder einzelnen Note im Element <alter> angegeben, obwohl zumindest die tonartenabhängigen Alterationen bereits mit der Angabe der Tonart bekannt sind. Zusätzlich wird im Element <accidental> das Versetzungszeichen als englisches Wort angegeben. Die üblichen Werte sind sharp (Kreuz), natural (Auflösungszeichen), flat (B), double-sharp (Doppelkreuz), sharp-sharp (Kreuz-Kreuz), flat-flat (Bb), natural-sharp (Auflösungszeichen gefolgt von Kreuz) und naturalflat (Auflösungszeichen gefolgt von B).33 Diese Werte sind ergänzend zur Tonart zu lesen. Sie enthalten demnach nur tonartenunabhängige Alterationen. Das Einlesen der Werte aus dem Element <alter> erscheint daher mit den absoluten Angaben sinnvoller zur genauen Bestimmung der Tonhöhe. Dies hat den Vorteil, dass Tonartwechsel für die Motivanalyse nicht pro Takt protokolliert werden müssen. Akkorde werden auf ähnliche Art wie einzelne Noten ausgelesen. Die Noten eines Akkordes werden in MusicXML entgegen jeglicher Erwartungen nicht in einem neuen Element ineinander verschachtelt. Vielmehr wird jede einzelne Akkordnote wie eine normale Note in einem eigenen Element <note> dargestellt. Die tiefste Note im Akkord, der Basston, wird als erstes beschrieben. Alle weiteren Noten im Akkord werden innerhalb der Partitur in der Reihenfolge der Tonhöhe von unten nach oben dargestellt und erhalten zusätzlich jeweils das leere Element <chord />. Im Quelltext 10 ist die Darstellung eines Akkordes in MusicXML verkürzt dargestellt. <note> <pitch> <step>A</step> </pitch> </note> <note> <chord/> <pitch> <step>C</step> </pitch> </note> <note> <chord/> <pitch> <step>E</step> </pitch> </note> Basston Quelltext 10 - Akkord bestehend aus den Tönen A, C und E (Basston ist A) in MusicXML Im Basston ist das leere Element <chord/> allerdings nicht enthalten. Durch diese Struktur entsteht das folgende Problem: Liest der Algorithmus an Notenposition n eine Note ohne dem leeren Element <chord/>, so ist an dieser Position noch unklar, ob die Note ein Basston eines Akkords oder eine einzelne Note ist. Für die Kontur zwischen zwei Notenpositionen hat diese Recordare: Internet Music Publishing and Software: "MusicXML 1.0 Note DTD Module". URL: http://www.recordare.com/dtds/1.0/note.html [Stand: 1. Februar 2009] 33 64 Problematik weitreichende Folgen, da durch Akkorde mehrere Möglichkeiten des Konturverlaufs entstehen. Daher ist es nötig, dass der Algorithmus eine bestimmte Anzahl an <note>-Elementen im Voraus lesen kann, bis eine Aussage über die möglichen Konturen zwischen zwei Notenpositionen getroffen werden kann. Mehrere gleichzeitige erklingende Noten innerhalb eines Notensystems können auch als verschiedene Stimmen auftreten. Anwendung findet dies z.B. in vierstimmigen Chorälen, die in zwei statt vier Systemen notiert sind. Die Angabe der Stimme erfolgt in MusicXML im Element <voice>, wie der Quelltext 11 zeigt. Gebräuchlich sind die Werte von 1 bis 4. MusicXML gibt jedoch keine Einschränkungen in den Werten vor. <note> <pitch> <step>F</step> <octave>4</octave> </pitch> <voice>1</voice> ... </note> <note> <pitch> <step>A</step> <octave>4</octave> </pitch> <voice>2</voice> ... </note> Quelltext 11 - Die Kennzeichnung der Stimmen im Notensystem Der Motivsuchealgorithmus wird Werte im Element <voice> ignorieren. Auf diese Weise werden der Programmieraufwand sowie die Laufzeit des Algorithmus verringert. Es ist aber darauf zu achten, dass das zu analysierende Werk nur in einer Stimme geschrieben steht. Alternativ würden Noten, die in mehreren Stimmen gleichzeitig erklingen sollen, durch den Algorithmus so gelesen werden, als wären sie nacheinander notiert. Bei einer Weiterentwicklung des Algorithmus wäre eine getrennte Analyse der Stimmen sicherlich sinnvoll. Neben Noten und Akkorden kann die Position n mit einer Pause belegt sein. Durch das leere Element <rest/> im Element <note> wird ein Pausenzeichen angegeben (siehe Quelltext 12). Folglich ist das Element <pitch> nicht vertreten. 65 <measure number="1"> <attributes> <divisions>1</divisions> </attributes> <note> <rest/> <duration>1</duration> <type>quarter</type> </note> </measure> Quelltext 12 - Kennzeichnung einer Pause in MusicXML Der Wert der Pause ergibt sich aus dem Wert in den Elementen <duration> und <divisions> und wird genauso wie ein Notenwert − gemäß dem folgenden Kapitel − berechnet. 4.1.3 EINLESEN UND BERECHNEN DER NOTENWERTE Das Element <duration> beschreibt den relativen Notenwert einer Note, d.h. im Verhältnis zum Notenwert anderer Noten. Für die Berechnung des absoluten Notenwertes ist neben dem Wert in <duration> außerdem der Wert im Element <divisions> erforderlich. Das Element <divisions> steht immer im ersten Takt eines jeden Notensystems. Aber auch innerhalb eines Notensystems kann <divisions> nochmals mit einem neuen Wert auftreten. Dies kommt dann vor, wenn die Taktart gewechselt wird oder bei abrupten Wechsel von sehr kurzen Notenwerten zu sehr langen Notenwerten und umgekehrt. Dabei wird der neue Wert in <divisions> stets zu Beginn des jeweiligen Taktes verändert. Danach beziehen sich alle Werte in <duration> auf den neuen <divisions>Wert. Die Anordnung beider Elemente ist in Quelltext 13 dargestellt. <measure> <attributes> <divisions>1</divisions> </attributes> <note> <pitch> … </pitch> <duration>2</duration> … </note> </measure> Quelltext 13 - Repräsentation des Notenwerts in MusicXML mit Hilfe Duration und Divisions 66 Für die Berechnung des Notenwertes aus den Werten in <duration> und <divisions> gilt: L = Wert in <duration> / Wert in <divisions> Notenwert Formel 1 - Berechnung des Notenwertes Mit Hilfe dieser Rechenvorschrift wird für den Algorithmus eine Funktion programmiert, die als Eingabewerte die Elementinhalte aus <duration> und <divisions> übernimmt und die Variable L als Ausgabewert zurückgibt. In der Variablen L ist der Notenwert kodiert. Die Tabelle 32 enthält die Zuordnungen der Variable L zu den entsprechenden Notenwerten. Weiterhin zeigt sie einige Berechnungen aus möglichen Werten in <divisions> und <duration>. Zur Analyse der Notenwerte bezieht sich der Algorithmus auf diese Zuordnung zur Variablen L. Ist L=1, so entspricht dies einer Viertelnote. Dabei verhält sich die Variable L linear. Ist beispielsweise der Wert in <divisions> innerhalb eines Taktes gleich 12 und kommen darin zwei Noten mit den <duration>-Werten 12 und 24 vor, so ergibt sich daraus folgende Rechnung: L1 = 12/12, L2 = 24/12. Wie aus der Tabelle 32 zu entnehmen ist, ist die erste Note damit eine Viertelnote und die zweite eine halbe Note. Werte von <divisions>: Notenwertbezeichnung Longa Alla Breve Ganze Note Halbe Note Viertelnote Achtelnote 16tel Note 32tel Note 64tel Note 128tel Note 1 2 4 8 16 32 L 16/1 8/1 4/1 2/1 1/1 - 32/2 16/2 8/2 4/2 2/2 1/2 - 64/4 32/4 16/4 8/4 4/4 2/4 1/4 - 128/8 64/8 32/8 16/8 8/8 4/8 2/8 1/8 - 256/16 128/16 64/16 32/16 16/16 8/16 4/16 2/16 1/16 - 512/32 256/32 128/32 64/32 32/32 16/32 8/32 4/32 2/32 1/32 16 8 4 2 1 0,5 0,25 0,125 0,0625 0,03125 Punktierte Viertelnote 3/2 6/4 12/8 24/16 48/32 1,5 Punktierte Achtelnote 3/4 6/8 12/16 24/32 0,75 Tabelle 32 - Mögliche Zuordnungen der Werte in <duration> (Zähler) und <divisions> (Nenner) zur Variable L Mit kleineren <divisions>-Werten sind nicht alle Notenwerte darstellbar. Im Allgemeinen ist festzuhalten, dass sehr kurze Notenwerte mit umso größeren Werten in <divisions> beschrieben werden. Neben der Angabe des Notenwerts durch die Elemente <duration> und <divisions> wird der Notenwert als englisches Wort im Element <type> zur Verfügung gestellt (siehe Quelltext 14). 67 <note> <pitch> … </pitch> … <type>half</type> … </note> Quelltext 14 - Die Angabe des Notenwertes als Wort in MusicXML Die möglichen Elementinhalte in <type> sind: 256th, 128th, 64th, 32nd, 16th, eighth, quarter, half, whole, breve und long. Punktierungen einer Note zur Verlängerung des Notenwertes werden in MusicXML wie in Quelltext 15 dargestellt mit Hilfe des leeren Elements <dot /> beschrieben. Zur Berechnung des Notenwertes einer einfach punktierten Note werden die Werte aus dem Element <dot /> wie bei einer nicht punktierten Note aus den Elementen <duration> und <divisions> ausgelesen. <note> <pitch> <step>A</step> <octave>4</octave> </pitch> <duration>2</duration> <type>quarter</type> <dot/> </note> Quelltext 15 - Anwendung des leeren Elements <dot /> im Element <note> Auch X-tolen können wie alle anderen Notenwerte mit Hilfe der Formel 1 berechnet werden. Da X-tolen auf die Zählzeit verteilt ungerade Notenwerte besitzen, können als Ergebnis unter Umständen positiv rationale Zahlen herauskommen. Die folgende Darstellung zeigt, wie auf zwei Viertelnoten durch die Beschreibung der X-tole drei Viertelnoten an die gleiche Stelle positioniert werden. 68 1. 5. 10. 15. 20. 25. 30. 35. 40. 45. 50. 55. 60. <measure number="1"> <attributes> <divisions>3</divisions> ... <beats>4</beats> <beat-type>4</beat-type> ... </attributes> ... <note> <pitch> <step>A</step> <octave>4</octave> </pitch> <duration>2</duration> <voice>1</voice> <type>quarter</type> <time-modification> <actual-notes>3</actual-notes> <normal-notes>2</normal-notes> </time-modification> Erste Note <stem>up</stem> der X-tole <notations> <tuplet number="1" placement="above" type="start"/> Initialisierung </notations> der X-tole </note> <note> <pitch> <step>B</step> <octave>4</octave> </pitch> <duration>2</duration> <voice>1</voice> <type>quarter</type> <time-modification> <actual-notes>3</actual-notes> <normal-notes>2</normal-notes> Zweite Note der X-tole </time-modification> <stem>down</stem> </note> <note> <pitch> <step>E</step> <octave>5</octave> </pitch> <duration>2</duration> <voice>1</voice> <type>quarter</type> <time-modification> <actual-notes>3</actual-notes> <normal-notes>2</normal-notes> </time-modification> Letzte Note <stem>down</stem> der X-Tole <notations> <tuplet number="1" type="stop"/> Beendigung der X-tole </notations> </note> <note> ... </note> <note> ... </note> </measure> Quelltext 16 - Struktur einer X-tole in MusicXML Eine X-tole besitzt eine kompliziertere Elementstruktur. Wie bei einem Akkord werden die Noten in einer X-tole nicht ineinander verschachtelt dargestellt, sondern werden, mit weiteren Elementen ergänzt, einzeln im Element <note> beschrieben. Dabei sind die ergänzten Elemente ab- 69 hängig von der Position der Note innerhalb der X-tole. Alle Noten einer X-tole sind versehen mit dem Element <time-modification> mit den Kindelementen <actual-notes> und <normal-notes>. Der ganzzahlige Wert im Element <actual-notes> gibt an, wie viele Noten innerhalb der X-tole platziert werden. Der ganzzahlige Wert in <normal-notes> gibt die Anzahl der Noten an, die auf die Dauer der X-tole kommen würden. Die erste Note in einer X-tole besitzt zusätzlich das Element <notations>. Dieses Element beinhaltet das Element <tuplet> mit den Attributen number, placement und type. Das Attribut number besitzt den Wert 134, placement beschreibt, ob sich der Strich zur X-tole über oder unter den Noten der X-tole befindet und type gibt an, ob die X-tole in der aktuellen Note beginnt oder endet. Die Noten der X-tole, die keine Anfangs- beziehungsweise Endnote einer X-tole sind, haben bis auf <time-modification> und den dazugehörigen Kindelementen keine weiteren zusätzlichen Elemente. Alle Noten einer X-tole besitzen innerhalb von <time-modification> dieselben Werte. Die letzte Note der X-tole besitzt ebenfalls wie die erste Note der X-tole das zusätzliche Element <notations>. Die Angaben darin unterscheiden sich lediglich darin, dass das Attribut type im Element <tuplet> mit dem Wert „stop“ angegeben wird. Das Attribut number scheint ein Identifikator für X-tolen zu sein, die zur selben Zeit im gleichen Notensystem gespielt werden. Die Dokumentation von MusicXML konnte hierzu leider keinen Aufschluss geben. 34 70 4.2 PROBLEM- UND SONDERFÄLLE BEIM EINLESEN AUS MUSICXML Probleme in der Motivanalyse können beispielsweise entstehen durch die schwer handhabbare Auswertung des MusicXML-Formats mit Hilfe der Programmiersprache PHP und ihrer SimpleXML-Funktionen. Zu einigen Problemen gibt es Lösungen, andere Probleme sind nur durch großen Aufwand lösbar oder müssen mit weiteren Programmiersprachen mit Hilfe gänzlich anderer Überlegungen gelöst werden. 4.2.1 BETRACHTUNG VON AKKORDEN VOR DER KONTURANALYSE Problematisch für die Motivanalyse ist die Behandlung von Akkorden. Die Töne eines Motivs bzw. einer Motivverarbeitung können in einem oder mehreren Akkorden eingebettet sein. Es ist jedoch zunächst nicht klar ist, welche Töne im Akkord zum Motiv gehören und welche nicht. Daher müssen prinzipiell alle Akkordtöne danach abgesucht werden. Es gibt drei Möglichkeiten, in welcher Reihenfolge im Musikwerk ein Akkord in Verbindung mit einem anderen Akkord oder einer einzelnen Note in der Partitur auftaucht: Auf eine Note folgt ein Akkord (N→A) Auf ein Akkord folgt eine Note (A→N) Auf ein Akkord folgt ein Akkord (A→A) Verbindungstypen Je nach Verbindungstyp ergeben sich unterschiedlich viele Konturverläufe, die die Motivverarbeitungen oder das Originalmotiv enthalten können. Auf eine Note folgt ein Akkord Um zu differenzieren, ob an Notenposition n ein Akkord oder eine Note auftritt, liest der Algorithmus im Voraus die nächste Note ein und prüft, ob dort das Element <chord/> auftritt. Ist das Element <chord/> vorhanden, so ist die entsprechende Note der zweite Akkordton an Notenposition n mit der Positionsbezeichnung n2. Ist das Element <chord/> nicht vorhanden, muss es sich um eine neue Note an der Notenposition n+1 handeln. Nun ist weiterhin zu überprüfen, ob an 71 Position n+1 ein Akkord auftritt, damit alle Konturen zwischen n und n+1 berücksichtigt werden können. So wird von Notenposition n aus zwei Noten im Voraus nach dem Element <chord/> gesucht. Tritt das Element <chord/> auf, wird die Note an dieser Stelle als zweiter Akkordton an Notenposition n+1 erkannt. Deren genaue Notenposition wird als (n+1)2 definiert. Dementsprechend wird hier die Notenposition vor der Notenposition (n+1)2 mit (n+1)1 bezeichnet. An dieser Stelle muss sich zwangsläufig der Basston des Akkords befinden. Im selben Muster wird solange fortgefahren, bis alle Akkordtöne des Akkordes erkannt sind, d.h. bis zur Note, in der kein <chord/>-Element enthalten ist. Eine wie eben beschriebene Note zu Akkord-Verbindung (N→A) ist in Abbildung 28 dargestellt. Es müssen an Notenposition n mindestens zwei Noten im Voraus gelesen werden, um klarzustellen, ob es sich um eine Note zu Akkord-Verbindung handelt. Dann erst kann der Algorithmus in die entsprechende Anweisung gehen, die eine (N→A)-Abfolge analysiert. Abbildung 28 - Konturmöglichkeiten von Notenposition n zu Position n+1 Eine (N→A)-Verbindung enthält wie in Abbildung 28 dargestellt an Notenposition n eine Note und an Notenposition n+1 einen Akkord mit den Akkordtönen (n+1)1 bis (n+1)k. Zwischen der Notenposition n und Position n+1 mit k Akkordtönen entstehen pro Konturtyp k Konturen. Auf einen Akkord folgt eine Note Betrachtet wird nun die Folge Akkord zu Note (A→N), wie in Abbildung 29 dargestellt ist. Die aktuelle Leseposition befindet an Notenposition n1. Im Voraus wird die nächste Note gelesen. Da dort das Element <chord/> enthalten ist, ist die entsprechende Notenposition mit n2 zu bezeichnen. Es wird dadurch deutlich, dass sich an Notenposition n1 ein Basston eines Akkords befindet. Es sind nun zwei Verbindungstypen möglich: nach Akkord folgt Note (A→N) oder auf Akkord folgt Akkord (A→A). Der Algorithmus analysiert die nachfolgenden Noten bis zu der Note, die als erstes kein Element <chord/> enthält. Diese Note wird mit (n+1)1 gekennzeichnet. Der Akkord an Notenposition n beinhaltet m Akkordnoten von n1 bis nm. 72 Abbildung 29 - Konturmöglichkeiten von Akkord n1 zu Note (n+1)1 An Notenposition (n+1)1 ist dem Algorithmus noch immer nicht bekannt, ob an Position n+1 eine Note oder ein Akkord steht. Daher ist bis zu diesem Punkt der Analyseschritt für die Akkord- zu Akkord-Verbindung und die Akkord- zu Note-Verbindung identisch. Befindet sich an Notenposition n+1 eine einzelne Note, so sind m mögliche Konturverläufe pro Konturtyp zu analysieren. Auf einen Akkord folgt ein Akkord Erst wenn der Algorithmus die Notenposition (n+1)2 vorausliest, wird klar, ob Note (n+1)1 ein Basston eines Akkords oder eine einzelne Note ist. Im nun betrachteten Fall (siehe Abbildung 30) befindet sich an Position (n+1)2 das leere Element <chord/>. Erst wenn m+2 Noten vorausgelesen wurden, ist für den Algorithmus klar, dass der Verbindungstyp eine Akkord- zu AkkordVerbindung ist. Dennoch muss der Algorithmus m+k+1 Noten im Voraus lesen bis zur ersten Note ohne dem Element <chord/>, um zu prüfen, wie viele Noten zum Akkord an Position n+1 gehören. Die Position der nächsten Note ohne dem <chord/>-Element wird mit (n+2)1 bezeichnet. Abbildung 30 - Konturmöglichkeiten von Akkord n zu Akkord (n+1)1 Zwischen Akkord n mit m Akkordtönen und Akkord (n+1) mit k Akkordtönen ergeben sich m*k Konturverläufe. Allgemein betrachtet resultiert daraus folgendes Problem: Ein Akkord beinhaltet mindestens drei Noten, die zeitgleich gespielt werden. Somit entstehen bei der Anwendung der Konturanalyse zwischen zwei Akkorden mit jeweils drei Noten bereits neun verschiedene Konturverläufe. Diese Konturverläufe müssen jeweils für den Parsons-Code, die diatonische und die chromatische Kontur berechnet werden. So sind bereits 27 Konturverläufe zwischen zwei Akkorden mit je- 73 weils drei Noten zu berechnen. Daraus ergibt sich ein enormer Rechenaufwand, der zur Weiterentwicklung des Programms optimiert werden könnte. Zusätzlich besteht das Problem, dass die Noten bei einer Akkord- zu Akkord-Verbindung stets bis zur Notenposition (n+2)1 gelesen werden müssen. Dies sind bei zwei aufeinanderfolgenden Dreiklängen sechs Noten, die in einem Puffer abgespeichert werden. In einer neuen Programmversion wäre es sinnvoll, die im Puffer gespeicherten Daten besser zu nutzen, damit jede Note insgesamt nur einmal eingelesen werden muss. Innovative Algorithmen aus dem Information Retrieval und der Bioinformatik können dabei neue Aspekte im Finden eines effizienteren Algorithmus sein. 4.2.2 INSTRUMENTE MIT ZWEI SYSTEMEN IN MUSICXML Ein MusicXML-Dokument ist sequenziell aufgebaut. Das bedeutet, dass alle Notensysteme aufeinanderfolgend beschrieben sind. Innerhalb eines Notensystems sind die Takte hintereinander geordnet. Eine Ausnahme liegt jedoch vor, wenn das dargestellte Musikinstrument aus spieltechnischen Gründen in zwei Systemen notiert wird, wie beispielsweise das Klavier oder die Harfe. Eine Motivanalyse bei Instrumenten, die in zwei Systemen notiert sind, ist ohne eine Vorverarbeitung des MusicXML-Dokuments nicht möglich. Das folgende Beispiel mit zwei Systemen soll die Problematik verdeutlichen. 74 1. 5. 10. 15. 20. 25. 30. 35. 40. 45. 50. 55. 60. 65. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 1.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd"> <score-partwise> <identification> <encoding> <software>Finale for Windows</software> <software>Dolet Light for Finale 2006</software> <encoding-date>1900-00-00</encoding-date> </encoding> </identification> <part-list> <score-part id="P1"> <part-name>Harfe</part-name> <score-instrument id="P1-I1"> <instrument-name>Harfe</instrument-name> </score-instrument> <midi-instrument id="P1-I1"> <midi-channel>1</midi-channel> <midi-program>47</midi-program> </midi-instrument> </score-part> </part-list> <!--=========================================================--> <part id="P1"> <measure number="1"> <attributes> <divisions>1</divisions> <key> <fifths>0</fifths> <mode>major</mode> </key> <time symbol="common"> <beats>4</beats> <beat-type>4</beat-type> </time> <staves>2</staves> <clef number="1"> <sign>G</sign> <line>2</line> </clef> Initialisierung von zwei Systemen <clef number="2"> <sign>F</sign> <line>4</line> </clef> </attributes> <sound tempo="120"/> <note> <rest/> <duration>4</duration> <voice>1</voice> <staff>1</staff> </note> <backup> <duration>4</duration> </backup> <note> <rest/> <duration>4</duration> <voice>2</voice> <staff>2</staff> </note> <barline location="right"> <bar-style>light-heavy</bar-style> </barline> </measure> </part> <!--=========================================================--> </score-partwise> Quelltext 17- MusicXML-Beispiel mit zwei Systemen 75 In den Zeilen 37-45 erfolgt die Initialisierung eines Zweiersystems mit den Elementen <staves> und <clef>. Der Wert im Element <staves> gibt die Anzahl der Notensysteme an. Das Element <clef> legt für jedes System einen Notenschlüssel und dessen Position auf den Notenlinien an. Die erste <clef>-Definition steht für das obere System, die zweite <clef>-Definition für das untere System. Ein Zweiersystem wird in MusicXML stets taktweise angegeben. Durch die taktweise Reihenfolge, mit der die Noten eines Zweier-Notensystems in MusicXML beschrieben werden, ist das Auslesen einer Melodie innerhalb nur einer der beiden Stimmen erschwert. Umso komplizierter verhält es sich, wenn sich eine zusammenhängende Melodie bzw. Akkorde über beide Notensysteme erstrecken. Hier wäre es sinnvoll, beide Systeme zu einem System zusammenzufassen, wie es in Abbildung 31 von links (zwei Systeme) nach rechts (zusammengefasst zu einem System) dargestellt ist. Jedoch birgt eine solche Vorgehensweise wiederum weitere Probleme, da nun die Noten der Melodiestimme in die akkordische Begleitung integriert werden. Abbildung 31 - Zweiersysteme erschweren die Motivanalyse Beispiel 1.1 zeigt die Akkordverbindung e-Moll mit dem Quintton h im Bass. Der Note h wird durch seine Punktierung bis in den Akkord F-Dur hinein ausgehalten. Auf der halben Spielzeit des Akkords F-Dur wechselt der Basston von h nach f. Werden, wie in Beispiel 1.2, beide Notensysteme zusammengefasst, kann dies nur durch Zuhilfenahme von Überbindungen gewährleistet werden. Aber auch Überbindungen stellen einen erhöhten Programmieraufwand dar, können aber nicht einfach wie in Bsp. 1.3 dargestellt ignoriert werden: Bsp. 1.3 und 1.1 unterscheiden sich so deutlich voneinander, dass eine Motivanalyse in solchen Fällen wie in Abbildung 31 nicht zum korrekten Ergebnis führen würde. Lösbar ist die Problematik der getrennten Systeme für Akkorde und Melodien mit zusätzlichem Programmieraufwand. Für die Motivanalyse mithilfe der vorliegenden Programmversion wird vorausgesetzt, dass das MusicXML-Dokument nur mit Musikinstrumenten besetzt ist, die in einem System notiert sind. 76 4.2.3 ÜBERBINDUNGEN Eine Überbindung von zwei Noten auf derselben Tonhöhe wird zur Verlängerung der Tondauer benutzt. Alternativ kann die Punktierung einer Note eingesetzt werden, wenn die Regeln der Punktierung eingehalten werden. Abbildung 32 soll dies verdeutlichen. ½ + ¼ = punktierte halbe Note 1/1 + ½ = punktierte ganze Note Abbildung 32 - Zwei Beispiele von Überbindungen und deren äquivalente Darstellung als punktierte Note Der erste dargestellte Takt des linken Beispiels in Abbildung 32 besitzt die folgende Darstellung in MusicXML: 1. 5. 10. 15. 20. 25. 30. 35. <measure number="1"> <attributes> <divisions>1</divisions> ... <time> <beats>3</beats> <beat-type>4</beat-type> </time> ... </attributes> ... <note> <pitch> <step>G</step> <octave>4</octave> </pitch> <duration>2</duration> <tie type="start"/> <type>half</type> <stem>up</stem> <notations> <tied type="start"/> </notations> </note> <note> <pitch> <step>G</step> <octave>4</octave> </pitch> <duration>1</duration> <tie type="stop"/> <type>quarter</type> <stem>up</stem> <notations> <tied type="stop"/> </notations> </note> </measure> erste Note aus Abbildung 32 (halbe Note) zweite Note aus Abbildung 32 (Viertelnote) Quelltext 18 - Überbindung einer halben Note mit einer Viertelnote 77 Im Element <note> der halben Note G wird ein leeres Element <tie/> eingefügt. <tie/> ist ein Anker, welcher mit Hilfe des Attributs type mit dem Wert „start“ initialisiert wird. Dass die Überbindung bei der Viertelnote G endet, wird in dem zur Endnote gehörenden Element <note> in einem <tie/>-Element mit Hilfe des Attributs type mit dem Wert „stop“ angegeben. Das Element <tie/> wird von MusicXML für die interne Repräsentation genutzt. Für die Darstellung der Überbindung wird das weitere Element <tied> in dem zugehörigen Elternelement <nota35 tions> verwendet. Damit überbundene Noten vom Algorithmus richtig bewertet werden, müssen diese Überbindungen zunächst ausfindig gemacht werden und zur Laufzeit alle Werte des <duration>-Elements der Noten, die zu den Überbindungen gehören, miteinander addiert werden, um den realen Notenwert zu erhalten. Erst dann sind die überbundenen Noten rhythmisch mit dem Originalmotiv vergleichbar. Neben den einfachen Notenüberbindungen sind auch Notenüberbindungen möglich, bei denen eine neue Note hinzugefügt wird, wie in Abbildung 33. Abbildung 33 - Überbundene Noten mit neu hinzugefügter Note Hier tritt neben dem Problemfall der Überbindung zusätzlich ein ähnlicher Sonderfall auf wie bei der Behandlung von akkordischen Notenverbindungen. So muss der Algorithmus zwei Konturverläufe analysieren: Von Notenposition n zur Position (n+1)1 und von Notenposition n zu (n+1)2. Für den Algorithmus wird vorausgesetzt, dass keine Überbindungen im zu analysierenden Musikwerk auftreten. 4.2.4 PUNKTIERTE NOTEN Durch einfache Punktierung einer Note wird der Notenwert um die Hälfte des ursprünglichen Notenwertes verlängert. Weiterhin gibt es zweifach punktierte Noten, bei denen der Notenwert um die Hälfte plus ein Viertel des eigenen Notenwertes verlängert ist. Dementsprechend verhält es sich auch bei weiteren mehrfach punktierten Noten. Recordare: Internet Music Publishing and Software: "MusicXML 1.0 Alphabetical Index". URL: http://www.recordare.com/dtds/1.0/musicxml-index.html [Stand: 5. Februar 2009] 35 78 In MusicXML kann im Element <note> eine beliebige Anzahl an leeren Elementen <dot/> eingefügt werden. Jedes neue <dot/>-Element setzt dabei einen weiteren Punkt nach der aktuellen Note für die Darstellung einer Punktierung. Zur Berechnung der exakten Notenlänge bei punktierten Noten in MusicXML werden zunächst die Werte der bekannten Elemente <divisions> und <duration> verwendet. Quelltext 19 zeigt die Funktion, mit Hilfe der eigentliche Notenwert aus <divisions> und <duration> plus die zusätzlichen Notenwerte aus den Punktierungen durch Halbierung des eigentlichen Notenwertes berechnet werden. function punktierte_noten($duration, $divisions, $punktierungen){ while($punktierungen>=0){ $x=$duration/$divisions; $duration=$duration/2; $y=$y+$x; $punktierungen--; } return $y; } $y = punktierte_noten(24,12,2); echo "Notenlänge: $y"; Quelltext 19 - Algorithmus zur Berechnung der Notenlänge bei punktierten Noten Das Element <dot/> ist ein leeres Element. Die Klasse SimpleXML von PHP ermöglicht keinen direkten Zugriff auf leere Elemente. Dieses Problem kann jedoch umgangen werden, indem der Algorithmus testet, ob das leere Element <dot/> Kindelemente besitzt. So ist beispielsweise die Implementierung zur Analyse von Akkorden mit den leeren Elementen <chord/> angelegt. Für den ersten Prototyp des Algorithmus wurde die Funktion punktierte_noten() vorbereitet, sie konnte jedoch nicht mehr rechtzeitig vollständig implementiert werden. 79 4.2.5 VORSCHLAGSNOTE Eine Vorschlagsnote zählt als Verzierung in der Notation rhythmisch nicht in den Takt. Sie weist spieltechnisch zwar eine Verkürzung der anschließenden Note an, diese wird jedoch dennoch ungeachtet der Spielpraxis voll ausgeschrieben. Die Beschreibung einer Vorschlagsnote in MusicXML geschieht auf die gleiche Weise, wie die Beschreibung einer herkömmlichen Note. Als Zusatz wird jedoch, wie in Quelltext 20 dargestellt, das leere Element <grace/> im Element <note> eingefügt. <note> <grace/> <pitch> ... </pitch> <voice>1</voice> <type>whole</type> </note> Quelltext 20 - Das leere Element <grace/> zur Kennzeichnung einer Vorschlagsnote Die Motivanalysesoftware prüft die Existenz einer Vorschlagsnote und betrachtet diese beim Auslesen aus MusicXML als eigenständige Note. In einer weiteren Programmversion wäre es sinnvoll, Vorschlagsnoten wahlweise als eigenständige Note zu betrachten oder in der Motivanalyse völlig unbeachtet zu lassen. Da Vorschlagsnoten als Verzierungselemente anzusehen sind, muss eine Vorschlagsnote im Originalmotiv nicht zwangsläufig in einer Motivverarbeitung wieder auftreten. 4.2.6 ALTERATIONEN Die folgende Darstellung zeigt eine große Auswahl an Alterationen, die von MusicXML bereitgestellt werden.36 Der Ton der alterierten Noten im oberen Notensystem ist jeweils darunter nochmals in einer Darstellung mit möglichst wenigen Alterationen notiert. Recordare: Internet Music Publishing and Software: "MusicXML 2.0 Note DTD Module". URL: http://www.recordare.com/dtds/note.html [Stand: 9. Februar 2009] 36 80 Abbildung 34 - Alterierte Noten und deren klangliche Repräsentation in vereinfachter Darstellung MusicXML erlaubt Versetzungszeichen innerhalb des Elements <alter> im ganzzahligen Wertebereichs von -9 bis 9. Üblich sind aber nur die Werte zwischen -2 und 2. Dass es mögliche Alterationen gibt, die aber nicht sinnvoll sind, zeigt die folgende Darstellung. Abbildung 35 - Nicht sinnvolle Anwendung von Versetzungszeichen am Beispiel der Note F Gezeigt werden die Note F sowie deren klangliche Repräsentation in vier verschiedenen Formen mit Hilfe von Versetzungszeichen. Dabei ist der Einsatz der doppelt tiefalterierten Note G (Geses) und der einfach hochalterierten Note E (Eis) durchaus bei Anwendung in entsprechenden musikalischen Kontexten statt der Note F möglich und sinnvoll. Die vierfach tiefalterierte Note A und die dreifach hochalterierte Note D sind von MusicXML erlaubte Alterationen, doch wird diese Darstellung im Generellen nicht angewandt. Mehrfachalterierungen stellen in der Motivanalyse folgendes Problem dar: Bei der Erkennung von Wiederholungen werden die Werte in den Parametern Notenname, Oktavlage und Alteration mit entsprechenden Werten des Originalmotivs verglichen. Benutzt der Komponist beispielsweise für ein Motiv eine Notendarstellung ohne jegliche Alterationen und in der Wiederholung mit vielen Alterationen, so kann der Algorithmus dies nicht mehr als Wiederholung bzw. ggf. nur noch als Sequenz erkennen. Eine mögliche Beseitigung dieses Problems könnte sein, dass der Algorithmus vorweg mehrfach alterierte Noten so ausliest, dass sie ohne bzw. mit möglichst wenigen Alterationen in das multidimensionale Array geschrieben werden. So könnten die alterierten Noten in Abbildung 35 auch als nichtalterierte Note F transformiert werden. Negativ würde sich diese Vorgehensweise jedoch auf die Laufzeit des Algorithmus auswirken. Angesichts dessen, dass Mehrfachalterierungen in der Praxis nur äußerst selten auftreten, wird in der Motivanalysesoftware nicht zuvor geprüft, ob für mehrfach alterierte Noten eine einfachere Darstellungen mit weniger Vorzeichen existiert. 81 4.3 ERWEITERUNG DES MUSICXMLDATENBESTANDS FÜR DIE KONTURANALYSE Die Kontur einer Notenfolge ist für den Motivanalysealgorithmus der erste und wichtigste Indikator, der darüber entscheidet, ob eine Notenfolge hinsichtlich weiterer Merkmale analysiert werden soll. Die Konturen werden aus den drei Parametern Notenname, Alteration und Oktavlage berechnet. Hierzu muss zunächst die Notenlage − die vertikale Position der Note im Notensystem − indiziert werden, damit der Algorithmus damit weiterarbeiten kann. 4.3.1 INDIZIERUNG DER NOTENLAGE DIE CHROMATISCHE NOTENLAGE Mehrere Notennamen können auf den gleichen Ton abgebildet werden. Dies wird in der Musiktheorie als enharmonische Verwechslung bezeichnet. So entspricht beispielsweise die Note Fes klanglich der Note E. Der Unterschied ist nur in den Noten ersichtlich. Werden doppelte Alterationen betrachtet, so ergeben sich noch mehr Belegungen von unterschiedlichen Notennamen auf dem gleichen Ton. Im Algorithmus werden enharmonische Verwechslungen im Rahmen von einfachen Alterationen gleichgesetzt. Tabelle 33 zeigt die im Algorithmus verwendete interne Zuordnung der Notenlagen zu einem Index. Dargestellt ist eine von 0 aufsteigende Zahlenreihe, die die Notenlage in der Vertikalen ab der Subkontra-Oktave aufwärts repräsentiert. Beginnend ab dem C, können zur im Index mit 0 bezifferten Notenlage bereits zwei Noten zugeordnet werden. Die erste Note ist C in der Oktave 0 (Subkontra) und entspricht gleichzeitig His (B#) in der darunterliegenden Oktave. Da der Klang dieser beiden Noten jedoch identisch ist, ist der dazugehörige Index 0 eindeutig. 82 Eindeutiger Index für die vertikale Notenlage Alteration 0 Alteration 1 ( m ) Alteration -1 ( b ) Oktave 0 0 1 11 Oktave 1 12 13 2 3 4 5 6 7 8 9 10 14 … C B# C# D - D# E - F E# F# G - G# A - A# B - C B# C# D - … … - Db - Eb Fb - Gb - Ab - Bb Cb - Db - … Tabelle 33 - Abbildungsmöglichkeit mehrerer Notennamen auf die chromatische Notenlage Quelltext 21 zeigt die Funktion, welche jeder chromatischen Note eine eindeutige Nummer entsprechend des Index in Tabelle 33 zuordnet. Eingabewerte sind die Elementinhalte der Elemente <step> (Notenname), <alter> (Alteration) und <octave> (Oktavlage), welche zu einem String zusammengefasst werden. Innerhalb der Funktion ist ein Array mit den Zuordnungen definiert, welches mit Hilfe der PHP-Funktion array_search(mixed $needle, array $haystack) zur Arraysuche nach den Eingabewerten abgesucht wird. Wird eine Übereinstimmung der drei Eingabewerte mit einem Wert im Array gefunden, so wird der entsprechende Index der Notenlage als Arrayschlüssel zurückgegeben. Da die Implementierung von PHP nur einen Arrayschlüssel pro Wert erlaubt, wurden drei Arrays angelegt. Der Algorithmus entscheidet je nach Alteration, welches Array durchsucht werden soll, um den Ausgabewert zu erhalten. 83 function notenlage_c($note, $alteration, $oktave){ $note $alteration $oktave = $note; = $alteration; = $oktave; $notenkomplex = “$note,$alteration,$oktave”; $note_kreuz = array( } 0 => B,1,0 //bis 1 => C,1,0 //cis 3 => D,1,0 //dis 5 => E,1,0 //eis 6 => F,1,0 //fis 8 => G,1,0 //gis 10=> A,1,0 //ais 12=> B,1,1 … ); $note_be = array( 1 => D,-1,0 //des 3 => E,-1,0 //es 4 => F,-1,0 //fes 6 => G,-1,0 //ges 8 => A,-1,0 //as 10=> B,-1,0 //bes 11=> C,-1,0 //ces 13=> D,-1,1 //des … ); $note = array( 0 => C,0,0 //c 2 => D,0,0 //d 4 => E,0,0 //e 5 => F,0,0 //f 7 => G,0,0 //g 9 => A,0,0 //a 11=> B,0,0 //b 12=> C,0,1 //c 14=> D,0,1 //d … ); if($alteration==”1”){ return array_search($notenkomplex,$note_kreuz); }elseif($alteration==”-1”){ return array_search($notenkomplex,$note_be); }else{ return array_search($notenkomplex,$note); } Quelltext 21 - Implementierung zum Finden der vertikalen Notenlage aus Notenname, Alteration und Oktave Abbildung 36 zeigt die Arrayschlüssel der Notenlagen zu dem Beispielmotiv. Abbildung 36 - Vertikale Notenlage für das Originalmotiv 84 D I E DIA TON I SC HE NO T EN LA GE Für die diatonische Notenlage kann jeder Notenname eindeutig zu einer Indexziffer zugeordnet werden, da Alterationen nicht betrachtet werden müssen. Dies verdeutlicht Tabelle 34. Oktave 0 Eindeutiger Index für 0 1 2 3 4 5 6 7 8 9 10 die vertikale Notenlage Alteration 0 C D E F G A B C D E F Tabelle 34 - Abbildungsmöglichkeit von Notennamen auf die diatonische Notenlage 11 Oktave 1 12 13 14 … G A C … B Die Funktion zur Ausgabe des Index zur diatonischen Notenlage − dargestellt in Quelltext 22− ist nach einem ähnlichen Prinzip aufgebaut wie die Funktion für die chromatische Notenlage. Enharmonische Verwechslungen müssen nicht berücksichtigt werden, sodass als Eingabewerte nur der Notenname und die Oktavlage benötigt werden. function notenlage_d($note, $oktave){ $note $oktave = $note; = $oktave; $notenkomplex = “$note,$oktave”; $note = array( 0 => C,0 //c 1 => D,0 //d 2 => E,0 //e 3 => F,0 //f 4 => G,0 //g 5 => A,0 //a 6 => B,0 //b 7 => C,1 //c 8 => D,1 //d … ); return array_search($notenkomplex,$note); } Quelltext 22 - Implementierung zum Finden der diatonischen Notenlage aus Notenname und Oktave Da keine Überlappungen wie bei den enharmonischen Verwechslungen auftreten, reicht die Zuordnung der Werte in einem Array. 85 4.3.2 IMPLEMENTIERUNG DER MUSIKALISCHEN KONTUREN Sind die Notenlagen eines Musikwerkes indiziert, können zwischen den Notenpositionen in der horizontalen Ebene Konturverläufe gebildet werden. Ob eine Notenfolge eine Motivverarbeitung eines ausgesuchten Motivs ist, wird zuerst durch den Test auf deren Kontur analysiert. Der erste Test beruht auf den Parsons-Code. Nur wenn die Notenfolge den Parsons-Code-Test besteht, ist die Möglichkeit gegeben, dass diese Notenfolge eine Wiederholung oder eine Motivverarbeitung des ausgesuchten Motivs ist. Jedoch entspricht der Parsons-Code des Originalmotivs nicht dem der Motivverarbeitungsformen Umkehrung, Krebs und Spiegelkrebs. Daher ist bei diesen Formen eine Umrechnung des Parsons-Codes vor dem Test zu integrieren. D ER PARSONS-CODE Die Implementierung des Parsons-Codes ist sehr einfach, wie Quelltext 23 zeigt. Die Erstellung des Parsons-Codes setzt voraus, dass die chromatischen Notenlagen zuvor indiziert wurden. Die diatonische Notenlage reicht nicht aus, da damit kein Unterschied beispielsweise zwischen den Tönen C und Cis gemacht wird; hier würde also die Aufwärtsrichtung im Parsons-Code nicht wiedergegeben werden können. Der Parsons-Code nimmt nun von Notenposition n zu n+1 vier mögliche Belegungen ein. Zunächst wird die erste Note des Musikwerkes mit dem Startzeichen S (in der eigenen Implementierung mit *) initialisiert. Anschließend sind die drei Werte Down (D), Up (U) und Repeat (R) möglich. Diese Werte werden für den Richtungsverlauf der Intervalle zwischen Notenposition n und n+1 an Notenposition n+1 angegeben. -lese Notenlage von n mit Hilfe der Funktion notenlage_c -lese Notenlage von n+1 mit Hilfe der Funktion notenlage_c $x = notenlage_c(n+1) - notenlage_c(n); if($x>0){ print “Parsons-Code für n+1 ist Up (U).“; }elseif($x<0){ print “Parsons-Code für n+1 ist Down (D).“; }else{ print “Parsons-Code für n+1 ist Repeat (R).“; } Quelltext 23 - Pseudocode zur Implementierung des Parsons-Codes für die Werte Up, Down und Repeat 86 Der Wert im Parsons-Code ergibt sich durch Subtraktion des Notenlagenindex an Position n von Notenlagenindex an Position n+1. D I E DIA TON I SC HE KO NTUR Die diatonische Kontur kann auf ähnliche Weise wie der Parsons-Code berechnet werden. Grundlage für die Berechnung ist die Indizierung der diatonischen Notenlage. Wie im Quelltext 24 dargestellt ist, wird wieder durch Subtraktion der Indizes der Notenlagen an den Positionen n und n+1 das diatonische Intervall errechnet. -lese Notenlage von n mit Hilfe der Funktion notenlage_d -lese Notenlage von n+1 mit Hilfe der Funktion notenlage_d $x = notenlage_d(n+1) - notenlage_d(n); print “Die diatonische Kontur für n+1 ist “ + $x; Quelltext 24 - Pseudocode zur Berechnung der diatonischen Kontur D I E CHR OM A T I SC H E K ON TUR Die Berechnung der chromatischen Kontur erfolgt nach demselben Prinzip wie die Berechnung der diatonischen Kontur (siehe Quelltext 25). Der einzige Unterschied ist, dass hier der Index der chromatischen Notenlagen zur Hilfe genommen wird. -lese Notenlage von n mit Hilfe der Funktion notenlage_c -lese Notenlage von n+1 mit Hilfe der Funktion notenlage_c $x = notenlage_c(n+1) - notenlage_c(n); print “Die chromatische Kontur für n+1 ist “ + $x; Quelltext 25 - Berechnung der chromatischen Kontur D I E P AU S E UND D ERE N AU S W IRK UNG A UF D I E M OTIVK ON TUR Ist der Rhythmus einer Motivverarbeitung wie in Abbildung 37 zum Originalmotiv derart abgewandelt, dass durch Pausen lediglich die Notenwerte, nicht aber die zeitlichen Notenpositionen 87 verändert sind, ist der Bezug zum Originalmotiv ohne Probleme für den Hörer bzw. Leser erkennbar. In diesem Fall ist auch eine korrekte Interpretation durch den Algorithmus möglich. Abbildung 37 - Originalmotiv und mit Pausen versetztes Originalmotiv Bei der Konturanalyse können Pausen prinzipiell überlesen werden. Die Notenlagen werden von vorhergehenden Noten oder Akkorden in einem Puffer zwischengespeichert. Somit wird gewährleistet, dass die Kontur pausenübergreifend berechnet wird. 88 4.4 ALLGEMEINE FUNKTIONSWEISE DES MOTIVANALYSEPROGRAMMS Der folgende Pseudocode zeigt den Algorithmus der Motivsuche und -analyse. In den ersten sieben Punkten des Algorithmus werden wichtige Variablen, Funktionen und Zustände definiert. Diese verwendet der Algorithmus im weiteren Verlauf. Vom achten bis zum zehnten Punkt wird das Musikwerk in seine Bestandteile, die Noteninformationen zerlegt. Anhand von Wiederholungen werden ein oder mehrere Motive aufgefunden. Von den Noteninformationen der Motive werden je Parameter die Umkehrung, der Krebs, die Krebsumkehrung, die Augmentation und die Diminution gebildet. Der elfte Punkt beinhaltet die Verkettung der Noteninformationswerte eines Musikwerkes zu einem einzigen String. Auf diese Weise entsteht ein einzelner String für jeden Parameter. Die Noteninformationen, die länger als ein Zeichen sind, müssen so transformiert werden, dass sie nur noch aus einem Zeichen bestehen. Danach werden die Noteninformationen der Motive durch ein Matching-Verfahren mit den Strings der Noteninformationen des Musikwerks verglichen. Übereinstimmungen werden als Arrayposition abgespeichert. Im letzten Schritt wird an diesen gefundenen Arraypositionen verglichen, welche Kombinationen aus Noteninformationen welcher Motivverarbeitung entsprechen. Die Bezeichnungen dieser Motivverarbeitungen werden anschließend dem Benutzer mit Taktangabe ausgegeben. Wichtige Algorithmen des Pseudocodes werden im weiteren Verlauf als PHP-Funktionen näher betrachtet, analysiert und interpretiert. 1. 5. 10. Seien α1, α2, …, αn musikalische Motive Sei p = Position Sei arr = Array Sei u = Umkehrung Sei k = Krebs Sei A ein Musikstück Seien {α1, α2, …, αn} A Zerlege Musikwerk A in Bestandteile: Note, Alteration, Oktave, Notenlänge, X-tole, Punktierung, Parsons-Code, diatonische Kontur und chromatische Kontur Finde ein Motiv anhand seiner Wiederholungen im Parsons-Code Zerlege gefunden Motive α1,α2,…,αn in Bestandteile: Note, Alteration, Oktave, Notenlänge, Xtole, Punktierung, Parsons-Code, diatonische Kontur und chromatische Kontur Erstelle aus den Noteninformationen von allen gefundenen Motiven eine Umkehrung, einen Krebs, eine Krebsumkehrung, eine Augmentation und eine Diminution Bereite das MusicXML-Dokument so vor, dass alle Notennamen des Musikwerks und der Motive in einer Reihe aufgelistet werden. Verfahre auf dieselbe Weise auch mit Alterationen, Oktaven, Notenlängen, Parsons-Code, diatonischer Kontur und chromatischer Kontur. Alle einzelnen Noteninformations-Strings müssen so transformiert werden, dass sie nur noch aus einem Zeichen bestehen. Solange 1. 2. 3. 4. 5. 6. Motive α1,α2,…,αn nicht abgearbeitet { Note(α1) enthalten in A Speichere Arrayposition für Note(α1) Alteration(α1) enthalten in A Speichere Arrayposition für Alteration(α1) Oktave(α1) enthalten in A Speichere Arrayposition für Oktave(α1) Notenlänge(α1) enthalten in A Speichere Arrayposition für Notenlänge(α1) Parsons-Code(α1) enthalten in A Speichere Arrayposition für Parsons-Code(α1) Diatonische Kontur(α1) enthalten in A Speichere Arrayposition für diatonische Kon- 89 12. 7. tur(α1) Chromatische Kontur(α1) enthalten in A Kontur(α1) } Speichere Arrayposition für chromatische Solange Motive a1, a2, …, an nicht abgearbeitet { 1. p(arr(Parsons Code(a1)))=p(arr(Diatonische Kontur(a1))) p(arr(Parsons Code(a1)))=p(arr(Chromatische Kontur(a1))) p(arr(Parsons Code(a1)))=p(arr(Notenlänge(a1))) p(arr(Parsons Code(a1)))=p(arr(Oktave(a1))) p(arr(Parsons Code(a1)))=p(arr(Alteration(a1))) p(arr(Parsons Code(a1)))=p(arr(Note(a1))) Motiv ist ein Originalmotiv / Wiederholungsmotiv 2. p(arr(Parsons Code(a1)))=p(arr(Diatonische Kontur(a1))) p(arr(Parsons Code(a1)))=p(arr(Notenlänge(a1))) Motiv ist eine tonale Sequenz 3. p(arr(Parsons Code(a1)))=p(arr(Diatonische Kontur(a1))) p(arr(Parsons Code(a1)))=p(arr(Chromatische Kontur(a1))) p(arr(Parsons Code(a1)))=p(arr(Notenlänge(a1))) Motiv ist eine tonale Sequenz 4. p(arr(u(Parsons Code(a1))))=p(arr(u(Diatonische Kontur(a1)))) p(arr(u(Parsons Code(a1))))=p(arr(Notenlänge(a1))) Motiv ist eine tonale Umkehrung 5. p(arr(u(Parsons Code(a1))))=p(arr(u(Diatonische Kontur(a1)))) p(arr(u(Parsons Code(a1))))=p(arr(u(Chromatische Kontur(a1)))) p(arr(u(Parsons Code(a1))))=p(arr(Notenlänge(a1))) Motiv ist eine reale Umkehrung 6. p(arr(k(u(Parsons Code(a1)))))=p(arr(k(u(Diatonische Kontur(a1))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(u(Chromatische Kontur(a1))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k((Notenlänge(a1)))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(Oktave(a1)))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(Alteration(a1)))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(Note(a1)))) Motiv ist ein Krebs 1 7. p(arr(k(u(Parsons Code(a1)))))=p(arr(k(u(Diatonische Kontur(a1))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(u(Chromatische Kontur(a1))) p(arr(k(u(Parsons Code(a1)))))=p(arr((Notenlänge(a1)))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(Oktave(a1)))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(Alteration(a1)))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k(Note(a1)))) Motiv ist ein Krebs 2 8. p(arr(k(u(Parsons Code(a1)))))=p(arr(k(u(Diatonische Kontur(a1))) p(arr(k(u(Parsons Code(a1)))))=p(arr(k((Notenlänge(a1)))) Motiv ist ein Spiegelkrebs 9. p(arr(Parsons Code(a1)))=p(arr(Notenlänge(a1))) Motiv ist eine Intervallweitung 10. p(arr(Parsons Code(a1)))=p(arr(Diatonische Kontur(a1))) p(arr(Parsons Code(a1)))=p(arr(Chromatische Kontur(a1))) p(arr(Parsons Code(a1)))=p(arr(Notenlänge*2(a1))) p(arr(Parsons Code(a1)))=p(arr(Oktave(a1))) p(arr(Parsons Code(a1)))=p(arr(Alteration(a1))) p(arr(Parsons Code(a1)))=p(arr(Note(a1))) Motiv ist ein Augmentation 11. p(arr(Parsons Code(a1)))=p(arr(Notenlänge(a1))) Motiv ist eine Intervallengung 12. p(arr(Parsons p(arr(Parsons p(arr(Parsons p(arr(Parsons p(arr(Parsons Code(a1)))=p(arr(Diatonische Kontur(a1))) Code(a1)))=p(arr(Chromatische Kontur(a1))) Code(a1)))=p(arr(Notenlänge/2(a1))) Code(a1)))=p(arr(Oktave(a1))) Code(a1)))=p(arr(Alteration(a1))) 90 p(arr(Parsons Code(a1)))=p(arr(Note(a1))) Motiv ist eine Diminution Quelltext 26 - Pseudocode des Motivanalyseprogramms Die Motivanalysesoftware ist als ein Webformular programmiert. Somit können alle, die über einen Internetanschluss, einen Internet-Browser und ein MusicXML-Dokument verfügen, dieses Programm testen. Zusätzlich kann das Programm an eine Datenbank gekoppelt werden, um darin Testergebnisse abzuspeichern. Die gespeicherten Daten können dazu verwendet werden, den Algorithmus effizienter zu programmieren. So kann durch die gespeicherten Testergebnisse der Such- und Analysealgorithmus verbessert werden. Der gesamte Motivsuche- und Motivanalysealgorithmus ist in mehreren PHP-Dateien untergebracht. Je nach Aufgabenstellung werden die einzelnen Klassen in den jeweiligen Dateien aufgerufen und bedienen sich ihrer Funktionen, um Teilresultate an andere Klassen weiterzuleiten. Die folgende Darstellung zeigt die Reihenfolge, in der die Dateien aufgerufen werden, beginnend mit der Datei index.php. Nachdem der Benutzer über ein Webformular die MusicXML-Datei hochgeladen und Suchkriterien für die Motivsuche ausgewählt hat, werden alle Parameter an die Datei motiv.php weitergeleitet. Von dieser Datei aus werden sequenziell die Dateien motiv.class.php mit der Klasse Motivesuche(), repeater.class.php mit der Klasse Wiederholungsfinder(), prepare.class.php mit der Klasse Vorbereitung(), motif_finder.class.php mit der Klasse Motif_Finder_prepare() und motiv_types.class.php mit der Klasse Motif_Types() aufgerufen. index.php | *- motif.php -* | *| *| *| *| *| *- motiv.class.php -> Motivsuche(); repeater.class.php -> Wiederholungsfinder(); prepare.class.php -> Vorbereitung(); prepare_motif.array.php -> Pre_Motif_Array(); motif_finder.class.php -> Motif_Finder_prepare(); motif_types.class.php -> Motif_Types(); Abbildung 38 - Unterteilung des Algorithmus in einzelne Klassen Die Startdatei index.php wird über den Webbrowser aufgerufen. Im Webformular wählt der Benutzer zunächst eine sich lokal auf dem Rechner befindende MusicXML-Datei, die analysiert werden soll, aus. Im Weiteren gibt das Webformular drei Auswahlmöglichkeiten vor, wie ein Motiv im MusicXML-Dokument gefunden werden soll. Mit Auswahl der ersten Möglichkeit wird der Software die Aufgabe übergeben, selbstständig das längste Motiv zu finden. Innerhalb des 91 Algorithmus ist bestimmt, dass das Motiv mindestens fünf Noten lang sein muss. Bei der zweiten Auswahlmöglichkeit muss der Algorithmus beliebig viele Motivmengen finden. Dabei kann der Benutzer angeben, aus wie vielen Noten mindestens sowie maximal die zu findenden Motive bestehen. Die Auswahl ist dabei auf mindestens drei Noten und maximal neunzehn Noten beschränkt. Bei der dritten Auswahlmöglichkeit kann der Benutzer selbst eine Folge von Notennamen eingeben, die möglicherweise das Motiv darstellen. So wird die Motivsuche im Algorithmus übergangen und es werden gleich die Motivverarbeitungen im Musikwerk gesucht. Als letztes kann der Benutzer wählen, ob alle Pausen innerhalb des Musikwerkes entfernt werden sollen. Durch das Entfernen der Pausen wird die Laufzeit stark verkürzt. Diese Maßnahme ist vor allem dann sinnvoll, wenn eine Orchesterpartitur analysiert wird, die viele Passagen mit Pausen besitzt. Nach der Übernahme der Daten aus dem Webformular wird die MusicXML-Datei sowie die Analysekriterien an die Datei motif.php übergeben. Die Datei motif.php ist die Zentralsteuerung des Algorithmus, die je nach Anweisung andere PHP-Dateien und deren Klassen bzw. Funktionen zur Analyse aufruft, oder Teilresultate in Empfang nimmt. Der Algorithmus beginnt mit der Extraktion aller notwendigen Informationen aus MusicXML. 4.5 EXTRAKTION DER DATEN JE NACH VERBINDUNGSTYP Die Klasse Motivsuche() in der Datei motiv.class.php nimmt die MusicXML-Datei entgegen und gibt diese an die XML-Funktion simplexml_load_file(string $filename) weiter. Die MusicXMLDatei wird in ein XML-Objekt konvertiert und steht nun den Funktionen der SimpleXMLBibliothek zur Verfügung. Die wichtigste Funktion ist dabei xpath(string $path),37 mit der innerhalb von XML-Dokumenten an beliebige Stellen, wie Elemente, Attribute und Werte, navigiert werden kann.38 Im Abschnitt „Das Einlesen und Abspeichern der Quelldaten“ wurde bereits auf die Notwendigkeit der Benutzung von zwei foreach-Schleifen hingewiesen. Die äußere foreachSchleife durchläuft einzelne Systeme und die innere foreach-Schleife einzelne Takte eines Systems. Innerhalb der inneren foreach-Schleife befindet sich eine komplexe if-else Anweisungsstruktur, die die derzeitige Notenposition n und die Notenposition n+1 hinsichtlich verschiedener Verbin 37 PHP Hypertext Preprocessor: "PHP: SimpleXMLElement->xpath - Manual". URL: http://de2.php.net/manual/de/function.simplexml-element-xpath.php [Stand: 11. Februar 2009] 38 vgl. Eckstein R., Eckstein S. (2004) XML Path Language (XPath), XML und Datenmodellierung. Heidelberg: dpunkt Verlag GmbH, 65 ff. 92 dungstypen untersucht und anschließend eine entsprechende Anweisung befolgt. Folgende Verbindungstypen sind grundlegend zu betrachten: Note→Note Note→Akkord Note→Pause Akkord →Note Akkord→Akkord Akkord →Pause Pause→Note Pause→ Akkord Pause→Pause (N→N) (N→A) (N→P) (A→N) (A→A) (A→P) (P→N) (P→A) (P→P) Diese Auflistung muss aus folgendem Grund jedoch noch untergliedert werden: Wird die letzte Note eines Takts gelesen, muss der Algorithmus für die Bestimmung der Kontur eine Note vorauslesen. Diese Note befindet sich jedoch im nächsten Takt. Hier muss die Funktion xpath() in das Elternelement <part> heraus navigieren, um in das nächste <measure> Element hinein navigieren zu können. Erst dann wird für den Algorithmus erkennbar, ob sich an der ersten Notenposition des nächsten Takts eine Note, ein Akkord oder eine Pause befindet und welcher Konturverlauf sich daraus ergibt. Zusätzlich sind drei weitere eigenständige Verbindungstypen zu definieren, die das Ende des Notensystems markieren. Diese Verbindungstypen sind notwendig, damit der Algorithmus den letzten Takt eines Notensystems erkennt. Somit wird unterbunden, dass eine Kontur zwischen der letzten Note eines Systems und der ersten Note eines neuen Systems aus einer weiteren Stimme erstellt wird. Zudem ermöglichen diese Verbindungstypen, die innere foreach-Schleife zu verlassen, um durch die äußere foreach-Schleife zum nächsten System gelangen zu können. Die neu eingeführten Verbindungstypen sind: Note→Note im nächsten Takt Note→Akkord im nächsten Takt Note→Pause im nächsten Takt Akkord→Note im nächsten Takt Akkord→Akkord im nächsten Takt Akkord→Pause im nächsten Takt Pause→Note im nächsten Takt Pause→Akkord im nächsten Takt Pause→Pause im nächsten Takt (N→|N) (N→|A) (N→|P) (A→|N) (A→|A) (A→|P) (P→|N) (P→|A) (P→|P) 93 Note→Systemende Akkord→ Systemende Pause→ Systemende (N→|*) (A→|*) (P→|*) Das Zeichen Pipe (|) verdeutlicht den Taktstrich, während ein Asterisk (*) als „Platzhalter“ für das Ende des Systems verwendet wird. Der folgende Quelltext 27 zeigt alle Verbindungstypen in der if-else-Anweisungsstruktur. Weiterhin ist zu sehen, welche Funktion in welcher Verbindungstypanweisung aufgerufen wird. Die erste Funktion notenarray() ist in den Zeilen 1 bis 29 zu sehen. Diese beinhaltet das mehrdimensionale Array, in welches die Noteninformationen abgespeichert werden. Die maximale Dimension des Arrays ist Vier. Innerhalb des Arrays gibt es an Position array[i][5] einen Platzhalter für Akkordtöne. Die besondere Struktur eines Akkordes ist in diesem multidimensionalen Array so berücksichtigt, dass alle zum Basston zugehörigen Akkordtöne in einem zusätzlichen Array in der Arrayzelle array[i][5] abgespeichert werden. Der Aufbau dieses zusätzlichen Arrays ist in der Funktion akkordarray() von Zeile 31 bis 41 zu sehen. 1. 5. 10. 15. 20. 25. 30. 35. 40. function notenarray(){ //Einsammeln der gerade zu lesenden Note oder der gerade zu lesenden Pause array[i][0]= System; array[i][1][0]= Schlüsselname; array[i][1][1]= Schlüsselposition; array[i][1][2]= Tonart; array[i][1][3]= Tonartgeschlecht; array[i][1][4][0]= Takt-Schlag; (Zähler) array[i][1][4][1]= Takt-Schlagtyp; (Nenner) array[i][2]= Verbindungstyp; (A->A, N->A, P->A, N->N, …) array[i][3]= Notenname; array[i][4]= n-te Note innerhalb des Taktes (beginnend je mit 0) array[i][5]= NULL; //Platzhalter für Akkordtöne array[i][6]= Punktierung; array[i][7][0]= X-tole; (actual-notes) array[i][7][1]= X-tole; (normal-notes) array[i][8]= Alteration; array[i][9]= Oktave; array[i][10]= Notenlänge; (duration/divisions) array[i][11]= Stimme; array[i][12]= Notenwert; array[i][13]= Vorzeichen; array[i][14]= vertikale Notenlage chromatisch; array[i][15]= vertikale Notenlage diatonisch; array[i][16]= Konturbewegung chromatisch; n->n+1 array[i][17]= Konturbewegung diatonisch; n->n+1 array[i][18]= Konturbewegung Parsons; n->n+1 array[i][19]= Takt Nr. } function akkordarray(){ //Einsammeln der Akkordtöne, die zur gerade zu lesenden Bassnote dazugehören array[i][5][j][0]= Notenname; array[i][5][j][1]= Alteration; array[i][5][j][2]= Oktave; array[i][5][j][3]= vertikale Notenlage chromatisch; array[i][5][j][4]= vertikale Notenlage diatonisch; array[i][5][j][5][k]= Konturbewegung chromatisch; n->n+1 array[i][5][j][6][l]= Konturbewegung diatonisch; n->n+1 array[i][5][j][7][m]= Konturbewegung Parsons; n->n+1 } 94 45. Aufrufen der Funktion Motivsuche() foreach Schleife über den XPfad score-partwise/part{ -Auslesen des aktuellen ID-Wertes im Element <part> (Notensystem) foreach Schleife über den XPfad score-partwise/part/measure{ 50. -Auslesen der Elemente <measure> (Takte) if(N->N){ }elseif(N->A){ }elseif(N->P){ }elseif(A->N){ }elseif(A->A){ }elseif(A->P){ }elseif(P->N){ }elseif(P->A){ }elseif(P->P){ }elseif(N->|N){ }elseif(N->|A){ }elseif(N->|P){ }elseif(A->|N){ }elseif(A->|A){ }elseif(A->|P){ }elseif(P->|N){ }elseif(P->|A){ }elseif(P->|P){ }elseif(N->|*){ }elseif(A->|*){ }elseif(P->|*){ }else{ 55. 60. 65. 70. 75. 80. notenarray(); notenarray(); notenarray(); notenarray(); akkordarray(); notenarray(); akkordarray(); notenarray(); akkordarray(); notenarray(); notenarray(); notenarray(); notenarray(); notenarray(); notenarray(); notenarray(); akkordarray(); notenarray(); akkordarray(); notenarray(); akkordarray(); notenarray(); notenarray(); notenarray(); //letzte Pause des Systems //letzte Pause des Systems //letzte Pause des Systems //Auslesen in //Auslesen in //Auslesen in //Auslesen in //Auslesen in //Auslesen in //Auslesen in //Auslesen in //Auslesen in //Voraussehen //Voraussehen //Voraussehen den den den den den den den den den des des des nächsten Takt hinein nächsten Takt hinein nächsten Takt hinein nächsten Takt hinein nächsten Takt hinein nächsten Takt hinein nächsten Takt hinein nächsten Takt hinein nächsten Takt hinein letzten Taktes letzten Taktes letzten Taktes //Protokollierung eines unerwarteten Fehlers } } } Quelltext 27 - Informationssammlung und Aufbereitung im MusicXML Dokument Das Ende eines Takts im letzten System erkennt die äußere foreach-Schleife zum einen durch das Fehlen weiterer <measure>-Elemente. Zum anderen überprüft eine if-Anweisung die Existenz eines Schlussstrichs im letzten Takt. Der folgende Quelltext 28 zeigt die MusicXML-Struktur eines Schlussstrichs, hier beispielsweise für Takt 24 eines beliebigen Werkes. <measure number="24"> <note> ... </note> <barline location="right"> <bar-style>light-heavy</bar-style> </barline> </measure> Quelltext 28 - Das Element barline markiert das Ende des Systems Sind nach dem Einlesen alle relevanten Musikinformationen im multidimensionalen Array gespeichert, wird dieses Array an die Klasse Wiederholungsfinder() der Datei repeater.class.php übergeben. Zusätzlich erhält die Klasse das Kriterium zum Motivfinden, das der Benutzer in der 95 Weboberfläche zuvor gewählt hat. 4.6 ERSTELLUNG EINES STRINGS AUS DEM MULTIDIMENSIONALEN ARRAY Der weitere Algorithmus wird durch die Kriterien zum Motivfinden in drei Bereiche unterteilt: 1. Hat der Benutzer eine Notenfolge fest eingegeben, wird nach dieser im Musikwerk gesucht. 2. Verlangt der Benutzer, dass das Motiv vom Algorithmus selbstständig gesucht wird, sucht der Algorithmus nach Wiederholungen von Notennamenreihen im Musikwerk. Alle Notennamenreihen, die so viele Noten lang sind, wie zuvor vom Benutzer ausgewählt wurde, werden als Motivmenge ausgegeben. 3. Die Notennamenreihe, die mindestens einmal wiederholt wird und aus den meisten Noten besteht, wird als Motiv erkannt. Das multidimensionale Array ist nun mit Noteninformationen gefüllt. Sofern Fall 2 oder Fall 3 vorliegt, gilt es als nächstes, in diesem Array zwei identische Notennamenreihen zu finden. Zu diesem Zweck werden alle Notennamen aus dem multidimensionalen Array extrahiert und zu einem String verbunden. Der Anfang des Strings ist der Notenname der ersten Note des ersten Systems. Der String endet mit dem Notennamen der letzten Note des letzten Systems. Liest der Algorithmus an einer Notenposition eine Pause, so wird diese durch das Charactersymbol P ersetzt. Das Zeichen P kollidiert zu keiner Zeit mit den Notennamen A, B, C, D, E, F oder G. Liest der Algorithmus an einer Notenposition einen Akkord, so wird nur der Basston dieses Akkords für die Suche benutzt. Für eine zukünftige Implementierung ist zu überlegen, ob der Algorithmus den Akkord beispielsweise hinsichtlich des Grundtons analysiert und anschließend zur Motivanalyse nur den Grundton verwendet, der den Grundklang eines Akkords ausmacht. Wird beim Parsen das Ende eines Notensystems erreicht, so wird dieses System vom anschließenden Notensystem durch den Buchstaben Z getrennt. Auch hier ist ein Buchstabe gewählt, der nicht unter den Notennamen auftritt. Durch die Markierung des Abschlusses eines Notensystems wird verhindert, dass Notennamenwiederholungen notensystemübergreifend als Motiv fehlinterpretiert werden. Die folgenden Darstellungen zeigen die soeben beschriebenen Vorgänge. Aus den Notennamen des vierstimmigen Werkes in Abbildung 39 mit vier Takten extrahiert der Algorithmus einen String aus Notennamen (siehe Abbildung 40). Das Musikwerk in Abbildung 39 wird im Übrigen 96 auch in den folgenden Betrachtungen eine entscheidende Rolle spielen, denn es enthält das Beispielmotiv der Diplomarbeit und einige Motivverarbeitungen. Abbildung 39 - Partitur des Beispielwerks mit dem Beispielmotiv EGBDCBDECADEFDCDCBEAZBBCAEGBDCEABEZGGAFCFCFGAZEDADACEGFEAZ Abbildung 40 - Notennamen-String aus dem zusammengesetzten System 97 4.7 KRITERIEN ZUM AUFFINDEN VON MOTIVEN Bei der Motivsuche wird der Algorithmus in dieser Diplomarbeit Motive anhand der Wiederholung von Notennamenreihen finden. Neben dieser Verfahrensweise gibt es aber auch die Möglichkeit, Motive nach anderen Kriterien automatisiert zu finden. Einige Kriterien sind im Folgenden beschrieben. Die Wiederholung von Notennamen ist das Kriterium der Motivsuche in dieser Diplomarbeit. Hierzu werden aus dem multidimensionalen Array alle Notennamen extrahiert und als String hintereinander platziert. Nun kann ein Suchalgorithmus diesen String nach zwei identischen Teilstrings im gesamten String absuchen. Ist auf diese Art ein mögliches Motiv anhand der Notennamen gefunden, werden die Noteninformationen aus den übrigen Parametern für diesen String aus dem multidimensionalen Array für die weitere Analyse abgefragt. Neben einer Melodiefolge kann sich das menschliche Gedächtnis den Rhythmus am besten einprägen.39 Dahingehend kann ein Algorithmus gebildet werden, der gleiche Rhythmusfolgen innerhalb eines Musikwerkes findet. Hierzu müssen alle Notenwerte aus dem Element <type> zu einem String aneinandergereiht werden. Auch hier müssen zwei identische Rhythmusfolgen in Form von Teilstrings gefunden werden. Danach können die restlichen Noteninformationen zur Tonhöhe der Noten ergänzt werden. Ein weiteres Kriterium zum Auffinden eines Motivs kann die Wiederholung der Noten auf betonten Zählzeiten sein. Jede Taktart gibt Zählzeiten vor, auf denen Noten hauptbetont, nebenbetont oder unbetont werden. Diese Akzente sind wichtige Merkmale in einer Melodie. Werden nur die Tonhöhen auf den betonten und nebenbetonten Zählzeiten betrachtet, so können diese Rahmenpunkte zum Finden eines Motivs genutzt werden. Der Algorithmus kann dabei in zwei Schritten vorgehen. Im ersten Schritt werden alle betonten und nebenbetonten Notennamen aneinandergereiht. Danach wird in diesem String wieder nach zwei identischen Teilstrings gesucht. Diese Teilstrings sind dann Ausgangspunkt der Motivanalyse. vgl. De la Motte-Haber, H., Rötter, G. (2005) Prinzipien der Rhythmuswahrnehmung, Musikpsychologie. Laaber: Laaber Verlag, 233 39 98 4.8 DIE MOTIVSUCHE Für das Finden eines oder mehrerer Motive innerhalb eines Strings wurden zwei verschiedene Funktionen programmiert. Die erste Funktion findet innerhalb des gesamten Strings den längsten Teilstring, der mindestens zweimal im String auftaucht, also mindestens einmal wiederholt wird. Die zweite Funktion findet alle Teilstrings, die zweimal im Gesamtstring vorhanden sind und zusätzlich so lang sind, dass sie der Minimal- und Maximalnotenanzahl entsprechen, die der Benutzer in der Weboberfläche zuvor angegeben hat. Der folgende Code zeigt die erste Funktion, die als Übergabewerte den Gesamtstring und seine Länge entgegennimmt. Vom Gesamtstring werden nach und nach immer kleinere Teilstrings gebildet. Anschließend wird dieser Teilstring jeweils im Gesamtstring auf mindestens zweimaliges Vorkommen gesucht. Werden zwei identische Teilstrings gefunden, so gibt die Funktion den Teilstring und dessen Erstposition innerhalb des Gesamtstrings zurück. private function motif_longest($string,$search_length){ $intLength =$search_length; $strSource =$string; $strTmp = null; $arrCount = array(); for( $i=$intLength-1; $i>=2; $i-- ) { for($o=0; $o < $intLength-$i; $o++ ) { $strTmp = substr($strSource, $o, $i); if( ($intCount = substr_count($strSource, $strTmp)) >= 2 ) { $arrCount[$strTmp] = $intCount; } } } if( !empty($arrCount) ) { break; } $x1=0; foreach($arrCount as $a1 => $a2){ $motiv_array[$x1][0]=$a1; $motiv_array[$x1][1]=$a2; $x1++; } return $motiv_array; } $string=”EGBDCBDECADEFDCDCBEAZBBCAEGBDCEABEZGGAFCFCFGAZEDADACEGFEAZ”; $search_length=strlen($string); motif_longest($string,$search_length); Quelltext 29 - Suche nach dem längsten zweimal vorhandenen String mit Hilfe der Funktion motif_longest Die zweite Funktion (siehe Quelltext 30) sucht ebenfalls über von Schritt zu Schritt kleineren Teilstrings nach wiederholten Notennamenketten. Lediglich die Ergebnismenge wird eingeschränkt: Es werden nur die Teilstrings in die Ergebnismenge aufgenommen, die sich im Rahmen 99 der vorgegebenen Länge befinden. Somit wird der Funktion der Gesamtstring übergeben sowie deren Länge und die erlaubte Minimal- und Maximallänge des gesuchten Motivs. Als Rückgabewert gibt die Funktion ein Array mit allen gefundenen Strings und deren Erstposition im Gesamtstring zurück. private function $strSource $minlength $maxlength $int_length $strTmp $arrCount motif_range($string,$min,$max,$search_length){ = $string; = $min; = $max; = $search_length; = null; = array(); for($o = 0; $o < $int_length; $o++ ){ if(($int_length-$o)<=$minlength){ continue; } } $range_search = $int_length-$o; $sum_min_max = $minlength+$maxlength; for($i = $minlength; $i<=$range_search and $range_search<=$sum_min_max; $i++ ){ $strTmp = substr($strSource, $o, $i); $intCount = substr_count($strSource, $strTmp); if($intCount >= 2){ if(!array_key_exists($intCount,$arrCount)){ $arrCount[ $intCount ] = array(); } $arrCount[$intCount][] = $strTmp; } } foreach($arrCount as $intCount => $arrResults ){ $arrCount[$intCount] = array_unique($arrResults); } $x1=0; } foreach($arrCount as $a1 => $a2){ foreach($a2 as $b1 => $b2){ $motiv_array[$x1][0]=$arrCount[$a1][$b1]; $motiv_array[$x1][1]=$a1; $x1++; } } return $motiv_array; $string=”EGBDCBDECADEFDCDCBEAZBBCAEGBDCEABEZGGAFCFCFGAZEDADACEGFEAZ”; $search_length=strlen($string); $min=3; $max=10; motif_range($string,$min,$max,$search_length); Quelltext 30 - Die Funktion motif_range zur Suche nach doppelten Strings mit Einschränkung der Länge Die Rückgabewerte der beiden vorgestellten Motivsuche-Funktionen werden als Array an die Zentralsteuerungsdatei motif.php zurückgegeben. Dieses zweidimensionale Array besteht aus den Notennamenreihen und aus den Anfangspositionen der gefundenen Motive im Gesamtstring. Mit Hilfe der Anfangsposition des Teilstrings kann dieser im Gesamtstring wiedergefunden werden. Ob die Position des Motivs richtig ist, wird mit der Funktion array_search(mixed $needle, array $haystack) überprüft. Dabei sucht die Funktion den Teilstring im multidimensionalen Ar- 100 ray und erhält als Rückgabewert den Schlüssel. Der Schlüssel ist von der eigenen Programmierung her so aufgebaut, dass er gleichzeitig auch der Anfangsposition des gesuchten Motivs im gesamten Musikwerk entspricht. Ist die richtige Position im multidimensionalen Array gefunden, können die Noteninformationen aus den restlichen Parametern dem gefundenen Motiv hinzugefügt werden. Alle Noteninformationen des Motivs werden in einem neuen multidimensionalen Array abgespeichert. Zusätzlich zu den Noteninformationen Notenname, Alteration, Oktave, Notenwert als Zahl, Notenwert als Wort, chromatische Kontur, diatonische Kontur und Parsons-Code sind drei weitere strukturbedingte Informationen zu ergänzen: 1. Position der einzelnen Note des Motivs innerhalb des multidimensionalen Arrays: Wurde beispielsweise ein Motiv, das neun Noten lang ist, an Arrayposition 440 des multidimensionalen Arrays vom Musikwerk entdeckt, so sind die Zahlen der Notenpositionen, die im multidimensionalen Array des Motivs gespeichert werden: 4, 5, ..., 11 und 12. 2. Taktnummer des Taktes, in dem sich die betrachtete Note des Motivs im Musikwerk befindet: Diese Angabe ist für die spätere Ausgabe der Motivanalyseergebnisse wichtig, um dem Benutzer die Information zu geben, im welchen Takt sich das gefundene Motiv befindet. 3. Angabe des Systems, in dem sich das Motiv befindet: Auch diese Information ist für die Präsentation der Analyseergebnisse für den Benutzer wichtig. Alle genannten Informationen sehen für das konstruierte Beispielmotiv wie folgt aus: Arrayposition der Note Notenname Alteration Oktavlage Notenwert als Zahl Notenwert als Wort chromatische Kontur 0 1 2 3 4 5 6 7 8 9 E 0 4 0.5 G 1 4 0.5 B 0 4 1 D 0 5 0.5 C 0 5 1.5 B 0 4 0.5 D 0 4 0.5 E 0 4 0.5 C 0 4 0.5 A 0 3 2 eighth eighth quarter eighth quarter eighth eighth eighth eighth half * 4 3 3 -2 -1 -9 2 -4 -3 diatonische Kontur Parsons-Code Taktnummer System * 2 2 2 -1 -1 -5 1 -2 -2 S 1 P1 U 1 P1 U 1 P1 U 1 P1 D 1 P1 D 2 P1 D 2 P1 U 2 P1 D 2 P1 D 2 P1 Tabelle 35 - Noteninformationen des Beispielmotivs 40 Die entspricht der 5. Stelle im Array, da im Array die Zählung bei 0 beginnt. 101 4.9 BERECHNUNG DER MOTIVVERARBEITUNGSFORMEN Die bisher gesammelten Daten sind in zwei multidimensionalen Arrays abgespeichert: Zum einen in dem Array, welches die Noteninformationen des gesamten Musikwerkes enthält und zum anderen das Array mit den Noteninformationen über die gefundenen Motive. Zur Unterscheidung der Arrays werden die beiden Bezeichnungen „Werkarray“ und „Motivarray“ eingeführt. Derzeitig liegt das Motiv mit seinen Noteninformationen in dem Motivarray mit dem Arraynamen Position[] vor. Von den Noteninformationen des Motivs ist nun der Krebs, die Umkehrung, die Krebsumkehrung, die Augmentation und die Diminution zu bilden. Es gelten hierbei die Rechnungsvorschriften von Originalmotiv zu der jeweiligen Motivverarbeitungsform, wie sie in Kapitel 3.3 „Systematischer Bezug der Motivverarbeitung zum Originalmotiv“ tabellarisch vorgestellt wurden. Motivverarbeitungsformen wie Sequenz, Intervallengung sowie Intervallweitung müssen nicht gebildet werden, sondern können direkt aus dem Motivarray Position[] zur Analyse herangezogen werden. Dies begründet sich darin, dass es beispielweise nicht eine einzige Intervallweitung, sondern sehr viele mögliche Intervallweitungen eines Motivs gibt. Um unnötige Rechenprozesse zu verringern, werden daher je nach Motivverarbeitungsform nicht alle Parameter miteinander verglichen. Des Weiteren kann eine Sequenz bereits durch den Vergleich der Konturen sowie der Notenwerte identifiziert werden. Für die übrigen Motivverarbeiten ist ein Anlegen neuer Arrays − hier als Motivverarbeitungsarrays bezeichnet − notwendig, da hier ein oder mehrere Parameter der Noteninformationen geändert werden müssen. Krebs Das Motivarray ist für den Krebs von hinten nach vorn zu drehen. Die Noteninformationen der Konturen müssen außerdem invertiert werden. Die Inversion schließt sowohl Vorzeichenwechsel, als auch den Symboltausch von D und U im Parsons-Code ein. Die neu geordneten Noteninformationen werden parameterweise in einem neuen temporären Array, dem Krebsarray (Position_des_Krebs_Pattern[]), abgespeichert. 102 Umkehrung Für die Umkehrung werden alle Noteninformationen zu den Konturen im Motivarray invertiert und in einem temporären Umkehrungsarray gespeichert. Das Umkehrungsarray besitzt den Namen Position_des_Umgekehrung_Pattern[]. Krebsumkehrung Die Noteninformationen im Motivarray werden zunächst wie bei einer Umkehrung und anschließend wie bei einem Krebs geordnet. Abgespeichert werden die neu geordneten Noteninformationen in ein temporäres Krebsumkehrungsarray mit dem Namen Position_des_Krebsumkehrung_Pattern[]. Augmentation Die Notenwerte und die Werte aus <duration> werden um den Wert 2 multipliziert. Das Augmentationsarray besitzt den Namen Position_Augmentation_Pattern[]. Diminution Die Notenwerte und die Werte aus <duration> werden durch den Wert 2 dividiert. Das Diminutionsarray besitzt den Namen Position_Diminution_Pattern[]. 103 4.10 REDUKTION UND TRANSFORMATION DER NOTENINFORMATIONEN Auch das Werkarray muss nun zum Finden von Motivverarbeitungen aufbereitet werden. Hierzu wird ein temporäres Werkarray angelegt, welches nur die für die Motivanalyse selbst benötigten Informationen enthält. Hierzu werden die Zellen des temporären Werkarrays in den ersten Schritten gefüllt und in einem zweiten Schritt teilweise überschrieben. Im ersten Schritt werden die nachfolgend aufgelisteten Informationen aus dem Werkarray ausgelesen und in das temporäre Werkarray gespeichert: der Notenname die Alteration die Oktave der Notenwert als Zahl der Notenwert als Wort die chromatische Kontur die diatonische Kontur der Parsons-Code die Taktnummer in der sich die aktuelle Note befindet das System in dem sich das Motiv befindet Falls der Benutzer den entsprechenden Button in der Weboberfläche zuvor aktiviert hat, werden Pausen ebenfalls in das temporäre Array aufgenommen. Bei Akkorden wird immer nur der Basston übernommen. Dieser erste Schritt besteht also in einer Reduzierung der Daten. Alle Werte sind so zu übernehmen, dass der Index zwischen den beiden multidimensionalen Arrays gleich bleibt. Auf diese Weise kann auf beide multidimensionalen Arrays mit dem gleichen Index zugegriffen werden, wobei stets die Informationen der gleichen Note zurückgegeben werden. Die folgende Darstellung zeigt die Übergabe der Inhalte des Werkarrays in das temporäre Werkarray mit gleichbleibendem Index anhand eines Ausschnitts aus dem Beispielwerk aus Abbildung 39. 104 Akkord an Notenposition 6 Notenname weitere Noteninformationen Oktavlage Index ... ... ... 4 P ... 5 E C A ... 4 6 C ... 5 7 B ... 4 8 ... ... ... 9 Werkarray (inklusive Akkordtöne) 4 5 6 7 8 9 ... ... ... ... ... ... Temporäres multidimensionales Oktavlage ... / 4 5 4 ... Array Notenname ... P A C B ... Abbildung 41 - Die Indizes zwischen dem Werkarray und des temporären Werkarrays bleiben erhalten Index weitere Noteninformationen Die folgende Abbildung 42 zeigt die gesamten Informationen, wie sie im temporären Werkarray angeordnet sind, anhand eines Ausschnitts aus dem Beispielwerk. ... ... ... ... ... ... ... ... ... ... ... 1 G 1 4 0.5 eighth 4 2 U 1 P1 2 B 0 4 1 quarter 3 2 U 1 P1 3 D 0 5 0.5 eighth 3 2 U 1 P1 4 C 0 5 1.5 quarter -2 -1 D 2 P1 5 B 0 4 0.5 eighth -1 -1 D 2 P1 6 D 0 4 0.5 eighth -9 -5 D 2 P1 7 E 0 4 0.5 eighth 2 1 U 2 P1 ... ... ... ... ... ... ... ... ... ... ... Index Notenname Alteration Oktavlage Notenwert (Zahl) Notenwert (Wort) Chromatische Kontur Diatonische Kontur Parsons-Code Taktnummer Notensystem Abbildung 42 - Veranschaulichung des temporären Werkarrays mit den Noteninformationen des Beispielwerkes als Ausschnitt Im zweiten Schritt müssen die Werte der Noteninformationen aus dem temporären Werkarray, die länger als ein Zeichen sind (bspw. -3 oder quarter), so transformiert werden, dass diese Zeichen nur noch aus einem Charactersymbol bestehen. Ziel der Transformation ist es, dass alle Einträge in der hier als senkrecht dargestellten Ebene des Arrays gleich lang sind. Im Verlauf der Motivanalyse werden die einzelnen Charactersymbole je Parameter zu einem String verkettet. Dabei müssen die Strings in allen Parametern dieselbe Länge aufweisen. Bei Übergängen von einem zum nächsten Notensystem wurde im Parameter Notenname ein Z eingefügt. Um am Ende wieder dieselbe Länge wie bei den anderen Parametern zu erreichen, müssen auch in allen anderen Parametern die Notensystemübergänge mit einem Charactersymbol markiert werden. Als Charactersymbole werden die Groß- und Kleinbuchstaben des lateinischen Alphabets verwendet. Es stehen demnach 26 Kleinbuchstaben und 26 Großbuchstaben als Charactersymbole 105 zur Verfügung. Diese insgesamt 52 Charactersymbole ermöglichen eine String-Analyse mit den PHP-String- und Regular-Expressions-Funktionen. Die durch PHP zur Verfügung stehenden Funktionen können zwischen Groß- und Kleinschreibung unterscheiden. Die folgenden Transformationen wurden in der Diplomarbeit realisiert. Transformation der diatonischen Kontur Es wird davon ausgegangen, dass zwischen zwei benachbarten Noten der Intervallabstand nie größer als -24 oder +24 Tonschritte ist. Dies entspricht im diatonischen Raum immerhin einem Sprung von mehr als drei Oktaven. f(x) sei die Transformationsfunktion zur diatonischen Kontur mit den folgenden Werten: f(-24) = x f(-23) = w ... f(-2) = b f(-1) = a f(0) =Z f(1) =A f(2) =B ... f(23) = W f(24) = X f(Ende des Notensystems) = Y. Transformation der chromatischen Kontur Hier wird ebenfalls angenommen, dass ein Intervallabstand zwischen zwei benachbarten Noten nie größer als -24 und +24 Tonschritte ist. Im chromatischen Raum entspricht dies circa zwei Oktaven. g(x) sei die Transformationsfunktion zur chromatischen Kontur mit den Werten: g(-24) g(-23) ... g(-1) g(0) =x =w =a =Z 106 g(1) = A g(2) = B ... g(23) = W g(24) = X g(Ende des Systems) = Y. Transformation des Parsons-Codes Der Parsons-Code muss nicht transformatiert werden, da die Symbole des Parsons-Codes nur aus S, D, U und R bestehen und somit stets nur ein Zeichen lang sind. Das Ende eines Systems wird mit dem Buchstaben Y angegeben. Transformation des Notenwertes Hier erweist es sich als sinnvoller, den Notenwert aus der Angabe als englisches Wort herauszulesen, da der Notenwert als reelle Zahl nicht ohne Weiteres in ein diskretes Symbol aus dem Alphabet transformiert werden kann. In einer zukünftigen Implementierung sollte jedoch wieder auf die Werte von <duration> und <divisions> zugegriffen werden, da so feinere Abstufungen der Notenwerte insbesondere bei X-tolen dargestellt werden können. h(x) sei die Transformationsfunktion für die Notenlänge mit den folgenden Werten: h(breve) =A h(long) =B h(whole) =C h(half) =D h(quarter) =E h(eighth) =F h(16th) =G h(32th) =H h(64th) =I h(128th) =J h(Ende des Systems) = Z. Sind im Musikwerk größere Notenwerte als 128th, Punktierungen oder auch X-tolen vorhanden, so werden diese Werte mit dem Symbol U belegt, welches in der Motivanalyse als 107 undefiniert behandelt wird. Transformation der Oktavlagen i(x) sei die Transformationsfunktion für Oktavlagen mit den folgenden Werten: i(0) =J i(1) =A i(2) =B i(3) =C i(4) =D i(5) =E i(6) =F i(7) =G i(8) =H i(9) =I i(Ende des Systems) = P. Alterationen Für die Transformation der Alterationen wird als Ausgangswert der Wert im Element <alter> genommen. Es sind aufwärts sowie abwärts nur zwei Alterationsschritte mit unterscheidbaren Symbolen definiert, da in aller Regel größere Alterationen nicht vorkommen. Tritt dieser Fall dennoch ein, werden die größeren Alterationswerte wieder mit dem Symbol U belegt. j(x) sei die Transformationsfunktion für Alterationen mit den Werten: j(0) =Z j(-1) = a j(-2) = b j(1) =A j(2) =B j(Ende des Systems) = P. 108 Transformation der Notennamen Notennamen müssen nicht transformiert werden, da diese bereits aus nur einem Charactersymbol bestehen: C, D, E, F, G, A und B. Ebenfalls müssen Pausen nicht mehr transformiert werden, da diese bereits das Symbol P erhalten haben und das Ende eines Systems wird mit dem Zeichen Y belegt. Die folgende Darstellung in Abbildung 43 soll das temporäre transformierte Werkarray veranschaulichen mit demselben Auszug von Noteninformationen aus dem konstruierten Beispielmotiv wie in Abbildung 42, hier jedoch nach der Transformation. ... ... ... ... ... ... ... ... ... ... 1 G A D F D B U 1 P1 2 B Z D E C B U 1 P1 3 D Z E F C B U 1 P1 4 C Z E E b a D 2 P1 5 B Z D F a a D 2 P1 6 D Z D F i e D 2 P1 7 E Z D F B A U 2 P1 ... ... ... ... ... ... ... ... ... ... Index Notenname Alteration Oktavlage Notenwert (Wort) Chromatische Kontur Diatonische Kontur Parsons-Code Taktnummer Notensystem Abbildung 43 - Veranschaulichung des temporären Werkarrays mit den Noteninformationen des Beispielwerkes als Ausschnitt nach der Transformation Die Arrayzellen Notensystem, Taktnummer und Notenwert als Zahl werden nicht transformiert, da sie für die Motivanalyse nicht betrachtet werden müssen. Die Informationen zum Notensystem und zur Taktnummer sind aber noch enthalten, da sie später für die Präsentation der Motivverarbeitungsergebnisse relevant sind. Werden die einzelnen für die Motivanalyse relevanten Charactersymbole je Parameter aus dem temporären Werkarray als einzelne Strings zusammengesetzt, so entsteht die folgende Darstellung. Index Notenname Parsons-Code Diatonische Kontur Chromatische Kontur Notenwert Oktavlage Alteration 0 10 20 30 40 50 | | | | | | EGBDCBDECADEFDCDCBEAZBBCAEGBDCEABEZGGAFCFCFGAZEDADACEGFEAZ SUUUDDDUDDUUUDDUDDUDYSEUDDUUUDUUUDYSEUDDUDUUUYSDDUDUUUDDUY zBBBaaeAbbCAAbaHaaCdYzZAbcBBBaBCAdYzZAbcCcCAAYzacCcBBBaaCY zDCCbaiBdcEBAcbNbaEgYzZAceDCCbDEBgYzZAdeEeECAYzbeEeCDCbaEY FFEFEFFFFDFFFDFFFFDFZDFEDFFEFEDEDFZDFEDDDDEDFZCDDDFFEFEDFZ DDDEEDDDDCDDDDDEEDEDPCCDCCCCDDDDDDPCCCCCCCCCCPCCBCBCCCCCCP ZAZZZZZZZZZZZZZZZZZZPZZZZZAZZZZZZZPAAZZZZZZAZPZZZZZZZZZZZP Abbildung 44 - Aneinanderreihung aller Noteninformationen des Beispielmusikwerkes als Strings 109 Alle Strings besitzen die gleiche Länge. Die Länge entspricht dem Index und wird im Kopf der Abbildung dargestellt. Üblicherweise beginnt die Zählung bei einem Array bei 0. Diese Zählung wurde für die weitere Betrachtung ebenfalls übernommen. Anschließend werden wie bei dem Werkarray auch die Arrayzellen der Motivverarbeitungsarrays in Charactersymbole transformiert. Das Array Position_Augmentation_Pattern[] enthält beispielweise diese Daten: Länge 0 EGBDCBDECA SUUUDDDUDD zBBBaaeAbb zDCCbaiBdc EEDEDEEEEC DDDEEDDDDC ZAZZZZZZZZ Notenname Parsons-Code Diatonische Kontur Chromatische Kontur Notenwert Oktavlage Alteration Abbildung 45 - Aneinanderreihung aller Noteninformationen für die Augmentation des Beispielmotivs als String 4.11 DIE MOTIVANALYSEFUNKTION Alle Informationen sind nun so aufbereitet, dass die Motivanalyse beginnen kann. Für die weitere Betrachtung wird ein Teilstring, der im Gesamtstring gesucht wird, als Pattern bezeichnet. Ein Pattern ist ein Ausdruck, in der Regel eine Zeichenkette, nach der in einer anderen Zeichenkette gesucht wird, eine Art Suchmuster. Für die Motivanalyse wurde die Funktion pregmatchall() programmiert, welche im Quelltext 31 dargestellt ist. Sie erwartet vier Parameter. Die Variable $pattern ist das Suchmuster, das in einem String gesucht werden soll. Als erstes wird der String der Notennamen des Originalmotivs der Variable $pattern übergeben. Die Variable $subject erhält den Gesamtstring der Notennamen des Musikwerkes. Die Variable $matches speichert alle gefundenen Suchmuster und deren Position an der das Suchmuster im Gesamtstring aufgetaucht ist. Die Variable $flags mit dem Wert PREG_PATTERN_ORDER „ordnet die Ergebnisse so an, dass $treffer[0] ein Array von Übereinstimmungen mit dem kompletten Suchmuster ist, $treffer[1] ein Array von Zeichenketten, die auf das erste eingeklammerte Teilsuchmuster passen und so weiter.“ 41 Die Variable $offset mit dem Wert 0 bedeutet, dass die Suche an der nullten Position der Suchzeichenkette beginnt. PHP Hypertext Preprocessor: "PHP: preg_match_all - Manual". URL: http://de.php.net/manual/de/function.preg-match-all.php [Stand: 4. April 2009] 41 110 function pregmatchall($pattern,$subject,&$matches,$flags=PREG_PATTERN_ORDER,$offset=0 ){ $i = 0; $matches = array(); while( preg_match($pattern, $subject, $match, PREG_OFFSET_CAPTURE, $offset+1) ) { foreach( $match as $r => $m ) { $matches[$r][] = $m; } $offset = $match[0][1]; $i++; } return $i; } Quelltext 31 - Funktion, die Teilstrings im Gesamtstring matcht Aus dem konstruierten Beispielmotiv mit der Notennamenfolge EGBDCBDECA werden hier für die Analyse als Motiv nur die ersten vier Notennamen EGBD verwendet, da so mehr Ergebnisse erzielt werden. Die Ergebnissemenge kann sehr unterschiedlich sein, je nachdem, wie lang das Motiv gewählt ist. Für das Notennamen-Pattern EGBD wird im Beispiel des vierstimmigen Satzes aus Abbildung 39 mit dem Notennamen-String EGBDCBDECADEFDCDCBEAZBBCAEGBDCEABEZGGAFCFCFGAZEDADACEGFEAZ das folgende Ergebnis an die Variable $matches zurückgegeben. $matches[0][0]=“EGBD“; $matches[0][1]=0; $matches[1][0]=“EGBD“; $matches[1][1]=25; Quelltext 32 - Beispiel für Rückgabewerte der Funktion pregmatchall() So wie die Funktion pregmatchall() die Position findet, in der die Notennamen-Patterns im Gesamtstring auftreten, so kann die Funktion ebenfalls dafür genutzt werden, die Positionen zu finden, an denen Alterations-Patterns im Gesamtstring der Alterationen auftreten oder die Positionen, an denen Oktav-Patterns im Gesamtstring der Oktavlagen auftreten. Dies gilt ebenso für die Notenwerte, die chromatische Kontur, die diatonische Kontur und den Parsons-Code. Sind alle Patterns des Motivarrays Position[] abgearbeitet, werden die Patterns der Motivverarbeitungsarrays an die Funktion pregmatchall() übergeben. Auch hier werden alle Patterns auf Übereinstimmungen im Gesamtstring des Musikwerkes hin überprüft. Die Rückgabewerte sind wieder die Patterns selbst sowie die Positionen, an denen diese im Gesamtstring auftreten. Die folgende Abbildung zeigt gefundene Matchings der ersten vier Noten EGBD des verkürzten Beispielmotivs im vierstimmigen Beispielmusikwerk. Dabei sind in grüner Farbe die Noteninformationen des Motivs EGBD markiert. Die Werte in der Farbe Pink im Parsons-Code, der diatonischen Kontur und der chromatischen Kontur sind für die weitere Motivanalyse nicht relevant, da sie hier nur den Startpunkt markieren. Dennoch ist der Algorithmus so aufgebaut, dass 111 auch die in Pink gehaltenen Charactersymbole in die Ergebnismenge aufgenommen werden, um die richtige Position für die weitere Analyse anzugeben. In gelber Farbe hinterlegt sind alle Matchings, die mit den Noteninformationen des Motivs EGBD übereinstimmen. Index Notenname Parsons-Code Diatonische Kontur Chromatische Kontur Notenwert Oktavlage Alteration 0 10 20 30 40 50 | | | | | | EGBDCBDECADEFDCDCBEAZBBCAEGBDCEABEZGGAFCFCFGAZEDADACEGFEAZ SUUUDDDUDDUUUDDUDDUDYSEUDDUUUDUUUDYSEUDDUDUUUYSDDUDUUUDDUY zBBBaaeAbbCAAbaHaaCdYzZAbcBBBaBCAdYzZAbcCcCAAYzacCcBBBaaCY zDCCbaiBdcEBAcbNbaEgYzZAceDCCbDEBgYzZAdeEeECAYzbeEeCDCbaEY FFEFEFFFFDFFFDFFFFDFZDFEDFFEFEDEDFZDFEDDDDEDFZCDDDFFEFEDFZ DDDEEDDDDCDDDDDEEDEDPCCDCCCCDDDDDDPCCCCCCCCCCPCCBCBCCCCCCP ZAZZZZZZZZZZZZZZZZZZPZZZZZAZZZZZZZPAAZZZZZZAZPZZZZZZZZZZZP Abbildung 46 - Gefundene Matchings im vierstimmigen Beispielwerk Es ist zu sehen, dass beispielsweise an Position 25 Übereinstimmungen in den Parametern Notenname, Parsons-Code, diatonische Kontur, chromatische Kontur, Notenwert und Alteration gefunden wurden. Es ist nun zu analysieren, welcher Motivverarbeitung diese Kombinationen an Übereinstimmungen entsprechen. 4.12 DIE EINORDNUNG DER ERGEBNISSE ZU MÖGLICHEN MOTIVVERARBEITUNGSFORMEN Betrachtet wird der folgende Quelltext. Er zeigt alle Matchings, die an Position 25 im Beispielmusikwerk gefunden wurden. //für das Matching der Notennamen $matches[1][0]=“EGBD“; $matches[1][1]=25; //für das Matching des Parsons-Codes $matches[1][0]=“SUUU“; $matches[1][1]=25; //für das Matching der diatonischen Kontur $matches[1][0]=“zBBB“; $matches[1][1]=25; //für das Matching der chromatischen Kontur $matches[1][0]=“zDCC“; $matches[1][1]=25; //für das Matching der Notenwerte $matches[1][0]=“FFEF“; $matches[1][1]=25; //für das Matching der Alterationen 112 $matches[1][0]=“ZAZZ“; $matches[1][1]=25; Quelltext 33 - Matchings für die Notenposition 25 Mit allen gefundenen Matchings und deren Positionen kann überprüft werden, ob an dieser Position tatsächlich eine motivthematische Verarbeitung der Notennamenfolge EGBD vorliegt. Dies ist nur gegeben, wenn bestimmte Kombinationen an Parametern ein Matching an derselben Position aufweisen. Die folgende Tabelle zeigt alle Motivverarbeitungsformen und die Parameter, in denen ein Matching notwendig ist, um die jeweilige Motivverarbeitungsform zu erkennen. Ist ein Matching in dem entsprechenden Parameter notwendig, so ist dies in der Tabelle mit „Ja“ verzeichnet. Die Tabelle ist wie eine Art Schablone zu lesen: Jede Motivverarbeitungsform benötigt in unterschiedlichen Parametern ein Matching. Tritt beispielsweise ein Matching bei einer Notenfolge innerhalb der Konturen und des Notenwertes auf, stimmen aber die Noteninformationen bei Oktave, Alteration und Notenname nicht mit dem Pattern überein, so kann es sich nur um eine reale Sequenz handeln. Anhand der Tabelle 36 fällt auf, dass lediglich eine Intervallweitung und eine Intervallengung sich in den benötigten Matchings je Parameter nicht unterscheiden. Wird eine Intervallengung oder Intervallweitung gefunden, so muss manuell unterschieden werden, welche der beiden Motivverarbeitungsformen vorliegen. Die Tabelle 36 ist im Algorithmus hinterlegt. Anhand der Zuordnungen in dieser Tabelle ist zu überprüfen, ob und welche Motivverarbeitungsform vorliegt. Parameter Motivverarbeitungsform Originalsequenz Tonale Sequenz Reale Sequenz Tonale Umkehrung Reale Umkehrung Krebs I Krebs II Spiegelkrebs Intervallweitung Intervallengung Augmentation Diminution *1 *2 *3 *4 *5 Eingabe Eingabe Eingabe Eingabe Eingabe ist ist ist ist ist im im im im im ParsonsCode Diatonische Kontur Chromatische Kontur Notenwert Oktavlage Alteration Notenname Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja (*1 Ja (*1 Ja (*2 Ja (*2 Ja (*2 Nein Nein Ja Ja Ja Nein Ja Nein Ja (*1 Ja (*2 Ja (*2 Nein Nein Nein Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Nein Nein Nein Nein Ja (*3 Ja (*3 Nein Nein Nein Ja Ja Ja Nein Nein Nein Nein Ja (*3 Ja (*3 Nein Nein Nein Ja Ja Ja Nein Nein Nein Nein Ja (*3 Ja (*3 Nein Nein Nein Ja Ja (*1 (*1 (*2 (*2 (*2 Gegensatz Gegensatz Gegensatz Gegensatz Gegensatz zum zum zum zum zum Originalmotiv Originalmotiv Originalmotiv Originalmotiv Originalmotiv (*3 (*3 (*4 (*5 umgekehrt (+-) ein Krebs () der umgekehrt (+-) wurde ein Krebs () im Notenwert verdoppelt im Notenwert halbiert Tabelle 36 - Motivverarbeitungen und die dazu notwendigen Matchings je Parameter im Überblick 113 Für das Beispielmusikwerk aus Abbildung 39 wurden Matchings für den Notennamen, den Parsons-Code, die diatonische Kontur, die chromatische Kontur, die Notenwerte und die Alteration an Position 25 gefunden. Werden diese Matchings anhand der Tabelle überprüft, so kann diesen Matchings die „reale Sequenz“ zugeordnet werden. Dabei ist das Matching für die Notennamen nicht erforderlich, es tritt aber auf, da die reale Sequenz an dieser Position im Gegensatz zum Originalmotiv oktaviert ist. Die in Tabelle 36 abgebildeten Zuordnungen werden im Motivanalysealgorithmus mit einer ifelse-Anweisungsstruktur realisiert. Diese ist in Quelltext 34 dargestellt. Jede if-Anweisung testet, ob die Position, an der ein Matching gefunden wurde, in den Parametern übereinstimmt. In den if-Bedingungen werden die Positionen der Matchings miteinander verglichen. Liegen Matchings in mehreren Parametern vor, so ist an dieser Position die entsprechende Motivverarbeitungsform nach Tabelle 36 vorhanden. //Test, ob Motivverarbeitung ein Originalmotiv oder eine Wiederholung ist if(Position[„Parsons-Code“]==Position[„Notenname“] AND Position[„Parsons-Code“]==Position[„Alteration“] AND Position[„Parsons-Code“]==Position[„Oktave“] AND Position[„Parsons-Code“]==Position[„Notenwert“] AND Position[„Parsons-Code“]==Position[„chromatische-Kontur“] AND Position[„Parsons-Code“]==Position[„diatonische-Kontur“]){ //An dieser Position befindet sich ein Originalmotiv / eine Wiederholung //Test, ob Motivverarbeitung eine tonale Sequenz ist }elseif( Position[„Parsons-Code“]==Position[„Notenwert“] AND Position[„Parsons-Code“]==Position[„diatonische-Kontur“]){ //An dieser Position befindet sich eine tonale Sequenz //Test, ob Motivverarbeitung eine reale Sequenz ist }elseif( Position[„Parsons-Code“]==Position[„Notenwert“] AND Position[„Parsons-Code“]==Position[„chromatische-Kontur“] AND Position[„Parsons-Code“]==Position[„diatonische-Kontur“]){ //An dieser Position befindet sich eine reale Sequenz //Test, ob Motivverarbeitung eine tonale Umkehrung ist }elseif( Position_des_Umgekehrung_Pattern[„Parsons-Code“]== Position[„Notenwert“] AND Position_des_Umgekehrung_Pattern[„Parsons-Code“]== Position_des_Umgekehrung_Pattern[„diatonische-Kontur“]){ //An dieser Position befindet sich eine tonale Umkehrung //Test, ob Motivverarbeitung eine reale Umkehrung ist }elseif( Position_des_Umgekehrung_Pattern[„Parsons-Code“]== Position[„Notenwert“] AND Position_des_Umgekehrung_Pattern[„Parsons-Code“]== Position_des_Umgekehrung_Pattern[„chromatische-Kontur“] AND Position_des_Umgekehrung_Pattern[„Parsons-Code“]== Position_des_Umgekehrung_Pattern[„diatonische-Kontur“]){ //An dieser Position befindet sich eine reale Umkehrung //Test, ob Motivverarbeitung ein Krebs I }elseif( Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebs_Pattern[„Notenname“] AND Position_des_Krebs_Pattern[„Alteration“] AND Position_des_Krebs_Pattern[„Oktave“] AND Position_des_Krebs_Pattern[„Notenwert“] AND Position_des_Krebsumkehrung_Pattern[„chromatische-Kontur“] AND Position_des_Krebsumkehrung_Pattern[„diatonische-Kontur“]){ //An dieser Position befindet sich ein Krebs I //Test, ob Motivverarbeitung ein Krebs II }elseif( Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebs_Pattern[„Notenname“] AND Position_des_Krebs_Pattern[„Alteration“] AND Position_des_Krebs_Pattern[„Oktave“] AND Position[„Notenwert“] AND 114 Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„chromatische-Kontur“] AND Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„diatonische-Kontur“]){ //An dieser Position befindet sich ein Krebs I //Test, ob Motivverarbeitung ein Spiegelkrebs }elseif( Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebs_Pattern [„Notenwert“] AND Position_des_Krebsumkehrung_Pattern[„Parsons-Code“]== Position_des_Krebsumkehrung_Pattern[„diatonische-Kontur“]){ //An dieser Position befindet sich ein Spiegelkrebs //Test, ob Motivverarbeitung eine Intervallweitung ist }elseif( Position[„Parsons-Code“]==Position[„Notenwert“]){ //An dieser Position befindet sich wahrscheinlich eine Intervallweitung oder eine Intervallengung //Test, ob Motivverarbeitung ein Originalmotiv oder eine Wiederholung ist }elseif( Position[„Parsons-Code“]==Position[„Notenname“] AND Position[„Parsons-Code“]==Position[„Alteration“] AND Position[„Parsons-Code“]==Position[„Oktave“] AND Position[„Parsons-Code“]==Position_Augmentation_Pattern[„Notenwert“] AND Position[„Parsons-Code“]==Position[„chromatische-Kontur“] AND Position[„Parsons-Code“]==Position[„diatonische-Kontur“]){ //An dieser Position befindet sich eine Augmentation //Test, ob Motivverarbeitung ein Originalmotiv oder eine Wiederholung ist }elseif(Position[„Parsons-Code“]==Position[„Notenname“] AND Position[„Parsons-Code“]==Position[„Alteration“] AND Position[„Parsons-Code“]==Position[„Oktave“] AND Position[„Parsons-Code“]==Position_Diminution_Pattern[„Notenwert“] AND Position[„Parsons-Code“]==Position[„chromatische-Kontur“] AND Position[„Parsons-Code“]==Position[„diatonische-Kontur“]){ //An dieser Position befindet sich eine Diminution } Quelltext 34 - if-else-Anweisungen zum Finden der jeweiligen Motivverarbeitung Mit den gefundenen Positionen, die ein Matching enthalten, wird jede Bedingung der if-elseAnweisung solange durchlaufen, bis alle Positionen analysiert wurden. Alle Matchings, die eine Motivverarbeitung ergeben, werden auf die folgende Weise ausgegeben: Angabe der Motivverarbeitungsform Angabe der Notennamen der Motivverarbeitung Angabe der Taktnummer Angabe des Systems 115 5 FAZIT UND AUSBLICK Es sollte ein Algorithmus erstellt werden, der die prinzipielle Funktionsweise der automatisierten Motivsuche verdeutlicht. Die erste Version des Motivsuche und Analyseprogramms zeigt, dass die Idee durchaus funktionstüchtig ist. Für den Prototyp mussten einige Bedingungen an das zu analysierende MusicXML-Musikwerk gestellt werden, da musikalische Sonder- und Problemfälle vom Algorithmus nur bedingt berücksichtigt wurden. Testläufe haben aber gezeigt, dass der Algorithmus strukturell einfache Musikwerke korrekt analysiert und entsprechende Motivverarbeitungen findet. Zum Abschluss soll der gesamte Algorithmus im Überblick in Abbildung 47 gezeigt werden. MusicXML Einlesen multidimensionales Werkarray Transformation Finden von Notennamenwiederholung(en) Krebsarray Motivarray temporäres Werkarray Das ausgesuchte Motiv hat die Tonfolge: GBDC. Die Alterationen für diese Notenfolge ist: 1 0 0 0. Der Rhythmus dieser Notenfolge ist 1/8 1/4 1/8 1/4 . Die Oktaven der Noten sind: 4 4 5 5. Dieses Motiv wurde gefunden in: -Takt Nr. 1; System: P1 Eine reale Sequenz G B D C mit dem Rhythmus und der chromatischen Bewegung 4 3 3 -2 ist in folgenden Takten vorhanden: -Takt Nr. 1; System: P1 Jede Noteninformation wird nun durch ein einzelnes Charactersymbol repräsentiert Arrays für Position[] Position_des_Krebs_Pattern[] Position_des_Umgekehrung_Pattern[] Position_des_Krebsumkehrung_Pattern[] Position_Augmentation_Pattern[] Position_Diminution_Pattern[] Eine reale Sequenz G B D C mit dem Rhythmus und der chromatischen Bewegung 4 3 3 -2 ist in folgenden Takten vorhanden: -Takt Nr. 2; System: P2 Eine tonale Sequenz C E G F mit dem Rhythmus und der diatonischen Bewegung 2 2 2 -1 ist in folgenden Takten vorhanden: -Takt Nr. 3; System: P4 EGBDCBDECADEFDCDCBEAZBBCAEGBDCEABEZGGAFCFCFGAZEDADACEGFEAZ SUUUDDDUDDUUUDDUDDUDYSEUDDUUUDUUUDYSEUDDUDUUUYSDDUDUUUDDUY zBBBaaeAbbCAAbaHaaCdYzZAbcBBBaBCAdYzZAbcCcCAAYzacCcBBBaaCY zDCCbaiBdcEBAcbNbaEgYzZAceDCCbDEBgYzZAdeEeECAYzbeEeCDCbaEY FFEFEFFFFDFFFDFFFFDFZDFEDFFEFEDEDFZDFEDDDDEDFZCDDDFFEFEDFZ Abbildung 47 - Der Motivsuche- / Motivanalysealgorithmus im Überblick Nachdem das MusicXML-Dokument eingelesen wurde, wird ein multidimensionales Werkarray aus allen benötigten Noteninformationen erstellt. Anhand der Benutzerauswahl wird eine Notennamenfolge gewählt oder gesucht. Dieses ist der Ausgangspunkt der Analyse. Es werden vom Musikwerk und vom Motiv temporäre Arrays erstellt. Diese Arrays werden so umgewandelt, dass 116 jede darin enthaltene Noteninformation durch ein einzelnes Charactersymbol repräsentiert wird. Alle Noteninformationen eines Patterns werden im Musikwerk gesucht. Die Ausgabe enthält die Motivverarbeitungen und deren Position im Musikwerk. Anhand der Kombinationen der Matchings in den Parametern werden die entsprechenden Motivverarbeitungsformen ausgegeben. Zunächst folgen einige Punkte, für welche Zwecke die Software im jetzigen Stadium genutzt werden kann. 1. Für Komponisten ist das Motivanalyseprogramm interessant, wenn sie Rückschlüsse über ihre eigene Komposition oder auch Kompositionen ihrer musikalischen Vorbilder ziehen möchten. Mitunter werden motivthematische Arbeiten innerhalb des Musikwerkes von ihm angewandt, die durch das bloße Hinsehen nicht gleich erfasst, jedoch durch den Algorithmus gefunden werden. 2. Für Musikwissenschaftler und Musiktheoretiker, Musikpädagogen und -schüler kann das Motivanalysprogramm eine große Hilfe sein, wenn es gilt, Musikwerke melodisch, rhythmisch und auch motivthematisch zu analysieren. Bevor die am Anfang dieser Diplomarbeit erwähnte Idee der „Musikempfehlung“ funktionstüchtig wird, sind noch einige Erweiterungen des Programms nötig. Auch ist es wünschenswert, dass der MusicXML-Standard zusätzlich zur derzeitigen DTD um ein XML-Schema ergänzt wird. „XML Schema ist eine Empfehlung des W3C zum Definieren von Strukturen für XML-Dokumente. Anders als bei den klassischen XML-DTDs wird die Struktur in Form eines XML-Dokuments beschrieben. Darüber hinaus wird eine große Anzahl von Datentypen unterstützt.“ 42 Durch das XML-Schema können Musikwerke schlechter manipuliert werden, da es genauere Untersuchungen durchführt, ob ein MusicXML-Dokument valide ist. Weiterhin würde durch die Ergänzung um ein XML-Schema die Struktur eines MusicXML-Dokuments unabhängig von der Erstellungssoftware dahingehend vereinheitlicht werden, dass Notationsprogramme keinen eigenen XML-Code in MusicXMLDokumente einbauen und somit die Analyse erschweren. Zusätzlich ist es empfehlenswert, die Software einem größeren Publikum zugänglich zu machen. So laden die Benutzer dieser Software unterschiedliche MusicXML-Musikwerke zur Analyse hoch, die mitunter weitere Motivverarbeitungsformen enthalten. Auch diese Motivverarbeitungsformen können dann mathematisiert und in die Software als Update implementiert werden. Zudem können die Softwaretester auf Probleme der Software während der Benutzung hinweisen und aktiv an der Verbesserung der Software teilnehmen. 42 Wikipedia - Die freie Enzyklopädie: "XML Schema". URL: http://de.wikipedia.org/wiki/XML_Schema [Stand: 10. Mai 2009] 117 Wo kann der Motivsuche- und Motivanalysealgorithmus in Zukunft stehen? Werden Motive und deren Motivverarbeitungen sämtlicher bereits analysierter Musikwerke innerhalb einer Datenbank katalogisiert, bildet dies eine ideale Wissensbasis, um musikalische Gemeinsamkeiten zwischen Musikwerken zu finden. Eine erste Tabelle der Datenbank, die alle Musikwerke und deren Motive und Motivverarbeitungen enthält, kann zum einen die Kopfdaten eines Musikwerkes enthalten wie etwa Komponist, Entstehungsjahr, Arrangeur, Interpret und Stil. Zum anderen enthält sie sämtliche Motive und Motivverarbeitungen in Form der Noteninformationen. Weiterhin gibt es eine zweite Tabelle, die Verbindungen zwischen unterschiedlichen Musikwerken anhand von Gemeinsamkeiten zwischen Motiven bzw. Motivverarbeitungen herstellt. Die folgende Abbildung 48 zeigt hierzu ein Beispiel. Die erste Tabelle enthält das mit der Musikwerk-ID 1 versehene erste Musikwerk, welches vier Motive (Motiv-ID) oder auch Motivverarbeitungen besitzt. Hierbei ist Motiv und Motivverarbeitung als Begriff zusammengefasst, da jede Motivverarbeitung auch wieder ein neues Motiv ergibt. Das Musikwerk mit der MusikwerkID 2 enthält ebenfalls 4 Motive. Die Tabelle 2 schafft nun Verbindungen zwischen unterschiedlichen Musikwerken, die gleiche oder ähnliche Motive besitzen. So sind beispielsweise zwischen Musikwerk-ID 1 und 2 zwei Gemeinsamkeiten zu sehen. Das Musikwerk mit der ID 1 besitzt das Motiv mit der Motiv-ID 1, welches gleich oder ähnlich zum Motiv mit der Motiv-ID 2 des Musikwerks mit der Musikwerk-ID 2 ist. Tabelle 1 Tabelle 2 Musikwerk-ID Motiv-ID Notenname ... 1 1 1 1 2 2 2 2 3 ... 1 2 3 4 1 2 3 4 1 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... Chromatische Kontur ... ... ... ... ... ... ... ... ... ... ... MusikwerkID 1 1 1 1 1 ... MusikwerkID 2 2 2 80474 474 ... Motiv-ID 1 1 2 1 5 ... Motiv-ID 2 2 4 6 1 ... Abbildung 48 - Gemeinsamkeiten zwischen Motivverarbeitungen in unterschiedlichen Musikwerken Zur Darstellung von Ähnlichkeiten werden die zu vergleichenden Musikwerke als „Knoten“ bezeichnet. Stimmen zwei Motive aus den beiden Musikwerken in einem Parameter überein, so sind beide Musikwerke mit einer Kante verbunden. Je mehr Parameter gleichzeitig in zwei Musikwerken identische Noteninformationen aufweisen, desto mehr Kanten haben die beiden Musikwerke gemeinsam. Mit jeder neuen Kante nimmt die Ähnlichkeit zwischen den Musikwerken für das betrachtete Motiv zu. Stimmen in den Werken alle Parameter für ein Motiv überein, so ist das betrachtete Motiv identisch. Jede Kante erhält eine eindeutige Benennung. Die Benennung der Kante muss folgende Daten beinhalten: 118 - die Bezeichnung des übereinstimmenden Parameters, - die Motiv-IDs aus allen betrachteten Musikwerken sowie - die Angabe der Notenposition, an der die Übereinstimmung im jeweiligen Musikwerk zu finden ist. Die folgende Abbildung zeigt vereinfacht die beschriebene Idee. ID 4471 Parsons Code Notenname Diaton. Kontur Alteration Chromat. Kontur Oktave ID 1281 Notenwert Parsons Code Notenname Diaton. Kontur Alteration Chromat. Kontur Oktave ID4471_Motiv2_Notenposition141-Notenwert-ID1281_Motiv15_ Notenposition 74 Notenwert ID 953 Parsons Code Notenname Diaton. Kontur Alteration Chromat. Kontur Oktave Notenwert Abbildung 49 - Kanten zwischen Musikwerken markieren Ähnlichkeiten der Motive Durch das Schaffen von Kanten entsteht ein Netzwerk zwischen allen analysierten Musikwerken. Dieses Netzwerk kann beispielsweise zur Plagiatsuche verwendet werden. Da die Motivanalysesoftware frei von subjektiven Urteilen auf rein mathematischer Basis Beziehungen zwischen Musikwerken erkennt, kann der Algorithmus gerade im Urheberstreit eine große Hilfe sein. Ein solches Netzwerk kann aber auch an einen Onlineshop angebunden werden, welcher keine subjektiven Kaufempfehlungen wie beispielsweise Pandora anbietet, sondern objektive Kaufempfehlungen anhand von Motivgemeinsamkeiten und -ähnlichkeiten gibt. Abbildung 50 zeigt ein solches Netzwerk, wie es dem Shop zu Grunde liegen könnte. Je mehr Parameter gleichzeitig übereinstimmen, als desto dicker wird die Kante dargestellt. 119 Abbildung 50 - Je ähnlicher die Musikwerke sind, desto dicker ist deren Kante Die folgende Abbildung zeigt eine Möglichkeit, wie der Motivanalysealgorithmus an eine Shoppingseite angebunden sein kann. Dabei wird die Ähnlichkeit der Musikwerke zueinander verdeutlicht anhand von Prozentangaben, welche sich aus der Stärke der Kanten errechnen lassen. 120 Abbildung 51 - Shopanbindung an den Motivanalysealgorithmus In Verbindung mit einer Datenbankstruktur, in der Musikwerke anhand ihrer Ähnlichkeiten zueinander als Netzwerk abgespeichert werden, kann der Motivanalysealgorithmus einen entscheidenden Beitrag dazu leisten, CD-Verkäufe anhand von Kaufempfehlungen auf rein objektiver Basis zu steigern. 121 ANHANG 1 NOTEN DER MUSIKBEISPIELE 1.1 122 123 1.2 124 1.3 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 2 QUELLENVERZEICHNIS 2.1 LITERATUR Amon, R. (2005): Motiv – Motivisch-thematische Arbeit, in: Lexikon der Harmonielehre. WienMünchen: Doblinger Metzler Verlag, Dürr, W. (2005): Scarlatti, Pietro Alessandro Gaspare, in: Musiklexikon. Stuttgart, Weimar: Verlag J.B. Metzler. Eckstein R., Eckstein S. (2004): XML Path Language (XPath), in: XML und Datenmodellierung. Heidelberg: dpunkt Verlag GmbH. Erpf, H. (1967): Formenlehre heute – Form und Zeitablauf, in: Form und Struktur in der Musik. Mainz: B. Schott’s Söhne. Ferber, R. (2003): Explizit strukturierte Elemente - XML, in: Information Retrieval. Heidelberg: dpunkt Verlag. Flückiger, B. (2007): Leitmotive, in: Sound Design – Die virtuelle Klangwelt des Films. Marburg: Schüren Verlag. Holst, I. (1992): Die Anfänge der Kontrapunktik, in: Das ABC der Musik. Stuttgart: Phillip Reclam jun. GmbH. Lemacher, H., Schroeder, H. (1977): Der zweistimmige Satz, in: Lehrbuch des Kontrapunktes. Mainz: Schott Musik International. Michels, U. (2005): Musiklehre/Form II, in: dtv-Atlas Musik, Band 1, Systematischer Teil Musikgeschichte von den Anfängen bis zur Renaissance. München: Deutscher Taschenbuch Verlag GmbH & Co. KG. De la Motte-Haber, H., Rötter, G. (2005): Prinzipien der Rhythmuswahrnehmung, in: Musikpsychologie. Laaber: Laaber Verlag. Parsons, D. (2002): The Directory of Tunes and Musical Themes. Lübeck: Bohmeier Verlag. Spehr, G. (2007): Audio-Branding – alles neu?, in: Audio-Branding. München: Verlag Reinhard Fischer. 142 Wiehmayer, T. (1927): Grundfragen der metrischen Analyse, in: Musikalische Formenlehre in Analysen. Magdeburg: Heinrichshofen’s Verlag. Ziegenrücker, W. (1997): Das Motiv, in: ABC Musik – Allgemeine Musiklehre. Leipzig: Deutscher Verlag für Musik, Wiesbaden: Breitkopf & Härtel. 2.2 INTERNETQUELLEN Pandora Radio - Listen to Free Internet Radio, Find New Music: „The Music Genome Project“. URL: http://www.pandora.com/mgp.shtml [Stand: 8. März 2009] Sibelius: „Was ist neu“. URL: http://www.sibelius.com/products/sibelius/ [Stand: 1. Februar 2009] Klemm Music & Makemusic: „Notensatz und Notenschreibprogramme Finale“. URL: http://www.klemm-music.de/coda/ [Stand: 1. Februar 2009] MIDI Manufacturers Association: „General MIDI Level 1 Sound Set“. URL: http://www.midi.org/techspecs/gm1sound.php [Stand: 1. April 2009] MIDI Manufacturers Association Incorporated: „Tech Specs & Info“. URL: http://www.midi.org/techspecs/ [Stand: 1. Februar 2009] PHP Hypertext Preprocessor: „PHP: preg_match_all - Manual“. URL: http://de.php.net/manual/de/function.preg-match-all.php [Stand: 4. April 2009] PHP Hypertext Preprocessor: „PHP: SimpleXMLElement->xpath - Manual“. URL: http://de2.php.net/manual/de/function.simplexml-element-xpath.php [Stand: 11. Februar 2009] Recordare: Internet Music Publishing and Software: „MusicXML 1.0 Alphabetical Index“. URL: http://www.recordare.com/dtds/1.0/musicxml-index.html [Stand: 2. Februar 2009] Recordare: Internet Music Publishing and Software: „MusicXML 1.0 Note DTD Module“. URL: http://www.recordare.com/dtds/1.0/note.html [Stand: 1. Februar 2009] Wikipedia - Die freie Enzyklopädie: „XML Schema“. URL: http://de.wikipedia.org/wiki/XML_Schema [Stand: 10. Mai 2009] 143 2.3 ABBILDUNGEN Arnold, D. (2006): Solange, in: Casino Royale. Milwaukee: Hal Leonard. United Lion Music, Inc. and Colpix Music Inc., Sony Music Publishing LLC. Scarlatti, A. (1986): Exsultate Deo, in: Unser Kirchenchor Buch. Wien, München: Verlag L. Doblinger. Sting (1994): When we dance, in: The best of Sting - Fields of gold. Milwaukee: Hal Leonard. Magnetic Publishing Ltd., EMI Blackwood Music Inc. Alle weiteren Abbildungen, Formeln, Quelltexte und Tabellen sind selbsterstellt. 144