AI, praktischer Kurs. Emotionsbasierte musikalische Transformation

Ursprünglicher Autor: Intel AI Academy
  • Übersetzung


Dies ist ein weiterer Artikel in einer Reihe von Bildungsartikeln für Entwickler auf dem Gebiet der künstlichen Intelligenz. In früheren Artikeln haben wir die Sammlung und Aufbereitung von Daten mit Bildern überprüft. In diesem Artikel werden wir weiterhin die Sammlung und das Studium von Musikdaten diskutieren.

Das Ziel dieses Projekts ist:

  • Erstellen einer Anwendung, die einen Satz von Bildern als Eingabe akzeptiert.
  • Hervorhebung der emotionalen Farbgebung von Bildern.
  • Die Ausgabe eines Musikstücks erhalten, das die entsprechende Emotion widerspiegelt.


Dieses Projekt verwendet einen Algorithmus (musikalische Transformation basierend auf Emotionen), um mit Emotionen modulierte Musik zu generieren, die die Grundmelodie entsprechend einer bestimmten Emotion ändert und dann die Melodie unter Verwendung eines tiefen Lernmodells harmonisiert und vervollständigt. Um diese Aufgabe abzuschließen, sind die folgenden Musikdatensätze erforderlich:
  • Ein Datensatz zum Erlernen des Melodieabschlussalgorithmus (Bach Chorales).
  • Eine Reihe populärer Melodien, die als Vorlagen zum Modulieren von Emotionen dienen.

Musikdatensatz sammeln und studieren


Bach Chorales - Projekt Music21


Music21 ist ein auf Python basierendes Toolkit für computergestützte Musikwissenschaft. Es enthält die gesamte Sammlung von Bach-Chören als Teil seiner gesammelten Werke. Daher ist das Datenerfassungsverfahren sehr einfach - Sie müssen lediglich das music21- Paket installieren (Handbücher für macOS *, Windows * und Linux * sind verfügbar).
Nach der Installation können Sie mit dem folgenden Code auf die Bach-Choräle zugreifen:

from music21 import corpus
for score in corpus.chorales.Iterator(numberingSystem='bwv', returnType='stream'):
    pass# do stuff with scores here

Iteration über alle Bach-Choräle

Alternativ können Sie folgenden Code verwenden: Es gibt eine Liste der Dateinamen für alle Bach-Chorale zurück, die mit der Parsing-Funktion weiterverarbeitet werden können:

from music21 import corpus
chorales = corpus.getBachChorales()
score  = corpus.parse(chorales[0])
# do stuff with score

Eine Liste aller Bachchöre erhalten

Überprüfen Sie die Daten


Nachdem die Datenerfassung abgeschlossen ist (in diesem Fall nach dem Zugriff), besteht der nächste Schritt darin, die Eigenschaften dieser Daten zu prüfen und zu untersuchen.

Der folgende Code zeigt eine Textdarstellung einer Musikdatei: Textdarstellung Choral oben zeigt im Choral die Textdarstellung eines Objekts angezeigt music21.stream .Score. Es ist interessant zu erfahren, wie das music21-Projekt Musik im Code darstellt, aber aus Sicht der Untersuchung wichtiger Datenmerkmale nicht sehr nützlich. Daher benötigen wir eine Software, die die Partitur anzeigen kann. Wie zuvor im Artikel Konfigurieren eines Modells und von Hyperparametern zur Erkennung von Emotionen in Bildern angegeben

>>> 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>





, Die Partitur in music21 wird in MusicXML * -Dateien (mit den Erweiterungen .xml oder .mxl) gespeichert. Um diese Dateien in Musiknotation anzuzeigen, wird die kostenlose Anwendung Finale NotePad * 2 (Testversion des Professional-Pakets Finale * für die Arbeit mit Musiknotation) verwendet. Die Finale NotePad-Anwendung 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 Arbeit mit Finale Notepad zu konfigurieren: Jetzt können wir den obigen Code ausführen, verwenden jedoch das score.show () - Fragment anstelle von score.show ('text') . In diesem Fall wird die MusicXML-Datei in der Finale-Anwendung geöffnet, die in etwa wie folgt aussieht: Die erste Seite des Bach Choral in musikalischer Notation

>>> import music21
>>> music21.configure.run()







Dieses Format bietet eine klarere visuelle Darstellung für Choräle. Bei der Untersuchung mehrerer Choräle sind wir überzeugt, dass die Daten unseren Erwartungen entsprechen: Es handelt sich um kurze Musikstücke mit mindestens vier Teilen (Sopran, Alt, Tenor und Bass), die mittels Fermat in einzelne Sätze unterteilt sind.

