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