Cette fois, je voulais pouvoir manipuler des données MIDI en utilisant Python, alors en parcourant divers sites, je suis arrivé à un outil appelé Magenta.
Qu'est-ce que #Magenta? L'autre jour, un nouveau projet appelé Magenta de Google a ouvert sur Github. https://github.com/tensorflow/magenta
Magenta est un projet qui utilise un réseau neuronal pour générer de l'art et de la musique.
L'objectif est de faire évoluer la créativité de l'apprentissage automatique et de devenir une communauté d'artistes et d'apprentissage automatique.
Réseau de neurones récurrent à composer
En tant que premier Magenta, un modèle du réseau neuronal récurrent (RNN) qui le compose a été publié. Il intègre une technique appelée LSTM (Long Short-Term Memory). Selon le site officiel de magenta (http://magenta.tensorflow.org/)
It’s purposefully a simple model, so don’t expect stellar music results. We’ll post more complex models soon. Il s'agit d'un modèle volontairement simplifié et vous ne pouvez pas vous attendre à faire une musique exceptionnelle. Cependant, nous continuerons à publier des modèles plus complexes.
Magenta est sorti en 2016. Il est nécessaire d'étudier d'abord RNN et LSTM, mais j'aimerais utiliser cet outil en essayant de l'utiliser pour le moment.
Nous avons confirmé les données MIDI (chanson titre de Hinatazaka 46, 4 chansons) achetées sur la boutique en ligne YAMAHA.
De cette façon, il a été divisé en plusieurs pistes. (Partie de batterie, accompagnement, etc.) Comme cela sera décrit plus loin, l'apprentissage a été effectué en utilisant les données telles quelles sans rien faire. J'ai vérifié les résultats, mais ce n'est pas bon s'il y a de nombreux genres de données utilisés. Par conséquent, il est nécessaire de se concentrer uniquement sur la mélodie.
Extrayons donc uniquement la partie mélodie en utilisant le package Python pretty-midi
.
terminal
pip install pretty_midi
Pour référence, l'allocation des ressources est la suivante.
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')
#Sélectionnez le numéro d'instrument sélectionné et enregistrez
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())
#Retirez l'instrument sélectionné et faites-en une instance
for instrument in midi_track:
if instrument.program == i:
ins = instrument
#Créer un objet Pretty MIDI pour une nouvelle création
rev_en_chord = pretty_midi.PrettyMIDI()
#Ajouté à l'objet PrettyMIDI
rev_en_chord.instruments.append(ins)
#enregistrer
rev_en_chord.write('./result/ins_' + m_name + '.mid')
return
func()
C'est un code qui fait référence à chaque fichier MIDI, spécifie le numéro de l'instrument et enregistre uniquement cette piste.
Consultez le site ci-dessus pour les codes d'instruments. La plupart des gens semblent jouer avec le code de l'instrument lorsqu'ils touchent les données MIDI de la programmation.
Démarrez Docker et tirez l'image magenta / tensorflow
.
Puisque TensorBoard est également utilisé, spécifiez le numéro de port.
Terminal
docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta
En gros, je ne l'ai pas précisé ici car j'ai procédé à la procédure du site suivant.
Cependant, j'ai dû frapper le script shell dans l'image, mais il s'est arrêté avec une erreur. Je n'avais jamais touché au script shell auparavant, il a donc fallu beaucoup de temps pour le déchiffrer. Peut-être en raison d'un environnement différent, le nom du fichier de programmation spécifié était différent ou les réglages des paramètres étaient incorrects, ce qui entraînait une erreur. (J'ai appris des scripts shell.)
Pour référence, il était possible d'apprendre en apportant les modifications suivantes à mon environnement.
build_dataset.sh
convert_midi_dir_to_note_sequences \
--midi_dir=$MIDI_DIR \
--output_file=$SEQUENCES_TFRECORD \
--recursive
######Changé en######
convert_dir_to_note_sequences \
--midi_dir=$MIDI_DIR \
--output_file=$SEQUENCES_TFRECORD \
--recursive
Apprentissage ... J'ai également vu TensorBoard pour la première fois. Je dois étudier davantage parce que je n'ai aucune idée de ce qui est écrit.
J'ai essayé de l'allumer sur un MacBook pour le moment, mais cela semble difficile ... Je dois pouvoir le transformer en Deep Infinity la semaine prochaine ...
Le nombre d'étapes étant fixé à 1200, il a fallu 1 heure et 30 minutes pour apprendre avec MacBook Pro. Le modèle utilisé est «Basic RNN»
La précision a été augmentée à 0,8.
Un fichier MIDI a été généré à l'aide de ces données d'entraînement. Le nombre d'étapes a été spécifié comme 500. De plus, le nombre de fichiers générés est de cinq.
Les données MIDI générées ont été converties en «wav» en utilisant «timidity» et téléchargées sur Goolge Drive.
Le temps est venu ici, mais pour autant que j'écoute la chanson, je sens qu'une ligne mélodique qui rappelle légèrement la chanson originale a été générée.
Recommended Posts