2012-06-16 21 views
5

Piszę skrypt do konwersji obrazu na notatki MIDI w oparciu o wartości RGBA poszczególnych pikseli. Jednak nie wydaje mi się, aby ostatni krok zadziałał, a mianowicie, aby wyprowadzić notatki do pliku. Próbowałem używać biblioteki MIDIUtil, jednak jej dokumentacja nie jest najlepsza i nie mogę tego zrozumieć. Jeśli ktoś mógłby mi powiedzieć, jak sekwencjonować notatki (aby nie wszystkie zaczynały się od początku), byłoby to bardzo cenne.Jak mogę napisać plik MIDI z Pythonem?

Z góry dziękuję.

+0

Czy pamiętasz, aby pisać opóźnienia? –

Odpowiedz

10

Patrząc na próbce, coś

from midiutil.MidiFile import MIDIFile 

# create your MIDI object 
mf = MIDIFile(1)  # only 1 track 
track = 0 # the only track 

time = 0 # start at the beginning 
mf.addTrackName(track, time, "Sample Track") 
mf.addTempo(track, time, 120) 

# add some notes 
channel = 0 
volume = 100 

pitch = 60   # C4 (middle C) 
time = 0    # start on beat 0 
duration = 1   # 1 beat long 
mf.addNote(track, channel, pitch, time, duration, volume) 

pitch = 64   # E4 
time = 2    # start on beat 2 
duration = 1   # 1 beat long 
mf.addNote(track, channel, pitch, time, duration, volume) 

pitch = 67   # G4 
time = 4    # start on beat 4 
duration = 1   # 1 beat long 
mf.addNote(track, channel, pitch, time, duration, volume) 

# write it to disk 
with open("output.mid", 'wb') as outf: 
    mf.writeFile(outf) 
+0

Jeśli używasz Pythona 3, powinieneś zamienić ten pierwszy wiersz na 'from midiutil.MidiFile3 import MIDIFile'. – Cai

+0

Jak dodać do tego komunikat końca utworu? – kurtosis

8

Wiem, że to stary post, ale jestem autorem biblioteki i chciałem wspomnieć, że Python 2 i 3 zostały już wsparcia ujednolicony i wraz z upadkiem Google Code kod jest obecnie obsługiwany na GitHub i mogą być instalowane poprzez pip, czyli:

pip install MIDIUtil 

Dokumentacja jest dostępna w Read The Docs.

(Próbowano skomentować ale brakowało punktów doświadczenia).

komunikat end-of-tor jest tworzony automatycznie, gdy plik jest zapisywany na dysku.

+2

Cześć Mark. Mam plik kolejnych znaczników czasu, a dla każdego znacznika czasu w pliku chcę zagrać notatkę, np. C64 Maj. Nie ma tempa, jak improwizacja, znaczki są losowe ... jak mam dostać je "jak jest" na plik midi? – ajsp