2010-08-24 107 views
0

我希望你可以幫助我一個程序,我試圖寫在VB.NET中。如何檢測WMA流緩衝區中的音頻靜音?

我有一個標準的WMA流,不斷通過互聯網流。我需要編寫一個應用程序來傳輸這個音頻,並尋找任何「沉默」時期。當它檢測到沉默時,它會運行一個事件。

出於此目的,靜音被定義爲三秒的零級音頻。從技術角度來看,這個流程仍在繼續,但是沒有可聽見的噪音通過它傳播。

但是,我希望程序在仍處於「緩衝區」時檢測靜音。也就是說,在程序檢測到它在那裏之前,用戶不會聽到這種沉默。

音頻不應該停止,因爲它正在分析這種沉默 - 它需要不斷地向用戶播放音頻。

我願意使用任何合適的API就在那裏 - 如BASS,或內置於點網平臺上的Windows媒體擴展。

謝謝!

回答

0

嗯,我正是這樣做在我的產品:有多種網絡音頻流捕獲和解碼爲PCM,然後各種分析對它們執行,其中一人beeing靜音檢測。

如果你想創造一些像它自己,使用Windows Media格式SDK用於.NET從這裏:

http://windowsmedianet.sourceforge.net/

然後,使用IWMReader和它的OnSample回調,會爲你提供PCM數據。

然後,計算最大輸入電平小的緩衝區,看到3秒的水平,如果這是你的treshold下方,觸發一個事件。

1

如果你有PCM數據,你可以只取幾個樣本的平均值,如果它低於閾值考慮沉默。我假設你正在播放音頻,你可以訪問未壓縮的數據。

不幸的是,我不知道WMA編解碼器的細節,但我認爲最簡單的方法是隻需要幾個樣本的平均值。