Le MIDI peut être utilisé lors du traitement de la musique.
MIDI est un fichier qui contient des informations dites de partition. En d'autres termes, il est écrit comme quel son est produit à quel moment.
Lorsque vous utilisez Python, il existe un package qui traite le MIDI, je vais donc l'expliquer.
midi et pretty_midi
Ces packages sont également utilisés dans un projet appelé Magenta, qui compose avec l'intelligence artificielle.
Nous utiliserons Python2 ici.
Il semble qu'il puisse être installé avec pip (corrigé le 22/11/2016)
pip install python-midi
pip install pretty_midi
Si vous pouvez l'importer, vous avez terminé.
import midi
import pretty_midi
En Python3, vous pouvez utiliser pretty_midi en clonant et en installant depuis github. (Si vous le faites avec pip, vous obtiendrez une erreur lors de l'importation)
git clone https://github.com/craffel/pretty-midi
cd pretty-midi
python setup.py install
Pour midi, il existe une version Python3 sur ici.
midi Un fichier MIDI se compose essentiellement de pistes et d'événements.
La piste contient des données de performance pour chaque instrument.
Et les données de performance sont composées d'événements. Un événement est une information telle que quand changer le tempo et quand commencer (terminer) le son.
C'est midi qui les décrit directement.
Maintenant, créons un fichier midi contenant les informations de performance des noires So.
import midi
file = "test.mid"
pattern = midi.Pattern(resolution=960) #Ce modèle correspond au fichier midi.
track = midi.Track() #Faire une trace
pattern.append(track) #Ajoutez la piste que vous avez créée au motif.
ev = midi.SetTempoEvent(tick=0, bpm=120) #Créer un événement pour définir le tempo
track.append(ev) #Ajoutez l'événement à la piste.
e = midi.NoteOnEvent(tick=0, velocity=100, pitch=midi.G_4) #Créez un événement qui commence à faire le son de SEO.
track.append(e)
e = midi.NoteOffEvent(tick=960, velocity=100, pitch=midi.G_4) #Créez un événement qui termine le son de Seo.
track.append(e)
eot = midi.EndOfTrackEvent(tick=1) #Créer un événement pour terminer la piste
track.append(eot)
midi.write_midifile(file, pattern) #Écrivez le motif dans un fichier.
Maintenant, lisez le fichier midi
pattern = midi.read_midifile("test.mid")
print(pattern)
Les informations suivantes s'affichent. Ce sont les mêmes que les informations que j'ai écrites plus tôt.
midi.Pattern(format=1, resolution=960, tracks=\
[midi.Track(\
[midi.SetTempoEvent(tick=0, data=[7, 161, 32]),
midi.NoteOnEvent(tick=0, channel=0, data=[55, 100]),
midi.NoteOffEvent(tick=960, channel=0, data=[55, 100]),
midi.EndOfTrackEvent(tick=1, data=[])])])
pretty_midi pretty_midi est encore plus facile à comprendre.
Vous pouvez faire la même chose avec pretty_midi, qui est un code plus court.
Créez un fichier midi de la même manière.
import pretty_midi
pm = pretty_midi.PrettyMIDI(resolution=960, initial_tempo=120) #pretty_Créer un objet midi
instrument = pretty_midi.Instrument(0) #l'instrument est comme un camion.
note_number = pretty_midi.note_name_to_number('G4')
note = pretty_midi.Note(velocity=100, pitch=note_number, start=0, end=1) #note équivaut à NoteOnEvent et NoteOffEvent.
instrument.notes.append(note)
pm.instruments.append(instrument)
pm.write('test.mid') #Écrivez un fichier midi.
(Remarque) Lorsqu'une erreur se produit
note = pretty_midi.Note(velocity=100, pitch=note_number, >start=1e-20, end=1) #note équivaut à NoteOnEvent et NoteOffEvent.
Veuillez réécrire comme>. Cela est dû au fait que la méthode PrettyMIDI time_to_tick retourne en tant que type numpy.int64 pour une raison quelconque uniquement lorsque l'entrée est 0. (Dans d'autres cas, il est renvoyé sous forme de type int)
Lire le fichier midi
import pretty_midi
midi_data = pretty_midi.PrettyMIDI('test.mid') #Lire le fichier midi
print(midi_data.get_piano_roll()) #Rouleau de piano de sortie
print(midi_data.synthesize()) #La forme d'onde est sortie en utilisant l'onde sinusoïdale.
Il semble qu'il existe également d'autres fonctions utiles.
Fondamentalement, il semble préférable d'utiliser pretty_midi lorsque vous traitez des fichiers midi en Python.
Recommended Posts