AudioRecorder读取是否有等待状态?

时间:2013-10-17 21:48:02

标签: android

民间,

我正在通过设备的麦克风读取音频。这是在后台线程中运行的伪代码:

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

我注意到即使房间里有静音,方法“read”也会返回数据。

我正在考虑一个紧凑的循环,例如上面的那个可能只是在房间静音的时候固定CPU。

是否可以配置录音机,使read()只等到有噪音?

或者,也许有一种不同于CPU的不同技术。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  

是否可以配置录音机,使read()只等到有噪音?

没有。当声级低于某一点时,AudioRecord类不够复杂,无法停止录音。

  

或者,也许有一种不同于CPU的不同技术。

很简单,不要使用这么紧的循环。记住一个像你描述的那样紧的循环将每隔几毫秒或几十毫秒执行,这样做是不明智的。

你有两个基本选择......

  1. 当您设置音频格式时,采样率和缓冲区大小会以这样的方式进行,例如,您可以使用足够的缓冲区进行5秒的录制。然后,您可以在postDelayed上使用类似Handler调用的内容,每隔4或4.5秒读取一次缓冲区(以避免缓冲区溢出。
  2. 使用AudioRecord.OnRecordPositionUpdateListener回调并在缓冲区的末尾设置一个位置(但不是最后一个 - 再次以避免溢出)并在每次调用侦听器时读取数据。