2013-10-17 29 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