2013-11-14 179 views
2

有没有方法检查音频文件是否使用winsound播放?Python + winsound - 检查音频文件是否正在播放

这个想法是音乐在后台播放,而用户可以通过终端输入数据。为了达到这个目的,我决定使用SND_ASYNC。

但事情是,一旦文件完成播放,我希望它播放另一个音频文件,但我无法检查音频文件实际上播放时。

我想我可以检查音频文件的时间长短,然后根据它播放不同的歌曲,但我猜测这是一种更简单的方法。

这里的任何人都知道更简单的解决方案吗?

回答

1

有没有办法做到这一点winsound;这是一个简单而简单的模块。


然而,有一个非常简单的方法来间接地做到这一点:创建一个后台线程同步播放声音,然后设置一个标志。甚至只是使用线程本身作为标志。例如:

import threading 
import winsound 

t = threading.Thread(target=winsound.PlaySound, args=[sound, flags]) 
while True: 
    do_some_stuff() 
    t.join(0) 
    if not t.is_alive(): 
     # the sound has stopped, do something 

在另一方面,如果你想要做的就是尽快发挥另一种声音,因为每一个末端,只是把他们都在一个队列:

import queue 
import threading 
import winsound 

def player(q): 
    while True: 
     sound, flags = q.get() 
     winsound.PlaySound(sound, flags) 

q = queue.Queue() 
t = threading.Thread(target=player, args=[q]) 
t.daemon = True 
q.push(a_sound, some_flags) 
q.push(another_sound, some_flags) 
do_stuff_for_a_long_time()