2013-10-17 33 views
0

Folk,AudioRecorder讀取有沒有等待狀態?

我正在從設備的麥克風上讀取音頻。這是在後臺線程中運行的僞代碼:

while(true) { 
    if (stopRecordingRequested()) { 
     break; 
    } 
    int bytesRead = recorder.read(in, inSize); 
    // do the processing 
} 

我注意到的是,方法「讀」返回的數據,即使有沉默在房間裏。

我在考慮一個緊密的循環,比如上面的那個可能簡單地掛住CPU,即使房間沒有聲音。

是否有可能配置錄音機,使read()只是等到有一些噪音?

或者,也許有不同的技術,不釘住CPU。

非常感謝您的幫助。

回答

0

是否可以配置錄音機,使read()只是等到有一些噪音?

編號AudioRecord類不夠複雜,在聲音級別降到某個點以下時停止錄音。

或者,也許有不同的技術,不釘住CPU。

很簡單,不要使用這樣一個緊密的循環。考慮到一個循環與你所描述的一樣緊密,每隔幾毫秒或幾十毫秒就會執行一次,這樣做似乎不明智。

你有兩個基本的選擇...

  1. 當您設置的音頻格式,採樣率和緩衝區大小,你必須這樣做,例如足夠的緩衝區記錄的5秒。然後,您可以使用類似於postDelayed的呼叫,在Handler上每4或4.5秒鐘讀一次緩衝區(以避免緩衝區溢出
  2. 使用AudioRecord.OnRecordPositionUpdateListener回調函數,並設置一個位置朝向緩衝區的末端(但不是最終 - 再次避免超限),並在每次收聽時都讀取數據。
+0

謝謝你的幫助。 – Peter