在Python/pygame中,我希望重复某个wav文件(由pygame.mixer.Sound("foo.wav").play()
循环播放,并让它们一个接一个地播放,最好是在最后一个完成后或默认延迟(1500 毫秒有效)
到目前为止,解释一下,我有这个:
for x in range(0, 5):
pygame.mixer.Sound("foo.wav").play()
然而,当它播放时,它会同时播放。
使用 pygame.time 进行延迟会挂起窗口,就像 tkinter .after(1500) 一样,我似乎无法找到一种直接的方法来使用库或 python 来执行此操作,甚至无法找到一个播放一些音调的示例按我的意愿延迟。我可以用更“标准”的 Python 音频插件来代替 pygame,或者如果需要按下按钮,或者需要黑客单独使用 pygame 混合器来完成这样的事情,则可能使用线程。
如果需要的话,一些方便的参考:http://www.pygame.org/docs/ref/music.html http://www.pygame.org/docs/ref/music.html
https://docs.python.org/2/library/tkinter.html https://docs.python.org/2/library/tkinter.html
最直接的方法似乎是通过 Tkinter 获取每个声音的长度并在给定时间过后播放下一个声音after
method.
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() http://www.pygame.org/docs/ref/mixer.html#pygame.mixer.Channel.queue and pygame.mixer.Channel.set_endevent http://www.pygame.org/docs/ref/mixer.html#pygame.mixer.Channel.set_endevent,因为这些可能是做这类事情的预期方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)