用Pygame播放音乐不可靠

时间:2011-11-20 23:59:02

标签: python 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)命令后立即显示为false。这种情况不规律地发生;我只是尝试运行该程序而不更改代码,让它工作一次并在之后遇到此问题。有谁知道这可能导致这些看似随机的播放问题?

1 个答案:

答案 0 :(得分: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