【问题标题】:Playing music with Pygame unreliable用 Pygame 播放音乐不可靠
【发布时间】:2011-11-20 23:59:01
【问题描述】:

我正在尝试编写一个简单的程序来使用 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) 命令之后它似乎立即为假。这种情况不规律地发生;我只是尝试在不更改代码的情况下运行程序,让它运行一次,然后立即遇到这个问题。有谁知道是什么导致了这些看似随机的播放问题?

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    我想这是因为实际的音乐播放是在另一个线程上进行的,所以它有时在您第一次调用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2019-05-06
      • 1970-01-01
      • 2018-12-27
      • 2011-02-25
      • 2021-05-05
      相关资源
      最近更新 更多