2016-12-25 107 views
0

在Python/pygame的,我渴望重复某个WAV文件(pygame.mixer.Sound("foo.wav").play()在一个循环中读取,并让他们打了一个又一个,最好是最后一次后已经完成,或由默认的延迟(1500毫秒作品)在python中声音完成之前?

所以到目前为止,释义,我有这样的:

for x in range(0, 5): 
     pygame.mixer.Sound("foo.wav").play() 

当它播放,但是,它起着一下子

使用pygame.time的延迟挂起的窗口一样,Tkinter的。经过(1500) ,我似乎无法找到一个直接的方法来做到这一点与库或python甚至是一个例子按照我的意图延迟播放几个音。我可以用Pygame替代python的'标准'音频插件,或者如果它需要按钮按下,可能会使用线程,如果它需要hackery单独使用pygame混音器来做这样的事情。

如果需要一些方便的引用: http://www.pygame.org/docs/ref/music.html https://docs.python.org/2/library/tkinter.html

回答

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,因为这些可能是做这样的事情的预期方式。

相关问题