2015-05-02 87 views
8

目前,我用SOX這樣的:使用Sox爲語音檢測和流

sox -d -e u-law --endian little -b 8 -c 1 -r 8000 -t ul - silence 1 0.3 1% 1 0.3 1% 

以供參考,這是記錄從默認麥克風音頻輸出小端,在8位和一個8K ULAW格式的音頻率。效果過濾器會修剪音頻,直到噪音達到閾值0.3秒,然後繼續記錄,直到有0.3秒的靜音。所有這些都傳輸到stdout,我用它來傳輸到遠程服務器。

我正在使用所有這些來記錄一點聲音,並在完成發言時完成。要觸發sox,我使用專門的硬件來觸發錄製的開始。只要支持動態格式化/編碼,我就可以切換到幾乎任何音頻格式或編解碼器。我的目標平臺是raspberry pi 2 B上的raspbian。

我理想的解決方案是使用vad在用戶說完後停止錄製。我的希望是,即使有背景喋喋不休,這也能起作用。然而,在VAD影響該國的SOX文檔:

建議使用的規範作用,但要記住,無論 反向也不規範是適用於流音頻使用。

我還沒有能夠將參數拼湊在一起,以獲得流派和流媒體工作。是否可以使用vad效果來停止錄音,同時仍然保持stdin-> sox-> stdout管道?有更好的選擇嗎?

回答

1

是否有可能使用vad效果來停止錄音,同時仍然保持stdin-> sox-> stdout管道?

編號vad效果可以僅從音頻正面調整靜音。所以你只能用它來檢測錄製開始,而不是結束和暫停。

reversenorm過濾器在產生任何輸出數據之前需要所有輸入數據,這就是爲什麼它們不能用於流式傳輸。

關鍵是要爲silence過濾器選擇一個好的閾值,所以它需要「背景喋喋不休」。

您也可以在silence之前使用noisered(帶有基於之前錄製的配置文件)以減少觸發錄製的噪音,但這也會影響輸出,並且可能不會將「背景顫音」當作噪音。