Normalerweise werden im Rahmen des Data Mining-Verfahrens bestimmte deskriptive Statistiken berechnet. In diesem Fall können wir bestimmen, wie oft jede Tonalität in den gesammelten Werken auftritt. Im Folgenden finden Sie ein Codebeispiel, 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] + 1if key in dict.keys() else1
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()


Nutzungshäufigkeit jedes Schlüssels in den gesammelten Werken. Nebenschlüssel werden durch Kleinbuchstaben und Hauptschlüssel durch Kleinbuchstaben dargestellt. Elemente werden mit dem Zeichen "-" gekennzeichnet.

Nachfolgend finden Sie einige Statistiken zu den gesammelten Werken.


Die Verteilung der verwendeten Tonalitäten im Satz von Kompositionen Die


Position der Noten, berechnet als Versatz vom Beginn des Beats in den Viertelnoten

Die für die Berechnung interessanten beschreibenden Statistiken sind für jedes Projekt unterschiedlich. In den meisten Fällen können Sie jedoch feststellen, mit welcher Art von Daten Sie arbeiten, und Sie können sogar bestimmte Aktionen während der Vorverarbeitung verwalten. Diese Statistiken können auch als Ausgangspunkt für die Überprüfung der Ergebnisse der vorläufigen Datenverarbeitung dienen.

Musikalische Transformation - Theoretische Information


Es gibt zwei Hauptträger des Ausdrucks in der Musik - die Höhe der Klänge und des Rhythmus. Wir verwenden diese Ausdrucksträger als Parameter, um unsere Melodie in der gewählten Stimmung neu zu schreiben.

In der Musiktheorie wird, wenn es um die Höhe der Klänge in einer Melodie geht, das Verhältnis der Höhen zwischen den Noten impliziert. Das Notensystem, das auf einer Tonfolge einer bestimmten Tonhöhe basiert, wird als Skala bezeichnet. Die Intervalle oder das Maß der Breite jedes Schrittes einer Sequenz können sich voneinander unterscheiden. Ein solcher Unterschied oder ein Fehlen davon schafft eine Beziehung zwischen Tönen und melodischen Tendenzen, in der stabile Kombinationen und Ärger einen Ausdruck von Stimmung erzeugen. In der westlichen Musiktradition wird bei einer einfachen diatonischen Skala die Position der Note relativ zur ersten Note der Skala bezeichnetMaßstabs (I-II-III-IV-V-VI-VII). In Übereinstimmung mit stabilen Kombinationen und Laufflächen liefert der Grad der Skala einen Musikton, der seine Funktion im System erfüllt. Dies macht die Vorstellung des Maßstabs der Skala sehr nützlich, um ein einfaches melodisches Muster zu analysieren und dieses mit der Möglichkeit zu kodieren, verschiedene Werte zuzuweisen.

Auf der Anfangsebene müssen wir Skalen auswählen, die aus künstlerischer Sicht geeignet sind, um eine bestimmte Stimmung zu erzeugen. Wenn wir also die Stimmung einer Melodie ändern müssen, sollten wir ihre funktionale Struktur anhand des beschriebenen Konzepts der Skala untersuchen und dem vorhandenen Muster dann aus den Stufen der Skala neue Werte zuweisen. Wie die Karte enthält auch diese Vorlage Informationen zu den Richtungen und Perioden der Melodie.

Für jede Stimmung verwenden wir einige zusätzliche Parameter, um unsere neuen Melodien ausdrucksvoller, harmonischer und ausdrucksvoller zu machen.

Rhythmus ist eine Möglichkeit, Sounds zeitlich zu organisieren. Dazu gehören Informationen wie die Reihenfolge, in der Töne in einer Melodie erscheinen, ihre relative Länge, die dazwischen liegenden Pausen und verschiedene Akzente. So werden Zeiträume erstellt, um die Größe der Musik 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 Parameter des Rhythmus - die Länge der Noten und Pausen - geändert werden. Dies sollte aus künstlerischer Sicht ausreichend sein. Um unsere modifizierte Melodie noch ausdrucksvoller zu gestalten, können wir einige zusätzliche Möglichkeiten nutzen, um die Stimmung zu betonen.

Zum Beispiel kann ANXIETY mit einer Moll-Taste und einem energetischeren Rhythmus ausgedrückt werden. Die Vorlage unserer Quellenskala sieht folgendermaßen aus: VV-VI-VI-VII VV-VI-V-II-I VVV (bis zu einer Oktave) -III-I-VII-VI-IV-IV-III-I-II-I .


Quellmuster

Die ursprüngliche Melodie ist in einer Dur-Tonart geschrieben, die sich in drei Tönen vom Moll unterscheidet - in Dur-Tonart III sind VI und VII Dur (einen halben Ton höher) und in einem Moll-Moll - Moll (ein halber Ton darunter). Wenn Sie also die verwendete Tonalität ändern müssen, sollten Sie einfach die erhöhten Stufen durch die niedrigeren ersetzen (oder umgekehrt). Um jedoch einen noch stärkeren Linderungseffekt der Angst zu erzeugen, muss der siebte Hauptschritt (erhöhte Stufe) verlassen werden. Dies erhöht die Instabilität dieses Tones und unterstreicht unsere Skala auf besondere Weise.

