在pygame中(或者甚至在一般的python中),我如何创建一个循环,在声音播放时保持执行?
在pygame中,有没有办法判断声音是否已播放完毕?我阅读了在pygame中(或者甚至在一般的python中),我如何创建一个循环,在声音播放时保持执行?,python,pygame,audio,Python,Pygame,Audio,在pygame中,有没有办法判断声音是否已播放完毕?我阅读了set\u endevent和get\u endevent文档,但我无法理解它或找到一个示例 我试图具体做到以下几点: 播放声音 当声音播放时,继续循环 声音播放完毕后,继续 我确实检查了其他被问到的问题——没有发现任何专门针对python/pygame的问题 谢谢 您可以使用如下代码: import pygame pygame.mixer.music.load('your_sound_file.mid') pygame.mixer.m
set\u endevent
和get\u endevent
文档,但我无法理解它或找到一个示例
我试图具体做到以下几点:
谢谢 您可以使用如下代码:
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
# You can have several User Events, so make a separate Id for each one
END_MUSIC_EVENT = pygame.USEREVENT + 0 # ID for music Event
pygame.mixer.music.set_endevent(END_MUSIC_EVENT)
running = True
# Main loop
while running:
events = pygame.event.get()
if events:
for event in events:
...
if event.type == END_MUSIC_EVENT and event.code == 0:
print "Music ended"
...
而且,它不必是.mid文件。它可以是pygame理解的任何文件类型。要使用它,您必须执行以下操作:
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
# You can have several User Events, so make a separate Id for each one
END_MUSIC_EVENT = pygame.USEREVENT + 0 # ID for music Event
pygame.mixer.music.set_endevent(END_MUSIC_EVENT)
running = True
# Main loop
while running:
events = pygame.event.get()
if events:
for event in events:
...
if event.type == END_MUSIC_EVENT and event.code == 0:
print "Music ended"
...
执行上述代码后,音乐将继续播放,直到您停止播放或根据pygame网站信息淡出。
你可以随心所欲,音乐就会继续。如果你需要播放两次音乐,而不是-1放1。然后音乐将播放一次并重复一次。
您可以通过执行pygame.mixer.music.get_busy()
来检查流是否正在播放。
如果返回True,则为。False表示它已完成 诀窍在于,当调用声音的
play()
方法(pygame.mixer.sound
)时,您会得到类型为pygame.mixer.Channel
的对象。您可以使用频道的get\u 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."
这些示例假设您有一个名为“tada.wav”的声音文件。听起来您需要。。。听众。等待调用可以防止程序占用CPU内核,从而节省能源并保持性能。