民间,
我正在通过设备的麦克风读取音频。这是在后台线程中运行的伪代码:
while(true) {
if (stopRecordingRequested()) {
break;
}
int bytesRead = recorder.read(in, inSize);
// do the processing
}
我注意到即使房间里有静音,方法“read”也会返回数据。
我正在考虑一个紧凑的循环,例如上面的那个可能只是在房间静音的时候固定CPU。
是否可以配置录音机,使read()只等到有噪音?
或者,也许有一种不同于CPU的不同技术。
提前感谢您的帮助。
答案 0 :(得分:0)
是否可以配置录音机,使read()只等到有噪音?
没有。当声级低于某一点时,AudioRecord
类不够复杂,无法停止录音。
或者,也许有一种不同于CPU的不同技术。
很简单,不要使用这么紧的循环。记住一个像你描述的那样紧的循环将每隔几毫秒或几十毫秒执行,这样做是不明智的。
你有两个基本选择......
postDelayed
上使用类似Handler
调用的内容,每隔4或4.5秒读取一次缓冲区(以避免缓冲区溢出。AudioRecord.OnRecordPositionUpdateListener
回调并在缓冲区的末尾设置一个位置(但不是最后一个 - 再次以避免溢出)并在每次调用侦听器时读取数据。