Um den Rhythmus energetischer zu gestalten, können Sie eine Synkope oder eine synkopische Unterbrechung der regulären Bewegung des Rhythmus hinzufügen, indem Sie die Position einiger Noten ändern. In diesem Fall verschieben wir einige ähnliche Noten einen Schlag vorwärts.


Transformation

DISASTER AREATH kann auch mit einer einfachen Moll-Tonart ausgedrückt werden, der Rhythmus muss jedoch gleichzeitig ruhig sein. Wir ersetzen also die großen Schritte durch die kleineren, einschließlich des VII-Schrittes. Um den Rhythmus zu beruhigen, müssen Sie die Pause füllen, indem Sie die Länge der Noten vor ihnen erhöhen.


Transformation GRADE

Um BLEGING zum Ausdruck zu bringen, sollten wir auf entschlossene und strenge Intonationen verzichten - dies wird das Prinzip der angemessenen Transformation sein. Wie Sie sehen können, haben die Grade der Skala entsprechend den Unterschieden in der Reihenfolge der verwendeten Klänge einen anderen Wert und Abstand vom ersten Pegel (I). Dies schafft ihre Bedeutung im Gesamtbild. Daher ist die Bewegung von Stufe IV zu Stufe I aufgrund ihrer Funktion sehr einfach. Die Intonation beim Übergang von der V-Stufe zur I-Stufe klingt auch sehr einfach. Wir werden diese beiden Intonationen vermeiden, um einen Eindruck von Raum und Unsicherheit zu erzeugen.

Daher werden in jedem Element des Musters, in dem die Stufe I der Stufe V folgt, oder der Stufe I der Stufe IV, und in umgekehrter Reihenfolge dieser Schritte, eine dieser Noten (oder beide Noten) durch die ihnen nächstgelegenen Schritte ersetzt. Sie können den Rhythmus auf ähnliche Weise wie bei einem GRACE-Effekt ändern - indem Sie einfach das Tempo reduzieren.


TRANSFORMATION SCHWIERIGER DEFINITION

ist mit einer kraftvollen Bewegung verbunden. Die einfachste Art, dies zu zeigen, besteht darin, den Rhythmus auf ähnliche Weise wie die Änderung für die Wirkung von WORRY zu ändern. Es ist auch erforderlich, die Dauer aller Noten mit Ausnahme der letzten Note jeder Periode, VV-VI-VI-VII, VV-VI-V-II-I zu verringern.


Konvertierungslösung

Der Dur-Key selbst klingt positiv und fröhlich, um HAPPINESS / JOY zu betonen und auszudrücken, verwenden wir den Pentatonik-Dur-Ton. Es besteht aus den gleichen Schritten mit Ausnahme von zwei von ihnen - dem vierten und dem siebten, I-II-III-V-VI.

Jedes Mal, wenn diese beiden Schritte in unserer Vorlage erkannt werden, ersetzen wir sie durch die Schritte, die ihnen am nächsten liegen. Um die Einfachheit unserer Tonalität zu betonen, verwenden wir ein absteigendes melodisches Fragment, das aus fünf oder mehr Tönen besteht, als schrittweise Demonstration unserer Tonleiter.


Umwandlung FREUDE

CALM / CLEARABILITY kann nicht nur durch Veränderung der Tonalität ausgedrückt werden, sondern erfordert auch die Transformation melodischer Bewegung. Dazu müssen Sie die Quellvorlage analysieren und ähnliche Segmente darin markieren. 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 V - V - VI - V - II - I V - V - III - I - VII - VI IV -IV-III-I-III.

Für das erste Segment sollten nur die folgenden Schritte verwendet werden: IV-VI-VII; für den zweiten: V-VII-II-I; für den dritten: VI-VII-III-II; für den vierten: VII-IV-I-VII.

Bei diesen möglichen Schritten handelt es sich in Wirklichkeit um eine andere Art musikalischer Struktur, um Akkorde. Wir können sie jedoch immer noch als System zur Umwandlung von Melodien verwenden. Die Stufen der Skala können durch die ihnen nächstgelegenen Stufen aus den angegebenen Akkordmustern ersetzt werden. Wenn das gesamte Segment mit einem Ton beginnt, der niedriger als das Original ist, müssen alle darin enthaltenen Schritte durch die im angegebenen Muster verfügbaren unteren Schritte ersetzt werden. Um einen Verzögerungseffekt zu erzeugen, müssen Sie auch die Dauer jeder Note in Achtelnoten unterteilen und die Geschwindigkeit dieser neuen Achtelnote schrittweise verringern.


