我想从麦克风录制音频并访问它以便近乎实时地播放.我不确定如何使用Android AudioRecord类来录制一些麦克风音频并快速访问它.
对于AudioRecord类,官方网站说'应用程序及时轮询AudioRecord对象','填充缓冲区的大小决定了在超载未读数据之前记录的时间长度'.后来建议在轮询频率较低时应使用更大的缓冲区.他们实际上从未在代码中显示示例.
我在书中看到的一个例子是使用AudioRecord类连续读取一个新填充了实时麦克风音频的缓冲区,然后应用程序将这些数据写入SD文件.伪代码看起来像 -
set up AudioRecord object with buffer size and recording format info
set up a file and an output stream
myAudioRecord.startRecording();
while(isRecording)
{
// myBuffer is being filled with fresh audio
read audio data into myBuffer
send contents of myBuffer to SD file
}
myAudioRecord.stop();
Run Code Online (Sandbox Code Playgroud)
这段代码如何将其读数与记录速率同步还不清楚 - 布尔"isRecording"是否在其他地方正确地打开和关闭?看起来这段代码可能过于频繁或过于频繁地读取,具体取决于读取和写入所需的时间.
网站doc还说AudioRecord类有一个名为OnRecordPositionUpdateListener的嵌套类,它被定义为一个接口.该信息表明,您以某种方式指定了您希望收到录制进度通知的时间段以及事件处理程序的名称,并且会以指定的频率自动调用您的事件处理程序.我认为伪代码中的结构会像 -
set target of period update message = myListener
set period to be about every 250 ms
other code
myListener()
{
if(record button was recently tapped)
handle …
Run Code Online (Sandbox Code Playgroud)