2011-11-20 5 views
1

나는 파이 게임으로 음악 파일을 재생하는 간단한 프로그램을 작성하려고합니다. 내 스크립트는 아래에 있습니다.파이 게임과 음악 재생하기

import pygame 

import sys 
import time 

FRAMERATE = 30 

if len(sys.argv) < 2: 
    sys.exit(2) 

filename = sys.argv[1] 

clock = pygame.time.Clock() 

pygame.init() 

pygame.mixer.init(frequency=44100) 
pygame.mixer.music.load(filename) 
print "%s loaded!" % filename 
pygame.mixer.music.play(1) 

while pygame.mixer.music.get_busy(): 
    clock.tick(FRAMERATE) 

그러나 난 약간의 수수께끼 같은 문제가 있습니다. "[File name] loaded!" 메시지는 항상 인쇄되지만 때때로 루프에 들어가서 즉시 종료됩니다. pygame.mixer.music.get_busy()의 상태를 확인하면 pygame.mixer.music.play(1) 명령 바로 다음에 false로 표시됩니다. 이것은 이상하게 발생합니다. 방금 코드를 변경하지 않고 프로그램을 실행 해 보았습니다. 한 번 작동하고 바로이 문제가 발생했습니다. 아무도 겉으로보기에 무작위 재생 문제를 일으킬 수있는 것을 알고 있습니까?

답변

4

실제로 음악 재생이 다른 스레드에서 일어나기 때문에 처음에는 get_busy()이라고 부르는 시점부터 시작하지 않는 경우가 있습니다. 그런 경우에는

, 그것은 파이 게임 또는에는 SDL_mixer 중 하나의 버그처럼 보인다 (파이 게임을 사용합니다.)

음악 완성 검사의 다른 방법으로, 당신은 당신에게 이벤트를 제공하기 위해 파이 게임을 얻을 수있을 때 음악이 끝나고 확인합니다. 좋아요 :

pygame.mixer.music.set_endevent(pygame.USEREVENT) 

quit = False 
while not quit: 
    clock.tick(FRAMERATE) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
     quit = True 
     if event.type == pygame.USEREVENT: 
     print "Music ended" 
     quit = True