
Dies ist ein weiterer Artikel in einer Reihe von Schulungsartikeln für Entwickler auf dem Gebiet der künstlichen Intelligenz. In früheren Artikeln haben wir die Sammlung und Aufbereitung von Daten mit Bildern untersucht. In diesem Artikel werden wir die Diskussion über die Sammlung und Untersuchung von Musikdaten fortsetzen.
Der Zweck dieses Projekts ist:
- Erstellen Sie eine Anwendung, die eine Reihe von Bildern als Eingabe akzeptiert.
- Hervorheben der emotionalen Farbgebung von Bildern.
- Empfangen der Ausgabe eines Musikstücks, das die entsprechende Emotion widerspiegelt.
In diesem Projekt wird Musik generiert, die mit Hilfe von Emotionen moduliert wird, ein Algorithmus (Musikalische Transformation basierend auf Emotionen), der eine Änderung der Grundmelodie entsprechend einer bestimmten Emotion und die anschließende Harmonisierung und Vervollständigung der Melodie mithilfe des Deep-Learning-Modells durchführt. Um diese Aufgabe abzuschließen, sind die folgenden Musikdatensätze erforderlich:
- Ein Datensatz zum Erlernen des Melodienvervollständigungsalgorithmus (Bach-Chöre).
- Eine Reihe beliebter Musikstücke, die als Vorlagen für die Modulation von Emotionen dienen.
Sammlung und Untersuchung eines Musikdatensatzes
Bach Chorales - Music21 Projekt
Music21 ist ein Python-basiertes Toolkit für die Musikwissenschaft am Computer. Es enthält eine vollständige Sammlung von Bachs Chören als Teil seiner gesammelten Werke. Daher ist die Datenerfassung sehr einfach - Sie müssen nur das
music21- Paket installieren (Handbücher sind für macOS *, Windows * und Linux * verfügbar).
Nach der Installation können Sie mit dem folgenden Code auf die Bach-Chöre zugreifen:
from music21 import corpus for score in corpus.chorales.Iterator(numberingSystem='bwv', returnType='stream'): pass
Iteration über alle Bach-ChöreAlternativ können Sie den folgenden Code verwenden: Er gibt eine Liste der Dateinamen für alle Bach-Chöre zurück, die mit der Parsing-Funktion weiterverarbeitet werden können:
from music21 import corpus chorales = corpus.getBachChorales() score = corpus.parse(chorales[0])
Eine Liste aller Bach-Chöre abrufenDatenexploration
Nach Abschluss der Datenerfassung (in diesem Fall nach dem Zugriff darauf) besteht der nächste Schritt darin, die Anzeichen dieser Daten zu überprüfen und zu untersuchen.
Der folgende Code zeigt die Textdarstellung einer Musikdatei an:
>>> from music21 import corpus
>>> chorales = corpus.getBachChorales()
>>> score = corpus.parse(chorales[0])
>>> score.show('text')
{0.0} <music21.text.TextBox "BWV 1.6 W...">
{0.0} <music21.text.TextBox "Harmonized...">
{0.0} <music21.text.TextBox "PDF 2004 ...">
{0.0} <music21.metadata.Metadata object at 0x117b78f60>
{0.0} <music21.stream.Part Horn 2>
{0.0} <music21.instrument.Instrument P1: Horn 2: Instrument 7>
{0.0} <music21.stream.Measure 0 offset=0.0>
{0.0} <music21.layout.PageLayout>
{0.0} <music21.clef.TrebleClef>
{0.0} <music21.key.Key of F major>
{0.0} <music21.meter.TimeSignature 4/4>
{0.0} <music21.note.Note F>
{1.0} <music21.stream.Measure 1 offset=1.0>
{0.0} <music21.note.Note G>
{0.5} <music21.note.Note C>
{1.0} <music21.note.Note F>
{1.5} <music21.note.Note F>
{2.0} <music21.note.Note A>
{2.5} <music21.note.Note F>
{3.0} <music21.note.Note A>
{3.5} <music21.note.Note C>
{5.0} <music21.stream.Measure 2 offset=5.0>
{0.0} <music21.note.Note F>
{0.25} <music21.note.Note B->
{0.5} <music21.note.Note A>
{0.75} <music21.note.Note G>
{1.0} <music21.note.Note F>
{1.5} <music21.note.Note G>
{2.0} <music21.note.Note A>
{3.0} <music21.note.Note A>
{9.0} <music21.stream.Measure 3 offset=9.0>
{0.0} <music21.note.Note F>
{0.5} <music21.note.Note G>
.
.
.
>>> print(score)
<music21.stream.Score 0x10bf4d828>
Textdarstellung des ChorsOben sehen Sie die Textdarstellung des
Chors als Objekt
music21.stream .Score. Es ist interessant zu erfahren, wie music21 Musik im Code darstellt, aber es ist nicht sehr nützlich, um wichtige Datenattribute zu untersuchen. Daher benötigen wir eine Software, die die Punktzahl anzeigen kann.
Wie bereits im Artikel
Einrichten des Modells und der Hyperparameter zum Erkennen von Emotionen in Bildern erwähnt , wird die Partitur in music21 in MusicXML * -Dateien (mit den Erweiterungen .xml oder .mxl) gespeichert. Um diese Dateien in Notenschrift anzuzeigen, wird die kostenlose Anwendung Finale NotePad * 2 verwendet (Testversion des professionellen Pakets Finale * für die Arbeit mit Notenschrift).
Finale NotePad ist für Mac und Windows verfügbar. Führen Sie nach dem Herunterladen von Finale Notepad den folgenden Code aus, um music21 für die Verwendung mit Finale Notepad zu konfigurieren:
>>> import music21
>>> music21.configure.run()
Jetzt können wir den obigen Code ausführen, aber das Fragment
score.show () anstelle von
score.show ('text') verwenden . In diesem Fall wird die MusicXML-Datei in der Finale-Anwendung geöffnet, die ungefähr so aussieht:
Bachs erste Seite in NotenschriftDieses Format bietet eine klarere visuelle Darstellung für Chöre. Bei der Prüfung mehrerer Chöre stellen wir sicher, dass die Daten unseren Erwartungen entsprechen: Dies sind kurze Musikstücke mit mindestens vier Stimmen (Sopran, Bratsche, Tenor und Bass), die durch Bauernhöfe in separate Phrasen unterteilt werden.
In der Regel werden bestimmte deskriptive Statistiken im Rahmen des Datenstudienverfahrens berechnet. In diesem Fall können wir bestimmen, wie oft jeder Schlüssel in den gesammelten Werken erscheint. Das folgende Beispiel zeigt einen Code, mit dem Sie die Nutzungsbewertung jedes Schlüssels in einem Datensatz berechnen und visualisieren können.
from music21 import* import matplotlib.pyplot as plt chorales = corpus.getBachChorales() dict = {} for chorale in chorales: score = corpus.parse(chorale) key = score.analyze('key').tonicPitchNameWithCase dict[key] = dict[key] + 1 if key in dict.keys() else 1 ind = [i for i in range(len(dict))] fig, ax = plt.subplots() ax.bar(ind, dict.values()) ax.set_title('Frequency of Each Key') ax.set_ylabel('Frequency') plt.xticks(ind, dict.keys(), rotation='vertical') plt.show()
Häufigkeit der Verwendung jedes Schlüssels in gesammelten Werken. Kleinere Tasten werden durch Kleinbuchstaben und Haupttasten durch Kleinbuchstaben dargestellt. Wohnungen sind mit einem "-" gekennzeichnetNachfolgend finden Sie einige Statistiken zu den gesammelten Werken.
Die Verteilung der verwendeten Schlüssel in einer Reihe von Kompositionen
Position der Schuldverschreibungen, berechnet als Versatz vom Beginn der Kennzahl in ViertelnotenBeschreibende Statistiken, die für die Berechnung von Interesse sind, variieren für jedes Projekt. In den meisten Fällen können Sie jedoch herausfinden, mit welcher Art von Daten Sie arbeiten, und sogar bestimmte Aktionen während der Datenvorverarbeitung verwalten. Diese Statistiken können auch als Ausgangspunkt für die Prüfung der Ergebnisse der Datenvorverarbeitung dienen.
Musikalische Transformation - Theoretische Information
Es gibt zwei Hauptausdrucksträger in der Musik - Tonhöhe und Rhythmus. Wir verwenden diese Ausdrucksmedien als Parameter, um unsere Melodie in der gewählten Stimmung neu zu schreiben.
In der Musiktheorie ist das Verhältnis der Höhen zwischen den Noten impliziert, wenn es um die Tonhöhe einer Melodie geht. Ein Musiknotensystem, das auf einer Folge von Klängen einer bestimmten Tonhöhe basiert, wird als Skala bezeichnet. Die Intervalle oder das Maß der Breite jedes Schritts der Sequenz können sich voneinander unterscheiden. Ein solcher Unterschied oder seine Abwesenheit schafft eine Beziehung zwischen Tönen und melodischen Tendenzen, in denen stabile Kombinationen und Gravitationen einen Ausdruck der Stimmung erzeugen. In der westlichen Musiktradition wird bei einer einfachen diatonischen Tonleiter die Position der Note relativ zur ersten Note der Tonleiter als
Stufe der Tonleiter bezeichnet (I-II-III-IV-V-VI-VII). In Übereinstimmung mit stabilen Kombinationen und Gravitationen liefert die Skala der Skala einen Musikton, der seine Funktion im System erfüllt. Dies macht die Vorstellung einer Skalenstufe sehr nützlich, um ein einfaches melodisches Muster zu analysieren und es mit der Möglichkeit zu codieren, unterschiedliche Werte zuzuweisen.
Auf der ersten Ebene müssen wir die Skalen auswählen, die aus künstlerischer Sicht geeignet sind, um eine bestimmte Stimmung zu erzeugen. Wenn wir also die Stimmung der Melodie ändern müssen, sollten wir ihre Funktionsstruktur anhand des beschriebenen Begriffs der Skala untersuchen und dann der vorhandenen Vorlage aus den Schritten der Skala neue Werte zuweisen. Wie die Karte enthält auch diese Vorlage Informationen zu den Richtungen und Perioden in der Melodie.
Für jede spezifische Stimmung verwenden wir einige zusätzliche Parameter, um unsere neuen Melodien ausdrucksvoller, harmonischer und ausdrucksvoller zu machen.
Rhythmus ist eine Möglichkeit, Klänge rechtzeitig zu organisieren. Es enthält Informationen wie: die Reihenfolge des Auftretens von Tönen in der Melodie, ihre relative Länge, Pausen zwischen ihnen und verschiedene Akzente. Somit werden Zeiträume geschaffen, um die musikalische Größe zu strukturieren. Wenn wir das ursprüngliche melodische Muster beibehalten müssen, sollten wir seine rhythmische Struktur beibehalten. Um dieses Ziel zu erreichen, müssen nur einige Rhythmusparameter geändert werden - die Länge der Noten und Pausen - und dies sollte aus künstlerischer Sicht ausreichen. Um unsere modifizierte Melodie ausdrucksvoller zu machen, können wir einige zusätzliche Methoden anwenden, um ihre Stimmung zu betonen.
Zum Beispiel kann ANGST mit einer Moll-Taste und einem energischeren Rhythmus ausgedrückt werden. Die Vorlage für unsere ursprüngliche Skala lautet wie folgt: VV-VI-VI-VII VV-VI-V-II-I VVV (Übergang eine Oktave höher) -III-I-VII-VI IV-IV-III-I-II-I .
QuellvorlageDie Originalmelodie ist in einer Dur-Tonart geschrieben, die sich von einer Moll-Tonart in drei Noten unterscheidet - in einer Dur-Tonart der Stufen III, VI und VII sind Dur (ein Halbton oben) und in einer Moll-Tonart - Moll (ein Halbton unten). Wenn wir also die verwendete Tonalität ändern müssen, müssen wir nur die höheren Schritte durch die niedrigeren ersetzen (oder umgekehrt). Um jedoch einen noch deutlicheren Effekt der Angst zu erzeugen, ist es notwendig, das VII-Stadium eines großen (erhöhten) zu verlassen - dies erhöht die Instabilität dieses Tons und betont unsere Skala auf besondere Weise.
Um den Rhythmus energetischer zu gestalten, können wir eine Synkope oder eine synkopische Unterbrechung der regulären Rhythmusbewegung hinzufügen, indem wir die Position einiger Noten ändern. In diesem Fall werden wir einige ähnliche Noten einen Schlag vorwärts bewegen.
BekehrungsangstTraurigkeit kann auch mit einer einfachen Moll-Tonart ausgedrückt werden, aber ihr Rhythmus sollte ruhig sein. Also ersetzen wir die Hauptschritte durch Nebenschritte, einschließlich des VII-Schritts. Um den Rhythmus ruhiger zu machen, müssen Sie die Pausen ausfüllen, indem Sie die Länge der Noten vor ihnen erhöhen.
Konvertierung SADUm Segen auszudrücken, sollten wir entscheidende und strenge Intonationen vermeiden - dies wird das Prinzip der entsprechenden Transformation sein. Wie Sie sehen können, haben die Schritte der Skala entsprechend den Unterschieden in der Reihenfolge der verwendeten Töne unterschiedliche Bedeutungen und den Abstand vom ersten (I) Schritt. Somit entsteht ihre Bedeutung im Gesamtbild. Daher ist die Bewegung von der IV-Stufe zur I-Stufe aufgrund ihrer Funktion sehr einfach. Die Intonation beim Übergang von der V-Stufe zur I-Stufe klingt ebenfalls sehr einfach. Wir werden diese beiden Intonationen vermeiden, um einen Eindruck von Raum und Unsicherheit zu erzeugen.
Daher werden wir in jedem Element der Vorlage, in dem Stufe I Stufe V oder Stufe IV Stufe IV folgt, und auch in umgekehrter Reihenfolge dieser Schritte eine dieser Noten (oder beide Noten) durch die ihnen am nächsten liegenden Schritte ersetzen. Sie können den Rhythmus ähnlich wie bei GRUSH ändern, indem Sie einfach das Tempo verringern.
BLESS umwandelnENTSCHEIDUNG ist mit kraftvoller Bewegung verbunden. Der einfachste Weg, dies zu zeigen, besteht darin, den Rhythmus auf ähnliche Weise wie für den ANXIETY-Effekt zu ändern. Es ist auch notwendig, die Dauer aller Noten mit Ausnahme jeder letzten Note jeder Periode, VV-VI-VI-VII, VV-VI-V-II-I, zu verkürzen.
Transformation ENTSCHEIDUNGDie Haupttaste an sich klingt positiv und freudig. Um jedoch GLÜCK / FREUDE hervorzuheben und auszudrücken, verwenden wir die Haupt-Pentatonik. Es besteht aus denselben Schritten, mit Ausnahme von zwei davon - dem vierten und siebten, I-II-III-V-VI.
Daher ersetzen wir diese beiden Schritte jedes Mal, wenn wir sie in unserer Vorlage finden, durch die Schritte, die ihnen am nächsten liegen. Um die Einfachheit unserer Tonalität hervorzuheben, verwenden wir ein absteigendes melodisches Fragment, das aus fünf oder mehr Noten besteht, als schrittweise Demonstration unserer Skala.
FREUDE konvertierenRuhe / Gelassenheit kann nicht nur durch Ändern der Tonalität ausgedrückt werden, sondern erfordert auch die Transformation der melodischen Bewegung. Dazu müssen Sie die Quellvorlage analysieren und ähnliche Segmente darin auswählen. Die erste Note jedes Segments bestimmt den harmonischen Kontext der gesamten Phrase, daher sind diese Noten für uns von größtem Wert:
V -
V - VI-VI-VII-VII
V- V-VI-V-II-I
V- VV-III-I-VII-VI IV-IV-III-I-II-I.
Für das erste Segment sollten nur die folgenden Schritte verwendet werden: IV-VI-VII; für das zweite: V-VII-II-I; für den dritten: VI-VII-III-II; für den vierten: VII-IV-I-VII.
Diese möglichen Schritte sind eigentlich eine andere Art von Musikstruktur, Akkorde. Wir können sie jedoch weiterhin als System zum Konvertieren von Melodien verwenden. Die Schritte der Skala können durch die Schritte ersetzt werden, die ihnen aus den angegebenen Akkordmustern am nächsten liegen. Wenn das gesamte Segment mit einem Ton beginnt, der niedriger als das Original ist, müssen alle darin enthaltenen Schritte durch die unteren Schritte ersetzt werden, die in der angegebenen Vorlage verfügbar sind. Um einen Verzögerungseffekt zu erzielen, ist es auch erforderlich, die Dauer jeder Note in Achtelnoten zu unterteilen und die Geschwindigkeit dieser neuen Achtelnoten schrittweise zu verringern.
Conversion Tranquility / TranquilityUm GRATITUDE hervorzuheben, muss die stilistische Darstellung im Rhythmus verwendet werden, um den Arpeggio-Effekt zu erzielen: Wir kehren zur ersten Note am Ende jedes Segments (Phrase) zurück. Es ist notwendig, die Dauer jeder letzten Note in einem Segment zu halbieren und die erste Note dieses Segments dort zu platzieren.
Conversion GRATITUDEPraktischer Teil
Python- und music21-Toolkit
Das Transformationsskript wurde mit der Python-Sprache und dem music21-Toolkit implementiert.
Music21 ist eine sehr vielseitige und hochrangige Klasse zum Bearbeiten von Musikkonzepten wie Noten, Größe, Akkord, Tonalität usw. Sie ermöglicht es, Operationen direkt im Themenbereich auszuführen, im Gegensatz zu Manipulationen auf niedriger Ebene mit Rohdaten aus einer Datei Digital Music Instrument Interface (MIDI). Die direkte Arbeit mit MIDI-Dateien in music21 ist jedoch nicht immer bequem, insbesondere wenn es um die Visualisierung der Partitur geht. Zur Visualisierung und Implementierung des Algorithmus besteht daher eine bequemere Möglichkeit darin, die Quell-MIDI-Dateien in das musicXML-Format zu konvertieren. Darüber hinaus ist das musicXML-Format das Eingabeformat für BachBot, das den nächsten Schritt in unserer Verarbeitungssequenz darstellt.
Die Konvertierung kann mit Musescore erfolgen:
So erhalten Sie die Ausgabe der musicXML-Datei:
musescore input.mid -o output.xml
So erhalten Sie die Ausgabe einer MIDI-Datei:
musescore input.mid -o output.mid
Jupyter
Das music21 Toolkit ist gut in die Jupyter App integriert. Darüber hinaus können Sie durch die Integration in Musescore die Partitur direkt im Jupyter-Notizbuchdokument anzeigen und die Ergebnisse während der Entwicklung und des Experimentierens über den integrierten Player anhören.
Jupyter-Notizbuchdokument mit Code, Punktzahl und SpielerDie Funktion Score Show ist besonders nützlich für die Teamarbeit eines Programmierers und eines Musiktheoretikers. Die Kombination aus Jupyters interaktivem Charakter, musikspezifischem Bereich21 und der Einfachheit von Python macht diesen Workflow für diese Art der interdisziplinären Forschung besonders vielversprechend.
Implementierung
Das Transformationsskript wurde als Python-Modul implementiert, sodass ein direkter Aufruf möglich ist:
python3 emotransform.py --emotion JOY input.mid
Oder Sie können es über ein externes Skript (oder Jupyter) aufrufen:
from emotransform import transform transform('input.mid','JOY')
In beiden Fällen ist das Ergebnis der Arbeit eine Datei, die mit Hilfe einer bestimmten Emotion moduliert wird.
Die Transformationen, die mit Änderungen der Musikschritte verbunden sind - ANGST, TRAURIGKEIT, SEGNUNG und FREUDE - basieren auf der Verwendung der Funktion music21.Note.transpose in Kombination mit einer Analyse der aktuellen und erforderlichen Position der Musikschritte. Hier verwenden wir das Modul music21.scale und seine Funktionen, um aus jedem Tonikum die erforderliche Skala zu erstellen. Um das Tonikum einer bestimmten Melodie zu erhalten, können Sie
die Analysefunktion ('key') des music21.Stream7-Moduls verwenden.
Für phrasenbasierte Konvertierungen - ENTSCHEIDUNG, DANKBARKEIT, Ruhe / Beschaulichkeit - sind zusätzliche Untersuchungen erforderlich. Diese Studie wird es uns ermöglichen, den Anfang und das Ende von Musikphrasen genau zu erkennen.
Fazit
In diesem Artikel haben wir die Hauptidee vorgestellt, die der musikalischen Transformation auf der Grundlage von Emotionen zugrunde liegt - das Ändern der Position einer einzelnen Note in der Tonleiter relativ zum Tonikum (musikalischer Schritt), dem Tempo des Stücks sowie der musikalischen Phrase. Diese Idee wurde als Skript in Python implementiert. Die Umsetzung theoretischer Ideen in der realen Welt ist jedoch nicht immer einfach. Daher stießen wir auf einige Schwierigkeiten und identifizierten mögliche Richtungen für die zukünftige Forschung. Diese Studie befasst sich hauptsächlich mit der Erkennung musikalischer Phrasen und ihrer Transformationen. Die richtige Wahl der Instrumente (Musik21) und die Forschung auf dem Gebiet der Musikinformation sind Schlüsselfaktoren für die Lösung solcher Probleme.
Die auf Emotionen basierende musikalische Transformation stellt die erste Stufe unserer Sequenz der Verarbeitung von Musikdaten dar. Die nächste Stufe ist die Übermittlung der konvertierten und vorbereiteten Melodie an den Eingang von BachBot.