在Python / pygame中,我希望重复某个wav文件(在循环中由pygame.mixer.Sound("foo.wav").play()
读取,并让它们一个接一个地播放,最好是在完成之后或默认延迟(1500ms工作)
到目前为止,换句话说,我有这个:
for x in range(0, 5):
pygame.mixer.Sound("foo.wav").play()
然而,当它播放时,它会一次播放。
使用pygame.time进行延迟会使窗口挂起,就像tkinter .after(1500)一样,我似乎无法找到一个直接的方法来使用库或python执行此操作,或者甚至是一个播放内容的示例我打算用延迟的几个音调。我可以用更多的标准替换pygame' Python的音频插件,或者如果按钮按下它可能会使用线程,如果它需要hackery单独使用pygame混音器来做这样的事情。
如果需要,可以使用一些方便的参考: http://www.pygame.org/docs/ref/music.html https://docs.python.org/2/library/tkinter.html
答案 0 :(得分:2)
最直接的方法似乎是通过Tkinter after
方法获取每个声音的长度并在给定时间过后播放下一个声音。
self.sound_queue = [pygame.mixer.Sound(s) for s in ('foo.wav', 'bar.ogg', 'baz.mp3')]
def play_queue(self, q, num=0)
sound = q[num]
duration = int(sound.get_length() * 1000)
sound.play()
if num < len(q)-1:
self.root.after(duration, self.play_queue, q, num+1)
self.play_queue(self.sound_queue)
您还可以查看pygame.mixer.Channel.queue()
和pygame.mixer.Channel.set_endevent
,因为这些可能是执行此类操作的预期方式。