Dieses Mal wollte ich in der Lage sein, MIDI-Daten mit Python zu bearbeiten. Beim Durchsuchen verschiedener Websites kam ich zu einem Tool namens Magenta.
Was ist #Magenta? Neulich wurde auf Github ein neues Projekt namens Magenta von Google eröffnet. https://github.com/tensorflow/magenta
Magenta ist ein Projekt, das ein neuronales Netzwerk verwendet, um Kunst und Musik zu erzeugen.
Ziel ist es, die Kreativität des maschinellen Lernens zu entwickeln und eine Gemeinschaft von Künstlern und maschinellem Lernen zu werden.
Wiederkehrendes neuronales Netzwerk zum Zusammenstellen
Als erstes Magenta wurde ein Modell des wiederkehrenden neuronalen Netzwerks (RNN) veröffentlicht, das sich zusammensetzt. Es enthält eine Technik namens LSTM (Long Short-Term Memory). Laut der offiziellen Magenta-Website (http://magenta.tensorflow.org/)
It’s purposefully a simple model, so don’t expect stellar music results. We’ll post more complex models soon. Dies ist ein bewusst vereinfachtes Modell, und Sie können nicht erwarten, herausragende Musik zu machen. Wir werden jedoch weiterhin komplexere Modelle veröffentlichen.
Magenta wurde im Jahr 2016 veröffentlicht. Es ist notwendig, zuerst RNN und LSTM zu studieren, aber ich möchte dieses Tool nutzen, indem ich versuche, es vorerst zu verwenden.
Wir haben die im YAMAHA-Online-Shop gekauften MIDI-Daten (Titelsong von Hinatazaka 46, 4 Songs) bestätigt.
Auf diese Weise wurde es in verschiedene Spuren unterteilt. (Schlagzeugstimme, Begleitung usw.) Wie später beschrieben wird, wurde das Lernen unter Verwendung der Daten so durchgeführt, wie sie sind, ohne etwas zu tun. Ich habe die Ergebnisse überprüft, aber es ist nicht gut, wenn viele Datengenres verwendet werden. Daher muss man sich nur auf die Melodie konzentrieren.
Extrahieren wir also nur den Melodieteil mit dem Python-Paket pretty-midi
.
terminal
pip install pretty_midi
Als Referenz ist die Ressourcenzuweisung wie folgt.
cut_out.py
import pretty_midi
import os
os.chdir("~/WorkSpace/MIDI_data/cut_out")
def func():
midi_name = ["00", "01", "02", "03"]
for m_name in midi_name:
midi_data = pretty_midi.PrettyMIDI("resource" + m_name + '.mid')
#Wählen Sie die ausgewählte Instrumentennummer und speichern Sie
midi_track = midi_data.instruments
# print("midi_track = {0}" .format(midi_track))
for m_track in midi_track:
print("midi_track = {0}" .format(m_track))
print("select track-nunber => ")
i = int(input())
#Nehmen Sie das ausgewählte Instrument heraus und machen Sie es zu einer Instanz
for instrument in midi_track:
if instrument.program == i:
ins = instrument
#Erstellen Sie ein hübsches MIDI-Objekt für die neue Erstellung
rev_en_chord = pretty_midi.PrettyMIDI()
#Zum PrettyMIDI-Objekt hinzugefügt
rev_en_chord.instruments.append(ins)
#sparen
rev_en_chord.write('./result/ins_' + m_name + '.mid')
return
func()
Es ist ein Code, der sich auf jede MIDI-Datei bezieht, die Instrumentennummer angibt und nur diese Spur speichert.
Instrumentencodes finden Sie auf der obigen Website. Die meisten Leute scheinen mit dem Instrumentencode zu spielen, wenn sie MIDI-Daten aus der Programmierung berühren.
Starten Sie Docker und ziehen Sie das Bild "Magenta / Tensorflow". Da auch TensorBoard verwendet wird, geben Sie die Portnummer an.
Terminal
docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta
Grundsätzlich habe ich es hier nicht angegeben, da ich mit dem Verfahren der folgenden Site fortgefahren bin.
Ich musste jedoch das Shell-Skript im Bild drücken, aber es wurde mit einem Fehler gestoppt. Ich hatte das Shell-Skript noch nie zuvor berührt, daher dauerte es lange, es zu entschlüsseln. Möglicherweise war aufgrund einer anderen Umgebung der Name der angegebenen Programmierdatei unterschiedlich oder die Parametereinstellungen waren falsch, was zu einem Fehler führte. (Ich habe aus Shell-Skripten gelernt.)
Als Referenz war es möglich zu lernen, indem ich die folgenden Änderungen in meiner Umgebung vornahm.
build_dataset.sh
convert_midi_dir_to_note_sequences \
--midi_dir=$MIDI_DIR \
--output_file=$SEQUENCES_TFRECORD \
--recursive
######Gewechselt zu######
convert_dir_to_note_sequences \
--midi_dir=$MIDI_DIR \
--output_file=$SEQUENCES_TFRECORD \
--recursive
Lernen ... Ich habe TensorBoard auch zum ersten Mal gesehen. Ich muss mehr lernen, weil ich keine Ahnung habe, was geschrieben steht.
Ich habe vorerst versucht, es auf einem MacBook einzuschalten, aber es scheint schwierig zu sein ... Ich muss es nächste Woche in Deep Infinity drehen können ...
Da die Anzahl der Schritte auf 1200 eingestellt war, dauerte das Erlernen mit MacBook Pro 1 Stunde und 30 Minuten. Das verwendete Modell ist "Basic RNN"
Die Genauigkeit wurde auf 0,8 erhöht.
Mit diesen Trainingsdaten wurde eine MIDI-Datei generiert. Die Anzahl der Schritte wurde mit 500 angegeben. Außerdem werden fünf Dateien generiert.
Die generierten MIDI-Daten wurden mit "Schüchternheit" in "WAV" konvertiert und auf Goolge Drive hochgeladen.
Die Zeit ist gekommen, aber soweit ich das Lied höre, habe ich das Gefühl, dass eine Melodielinie erzeugt wurde, die leicht an das ursprüngliche Lied erinnert.
Recommended Posts