Konversion Ruhe / Crushiness

Um die GRATITUDE zu betonen, ist es notwendig, die stilistische Darstellung im Rhythmus zu verwenden, um einen Arpeggio-Effekt zu erzeugen: Wir kehren zur ersten Note am Ende jedes Segments (Phrase) zurück. Es ist notwendig, die Dauer jeder letzten Note im Segment zu halbieren und die erste Note dieses Segments zu platzieren.


Konvertierung DANKE

Praktischer Teil


Python und music21-Toolkit


Das Transformationsskript wurde mit der Python-Sprache und dem music21-Toolkit implementiert.

Music21 ist eine sehr vielseitige und hochkarätige Klasse für Manipulationen mit musikalischen Konzepten wie Noten, Größe, Akkord, Tonart usw. Sie können Operationen direkt im Sachgebiet durchführen, im Gegensatz zu Low-Level-Manipulationen mit „Rohdaten“ aus einer Datei Musikinstrument-Digitalschnittstelle (MIDI). Die direkte Arbeit mit MIDI-Dateien in music21 ist jedoch nicht immer bequem, besonders wenn es darum geht, die Partitur zu visualisieren. Um den Algorithmus zu visualisieren und zu implementieren, ist es eine bequemere Möglichkeit, die ursprünglichen MIDI-Dateien in das musicXML-Format zu konvertieren. Das musicXML-Format ist außerdem das Eingabeformat für BachBot, das den nächsten Schritt in unserer Verarbeitungssequenz darstellt.
Die Konvertierung kann mit Mosescore durchgeführt werden:
um die musicXML-Datei auszugeben:

musescore input.mid -o output.xml
um die MIDI-Datei auszugeben:

musescore input.mid -o output.mid

Jupyter


Das music21-Toolkit ist gut in die Jupyter-App integriert. Durch die Integration mit Musescore können Sie die Partitur außerdem direkt im Jupyter-Notizbuch anzeigen und die Ergebnisse über den integrierten Player während des Entwicklungs- und Experimentierprozesses anhören.


Jupyter Notebook-Dokument mit Code, Score und Player

Die Score Show-Funktion eignet sich besonders für das Teamwork eines Programmierers und eines Theoretikers. Die Kombination aus Jupyters interaktiver Natur, der domänenspezifischen Darstellung von Musik21 und der Einfachheit der Python-Sprache macht diesen Workflow besonders für diese Art interdisziplinärer Forschung vielversprechend.

Umsetzung


Das Transformationsskript wurde als Python-Modul implementiert, sodass Sie einen direkten Aufruf durchführen können:

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 wird das Ergebnis eine mit einer bestimmten Emotion modulierte Datei sein.

Die mit den Änderungen der Musikstufen verbundenen Veränderungen - ANXIETY, GRACE, GREGNATION und JOY - basieren auf der Verwendung der Funktion music21.Note.transpose in Verbindung mit einer Analyse der aktuellen und erforderlichen Position der Musikpegel. Hier verwenden wir das music21.scale-Modul und seine Funktionen, um aus einem beliebigen Tonikum die gewünschte Skala zu erstellen. Um das Tonikum einer bestimmten Melodie zu erhalten, können Sie die Analysefunktion ('key') des music21.Stream7-Moduls verwenden.

Phrasenbasierte Transformationen - DECISIVITY, ACKNOWLEDGMENTS, CALM / IMPRESSION - zusätzliche Forschung ist erforderlich. Diese Studie ermöglicht es uns, Anfang und Ende von musikalischen Phrasen genau zu erkennen.

Fazit


In diesem Artikel haben wir die Grundidee vorgestellt, die der musikalischen Transformation zugrunde liegt, die auf Emotionen basiert. Dabei wird die Position einer einzelnen Note in der Skala relativ zum Tonikum (Notenebene), dem Tempo des Spiels sowie der musikalischen Phrase geändert. Diese Idee wurde als Python-Skript implementiert. Die Umsetzung theoretischer Ideen in der realen Welt ist jedoch nicht immer einfach. Daher standen wir vor einigen Schwierigkeiten und ermittelten mögliche Richtungen für die zukünftige Forschung. Diese Studie bezieht sich hauptsächlich auf die Entdeckung musikalischer Phrasen und ihrer Transformationen. Die richtige Wahl der Instrumente (music21) und die Forschung auf dem Gebiet der musikalischen Information sind Schlüsselfaktoren für die Lösung solcher Probleme.

Emotionale musikalische Transformation ist die erste Stufe in unserer Sequenz der Verarbeitung von Musikdaten. Als nächstes müssen Sie die konvertierte und vorbereitete Melodie an den BachBot-Eingang übergeben.

Jetzt auch beliebt: