在pygame中有没有办法判断声音是否已经播放完毕?我阅读了set_endevent
和get_endevent
文档,但我无法理解它或找到一个例子。
我正在尝试专门执行以下操作:
我确实检查了其他问题 - 没有找到任何专门针对python / pygame的内容。
谢谢!
答案 0 :(得分:6)
诀窍在于,当您调用声音的pygame.mixer.Channel
方法(play()
)时,会得到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."
这些示例假设您有一个名为' tada.wav'的声音文件。
答案 1 :(得分: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
并且,它不必是.mid文件。它可以是pygame理解的任何文件类型。
答案 2 :(得分:0)
要使用set_endevent,您必须执行以下操作:
# 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"
...
答案 3 :(得分:0)
pygame.mixer.pre_init(44100, 16, 2, 4096) # setup mixer to avoid sound lag
pygame.init()
startmusic="resources\snd\SGOpeningtheme.ogg"
pygame.mixer.set_num_channels(64) # set a large number of channels so all the game sounds will play WITHOUT stopping another
pygame.mixer.music.load(startmusic)
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(-1) # the music will loop endlessly
执行上述代码后,音乐将继续播放,直到您停止播放或按照pygame网站信息淡出。
你可以循环到你的心脏内容,音乐将继续。如果您需要播放两次音乐,而不是-1则1.然后音乐将播放一次并重复播放。
您可以通过执行pygame.mixer.music.get_busy()
来检查流是否正在播放。
如果它返回True则为。错误意味着它已经完成。