[PYTHON] Extraire uniquement le son d'un instrument spécifique du fichier MIDI et en faire un fichier séparé

introduction

Je joue avec le projet de génération de musique de TensorFlow "Magenta".

Référence: [Laissez Sakanaction apprendre du projet de création artistique et musicale de TensorFlow "Magenta". ] (http://qiita.com/tackey/items/1295a0347a8b4cc30d46)

En tant que prétraitement, je souhaite convertir le fichier MIDI en fichier pour chaque instrument, je vais donc le diviser en utilisant pretty_midi.

Référence: documentation pretty_midi 0.2.6 Référence: Créer un fichier MIDI en Python en utilisant pretty_midi

L'environnement est Python 2.7 et le fichier MIDI est la logique X.

Exemple de code 1 (retirez un instrument et transformez-le en fichier)

sample.py


import pretty_midi

#Lire le fichier MIDI
midi_data = pretty_midi.PrettyMIDI('hogehoge.MID')

#Liste des instruments de musique
midi_data.instruments

'''
 [Instrument(program=80, is_drum=False, name="hoge"),
 Instrument(program=4, is_drum=False, name="hoge"),
 Instrument(program=0, is_drum=True, name="hoge"),
 Instrument(program=16, is_drum=False, name="hoge"),
 Instrument(program=52, is_drum=False, name="hoge"),
 Instrument(program=71, is_drum=False, name="hoge"),
 Instrument(program=4, is_drum=False, name="hoge"),
 Instrument(program=29, is_drum=False, name="hoge"),
 Instrument(program=30, is_drum=False, name="hoge"),
 Instrument(program=51, is_drum=False, name="hoge"),
 Instrument(program=33, is_drum=False, name="hoge"),
 Instrument(program=27, is_drum=False, name="hoge"),
 Instrument(program=81, is_drum=False, name="hoge")]
'''

#80e instrument(ReverseEngineering)Sortez et faites-en une instance
for instrument in midi_data.instruments:
    if instrument.program == 80:
        ins_80 = instrument
        
#Créer un objet Pretty MIDI pour une nouvelle création
rev_en_chord = pretty_midi.PrettyMIDI()

#Ajouter le numéro 80 à l'objet PrettyMIDI
rev_en_chord.instruments.append(ins_80)

#enregistrer
rev_en_chord.write('ins_80.mid')

Un fichier appelé ins_80.mid sera créé dans le même dossier.

Exemple de code 2 (retirez tous les instruments et mettez-les dans des fichiers)

sample2.py


import pretty_midi
import os

title = "aoi"

midi_data = pretty_midi.PrettyMIDI('sakanaction_'+ title +'.MID')

#Créer s'il n'y a pas de répertoire de sortie
if not os.path.isdir('output'):
    os.mkdir(output)

#Créez un répertoire pour la chanson
if not os.path.isdir('output/' + str(title)):
    os.mkdir('output/' + str(title))
    
#Sortez les instruments un par un et transformez-les en instances
for i in range(0,len(midi_data.instruments)):
    
    instrument = midi_data.instruments[i]
    program_num = midi_data.instruments[i].program

    #Créer un objet Pretty MIDI pour une nouvelle création
    rev_en_chord = pretty_midi.PrettyMIDI()

    #Ajouter un instrument à l'objet PrettyMIDI
    rev_en_chord.instruments.append(instrument)

    #enregistrer
    rev_en_chord.write('output/'+str(title) + '/' + str(title) +'_ins_' + str(program_num) + '.mid')

À la fin

J'ai l'impression de pouvoir écrire le code plus magnifiquement. Sur la base des fichiers divisés, j'aimerais apprendre la musique individuellement pour chaque instrument.

Merci beaucoup.

Recommended Posts

Extraire uniquement le son d'un instrument spécifique du fichier MIDI et en faire un fichier séparé
Extrait uniquement complet du résultat de Trinity
Utilisez Pillow pour rendre l'image transparente et en superposer une partie seulement
Spécifiez le volume sous Linux et jouez le son
Faire une copie d'un fichier Google Drive à partir de Python
(Mémo) Jusqu'à ce que vous extrayiez uniquement la partie que vous voulez d'une certaine page Web, convertissez-la en page Sphinx et imprimez-la au format PDF
[Python scraping] Affiche l'URL et le titre du site contenant un mot-clé spécifique dans un fichier texte
Je souhaite extraire les informations d'étiquette (titre et artiste) d'un fichier de musique (flac, wav).
Creusez le répertoire et créez une liste de chemins de répertoire + noms de fichiers
Trouvez tous les modèles pour extraire un nombre spécifique de l'ensemble
2.Faites un arbre de décision à partir de 0 avec Python et comprenez-le (2. Bases du programme Python)
Conseils: [Python] Restaurer et extraire au hasard un tableau à partir d'un fichier fasta
Extraire les lignes qui correspondent aux conditions d'un fichier texte avec python
[Mémo personnel] Obtenez des données sur le Web et faites-en un DataFrame
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Créez DNN-CRF avec Chainer et reconnaissez la progression des accords de la musique
Créez un arbre de décision à partir de 0 avec Python et comprenez-le (4. Structure des données)
Comment enregistrer les informations de point caractéristique de l'image dans un fichier et l'utiliser pour la mise en correspondance
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Transformez un programme Python en démon et exécutez-le automatiquement au démarrage du système d'exploitation
Python --Lisez les données d'un fichier de données numériques et recherchez la ligne de régression multiple.
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
Extraire uniquement le nom du fichier à l'exclusion du répertoire dans le répertoire
Copiez la liste en Python
Extraire les fichiers du fichier RPM sans l'installer
Prise en compte des forces et faiblesses de Python
Si vous définissez une méthode dans une classe Ruby, puis définissez une méthode dans celle-ci, elle devient une méthode de la classe d'origine.
Extrayez les informations de paroles dans le fichier MP3 / MP4 et enregistrez-les dans le fichier de paroles (* .lrc) pour Sony Walkman.
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
Le résultat de la création d'un album de cartes de jeunes mariés italiens en Python et de son partage
[Python] Changer la couleur du texte et la couleur d'arrière-plan d'un mot clé spécifique dans la sortie d'impression
Extraire des images et des tableaux de pdf avec python pour réduire la charge de reporting
[Art de la coquille] Seulement quand c'est un multiple de 3 et un nombre avec 3 devient stupide
Python2 / numpy> Remplacer uniquement une colonne spécifique d'un fichier par les données de colonne d'un autre fichier> numpy.c_
Lisez le fichier csv avec le notebook jupyter et écrivez le graphique l'un sur l'autre
Il semble que le module de train_test_split change de 0.20 et que l'avertissement de dépréciation apparaisse à 0.18.
Faites une liste de latitude et de longitude et convertissez les coordonnées UTM à la fois → Sortie du fichier
Pour extraire des données dans une colonne spécifique dans une feuille spécifique dans plusieurs fichiers Excel à la fois et mettre les données dans chaque colonne sur une ligne
PGM qui prend la différence de la zone rectangulaire spécifiée de la caméra et adoucit le son lorsque le taux de changement dépasse un certain taux
Je veux découper uniquement le visage d'une image de personne avec Python et l'enregistrer ~ Détection de visage et rognage avec face_recognition ~