2013-11-14 140 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()