2012-06-29 25 views
2

我有一組原始聲音數據樣本,我試圖製作一個圖形播放器,在播放音頻時顯示波形以及音頻的進度。使用進度條播放聲音數據的Python模塊?

我可以畫出很容易足以與matplotlib,我可以玩AUDIOLAB的,但AUDIOLAB的似乎有沒有辦法讓播放頭的「當前位置」。

是否有任何模塊可以做到這一點?

+0

http://wiki.python.org/moin/Audio可能是有用的。 – Amber

回答

1

如果你知道的音頻幀的數量,以及採樣率,你不需要AUDIOLAB告訴你當前的位置,你可以計算它。

Sndfile.frames/Sndfile.samplerate將以秒爲單位給出文件的持續時間,然後可以將此與自從聲音文件開始計算相對當前位置以來的經過時間一起使用。爲了說明一個道理:

import time 

start_time = time.time() 
duration_s = sndfile.frames/sndfile.samplerate 

while 1: 
    elapsed_time = time.time() - start_time 
    current_location = elapsed_time/float(duration_s) 
    if current_location >= 1: 
     break 
    time.sleep(.01) 

要在實踐中實現這一點,你可以在父線程中使用Python threading,異步播放聲音文件,然後計算出當前的位置(如上)。要處理播放失敗的情況,請將您的呼叫打包到異常處理程序中的scikits.audiolab.play(),然後使用threading.Event在play()調用失敗時將事件傳遞給父線程。

在父線程你會那麼需要檢查event.isSet()相應:

if current_location >= 1 or fail_event.isSet(): 
    break 
1

如果你只是想一個進度條,而不是「求」功能 - 只是想顯示多少做就走了,你可以輕鬆地構建,使用tkintr並不管你現在有整合。

否則,

基本上有兩個模塊,給你一個進度條。

http://code.google.com/p/py-audio-gui/wiki/PageName

PyAudio只能播放MP3。主要缺點。但更容易使用。

有一個叫小吃另一個模塊,它支持很多不同的格式,並有進度條功能爲好。

這是一個有點難以用,但我聽說他們也的確讓一些可用的好的教程/樣本最近。

所以,如果你想,我會建議轉移到小吃。

乾杯。