2016-12-25 36 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,因爲這些可能是做這樣的事情的預期方式。

相關問題