你记得倒回你的StringIO缓冲区吗?
我经历了你所做的所有步骤,并得到了同样的错误。然后,我在sourceforge(2006年)追踪了012ops164RWops库,并准备对此负责。
然后,在模块tempfile中的对象成功后,我尝试从模块IO的ByteIO。他们都工作,但我在装载之前与他们一起寻找(0)。
所以我回到了StringIO,并且在加载之前做了一次seek(0),并且成功了!
这里是样品的编辑和修改凝结从midutil:
from midiutil.MidiFile import MIDIFile
from StringIO import StringIO
# CREATE MEMORY FILE
memFile = StringIO()
MyMIDI = MIDIFile(1)
track = 0
time = 0
channel = 0
pitch = 60
duration = 1
volume = 100
MyMIDI.addTrackName(track,time,"Sample Track")
MyMIDI.addTempo(track,time,120)
# WRITE A SCALE
MyMIDI.addNote(track,channel,pitch,time,duration,volume)
for notestep in [2,2,1,2,2,2,1]:
time += duration
pitch += notestep
MyMIDI.addNote(track,channel,pitch,time,duration,volume)
MyMIDI.writeFile(memFile)
# PLAYBACK
import pygame
import pygame.mixer
from time import sleep
pygame.init()
pygame.mixer.init()
memFile.seek(0) # THIS IS CRITICAL, OTHERWISE YOU GET THAT ERROR!
pygame.mixer.music.load(memFile)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
sleep(1)
print "Done!"
惊人的家伙,我已经想这是一个失败的事业。如果有人说你需要“回放”文件来播放它,我会认为那个人很疯狂。但尽管如此,它像一个魅力。 – 2014-12-17 08:05:29