What I want to do is the following: Create a MIDI file, but only in memory, and feed it into pygame.mixer.music.load()
. Here is what I've been trying (I'm using MidiFile from here):
import pygame.mixer
import MidiFile3
import io
pygame.mixer.init()
midi = MidiFile3.MIDIFile(1) # midi file with one track
midi.addTrackName(0,0,"Track 1") #Track Name on track 0, position 0
midi.addTempo(0,0,120) #Tempo to 120 bpm on track 0, position 0
for i in range(8):
midi.addNote(0,0,60,i,1,100) #add 8 c1-notes to the track
bytestream = io.BytesIO()
midi.writeFile(bytestream)
pygame.mixer.music.load(bytestream.getvalue())
Here I get the error message
pygame.error: File path 'MThd' contains null characters
When I do
bytestream = open('file.mid','wb')
midi.writeFile(bytestream)
bytestream.close()
pygame.mixer.music.load('file.mid')
it works as expected.
Of course, I know there is a difference between string containing a file name and a byte-string containing what the file contains. But I found this Post on Daniweb which uses bytestreams and the example works for me.
I just can't figure out how to get my example to work.