MIDI kann bei der Verarbeitung von Musik verwendet werden.
MIDI ist eine Datei, die sogenannte Score-Informationen enthält. Mit anderen Worten, es wird so geschrieben, wie welcher Ton zu welchem Zeitpunkt erzeugt wird.
Wenn Sie Python verwenden, gibt es ein Paket, das MIDI verarbeitet, daher werde ich es erklären.
Midi und Pretty_Midi
Diese Pakete werden auch in einem Projekt namens Magenta verwendet, das mit künstlicher Intelligenz komponiert.
Wir werden hier Python2 verwenden.
Es scheint, dass es mit pip installiert werden kann (korrigiert am 22.11.2016)
pip install python-midi
pip install pretty_midi
Wenn Sie es importieren können, sind Sie fertig.
import midi
import pretty_midi
In Python3 können Sie Pretty_Midi verwenden, indem Sie von github klonen und installieren. (Wenn Sie es mit pip machen, wird beim Importieren eine Fehlermeldung angezeigt.)
git clone https://github.com/craffel/pretty-midi
cd pretty-midi
python setup.py install
Für Midi gibt es eine Python3-Version unter hier.
midi Eine MIDI-Datei besteht im Wesentlichen aus Spuren und Ereignissen.
Die Spur enthält Leistungsdaten für jedes Instrument.
Und die Leistungsdaten setzen sich aus Ereignissen zusammen. Ein Ereignis ist eine Information darüber, wann das Tempo geändert werden muss und wann der Sound gestartet (beendet) werden soll.
Es ist Midi, das sie direkt beschreibt.
Erstellen wir nun eine Midi-Datei, die die Performance-Informationen der So-Viertelnoten enthält.
import midi
file = "test.mid"
pattern = midi.Pattern(resolution=960) #Dieses Muster entspricht der Midi-Datei.
track = midi.Track() #Mach einen Track
pattern.append(track) #Fügen Sie die von Ihnen erstellte Spur zum Muster hinzu.
ev = midi.SetTempoEvent(tick=0, bpm=120) #Erstellen Sie ein Ereignis, um das Tempo festzulegen
track.append(ev) #Fügen Sie das Ereignis der Spur hinzu.
e = midi.NoteOnEvent(tick=0, velocity=100, pitch=midi.G_4) #Erstellen Sie ein Ereignis, das den Sound von Seo erzeugt.
track.append(e)
e = midi.NoteOffEvent(tick=960, velocity=100, pitch=midi.G_4) #Erstellen Sie ein Ereignis, das den Sound von Seo beendet.
track.append(e)
eot = midi.EndOfTrackEvent(tick=1) #Erstellen Sie ein Ereignis, um den Track zu beenden
track.append(eot)
midi.write_midifile(file, pattern) #Schreiben Sie das Muster in eine Datei.
Lesen Sie nun die Midi-Datei
pattern = midi.read_midifile("test.mid")
print(pattern)
Die folgenden Informationen werden angezeigt. Dies sind die gleichen Informationen, die ich zuvor geschrieben habe.
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 ist noch einfacher zu verstehen.
Sie können dasselbe mit hübschem_midi tun, dem kürzeren Code.
Erstellen Sie auf die gleiche Weise eine Midi-Datei.
import pretty_midi
pm = pretty_midi.PrettyMIDI(resolution=960, initial_tempo=120) #pretty_Erstellen Sie ein MIDI-Objekt
instrument = pretty_midi.Instrument(0) #Instrument ist wie ein LKW.
note_number = pretty_midi.note_name_to_number('G4')
note = pretty_midi.Note(velocity=100, pitch=note_number, start=0, end=1) #note entspricht NoteOnEvent und NoteOffEvent.
instrument.notes.append(note)
pm.instruments.append(instrument)
pm.write('test.mid') #Schreiben Sie eine MIDI-Datei.
(Hinweis) Wenn ein Fehler auftritt
note = pretty_midi.Note(velocity=100, pitch=note_number, >start=1e-20, end=1) #note entspricht NoteOnEvent und NoteOffEvent.
Bitte umschreiben als>. Dies liegt daran, dass die PrettyMIDI-Methode time_to_tick aus irgendeinem Grund nur dann als numpy.int64-Typ zurückgegeben wird, wenn die Eingabe 0 ist. (In anderen Fällen wird es als int-Typ zurückgegeben.)
Midi-Datei lesen
import pretty_midi
midi_data = pretty_midi.PrettyMIDI('test.mid') #Midi-Datei lesen
print(midi_data.get_piano_roll()) #Klavierrolle ausgeben
print(midi_data.synthesize()) #Die Wellenform wird unter Verwendung der Sinuswelle ausgegeben.
Es scheint, dass es auch andere nützliche Funktionen gibt.
Grundsätzlich scheint es besser zu sein, ziemlich_midi zu verwenden, wenn es um MIDI-Dateien in Python geht.
Recommended Posts