2016-12-25 3 views
0
Pythonの/ pygameので

、私はループでpygame.mixer.Sound("foo.wav").play()で読み取り(特定のwavファイルを繰り返すことを望む、そしてそれらは、好ましくは、後に最後に完了したか、デフォルトの遅延(1500msの作品で、次々と再生してい)次の前に、pythonでサウンドが完了していますか?

ので、これまで、言い換え、私はこれがあります。それは再生すると

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

が、しかし、それはすべてを一度に果たしているの遅れをpygame.timeを使用して

がウィンドウをハング、Tkinterのの.afterがそうであるように(1500)私はライブラリやPython、あるいはexplを使ってこれを行うための簡単な手段を見つけることができないようです私が意図しているように、何曲か遅れて演奏しています。私はpygameをPython用のより標準的なオーディオドロップインに置き換えることができます。また、ボタン操作の場合はスレッドファイリングを使用することもできます。

必要に応じて、いくつかの便利な参照: 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で見ることができます。

関連する問題