使用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)
但是我遇到了一些让人困惑的问题。每次都会打印出"[文件名]已加载!"
的消息,但有时候程序根本没有进入循环,直接就退出了。如果我检查一下pygame.mixer.music.get_busy()
的状态,发现它在执行pygame.mixer.music.play(1)
命令后立刻显示为假。这种情况时好时坏;我刚刚运行了程序,没有对代码做任何修改,有一次它正常工作,接着又遇到了这个问题。有没有人知道是什么原因导致这些看起来随机的播放问题?
1 个回答
4
我想这可能是因为音乐播放是在另一个线程中进行的,所以当你第一次调用 get_busy()
时,有时候它还没开始播放。
如果真是这样的话,那就像是pygame或者它使用的SDL_mixer里有个小问题。
作为检查音乐是否播放完的另一种方法,你可以让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