2011-11-20 100 views
1

我正在嘗試編寫一個簡單的程序來與Pygame一起播放音樂文件。我的腳本在下面。用Pygame播放音樂不可靠

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)命令之後立即出現錯誤。這種情況不正常;我只是試着運行這個程序,而不修改代碼,讓它工作一次,之後就會遇到這個問題。有誰知道什麼可能會導致這些看似隨機播放問題?

回答

4

我想這是因爲實際的音樂播放發生在另一個線程上,所以它有時還沒有完成從您第一次撥打電話get_busy()開始。

如果是這樣的話,好像在任何pygame的或SDL_mixer錯誤(這pygame的使用。)

至於檢查的音樂完成的另一種方式,你可以得到pygame的,給你一個事件時,音樂完成並檢查。像這樣:

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