在pygame中(或者甚至在python中),如何在声音播放时创建一个继续执行的循环?

Alk*_*yst 4 python audio pygame

在pygame中有一种方法可以判断声音是否已经播放完毕?我阅读set_endeventget_endevent文档,但我无法理解或找到一个例子.

我正在尝试专门执行以下操作:

  1. 发出声音
  2. 声音在播放时继续循环播放
  3. 当声音播放完毕后,继续前进.

我确实检查了其他问题 - 没有找到任何专门针对python/pygame的问题.

谢谢!

J. *_*sen 6

诀窍是,pygame.mixer.Channel当你调用play()sound(pygame.mixer.Sound)的方法时,你会得到一个类型的对象.您可以使用频道的get_busy()方法测试声音是否已完成播放.

一个简单的例子:

import pygame.mixer, pygame.time

mixer = pygame.mixer

mixer.init()
tada = mixer.Sound('tada.wav')
channel = tada.play()

while channel.get_busy():
    pygame.time.wait(100)  # ms
    print "Playing..."
print "Finished."
Run Code Online (Sandbox Code Playgroud)

这些示例假设您有一个名为'tada.wav'的声音文件.

  • +1。wait 调用可防止程序占用 CPU 核心,从而节省能源并保持性能。 (2认同)

小智 5

您可以使用如下代码:

import pygame
pygame.mixer.music.load('your_sound_file.mid')
pygame.mixer.music.play(-1, 0.0)
while pygame.mixer.music.get_busy() == True:
    continue
Run Code Online (Sandbox Code Playgroud)

并且,它不必是.mid文件。可以是pygame可以理解的任何文件类型。