2014-12-03 3 views
2

midi 파일을 생성 할 수있는 this module이 있습니다.MIDI 파일을 생성하고 디스크에 저장하지 않고 재생하십시오.

나는 쉽게 파이 게임 mixer.music를 사용하여 출력 파일을 재생할 수 있습니다,하지만 난 그것이 작동하지 않는 파일로 저장 (개체를 재생) 할 필요없이 재생하려고하면, 나는

pygame.error: Couldn't read from RWops

를 얻을.

StringIO을 사용해 보았는데 성공하지 못했습니다. 위와 같은 오류가 발생합니다.

MIDI 객체를 재생할 수있는 모듈을 다른 사람이 아는 사람이 있습니까?

답변

4

StringIO 버퍼를 되감기를 기억 했습니까?

나는 모든 단계를 거쳤으며 동일한 오류가 발생했습니다. 그런 다음 sourceforge (2006 년)에 RWops 라이브러리를 추적 했으므로이를 비난 할 준비가되었습니다.

다음 모듈 tempfile에있는 객체로 성공한 후 ByteIO를 모듈 IO에서 시도했습니다. 그들은 둘 다 일했으나 부하가 오기 전에 그들을 찾았다.

그래서 저는 StringIO로 돌아가서로드와 성공 전에 찾기 (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!" 
+0

놀라운 친구, 나는 이미 잃어버린 원인이었다 생각했다. 누군가 당신이 파일을 재생하기 위해 파일을 되 감을 필요가 있다고 말하면 나는 그 사람이 미쳤다고 생각할 것입니다. 그러나 그럼에도 불구하고 그것은 매력처럼 작동했습니다. –

관련 문제