我想从麦克风录制音频并访问它以进行近乎实时的播放。我不确定如何使用 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();
该代码如何将其读取与记录速率同步尚不清楚 - 布尔“isRecording”是否在其他地方正确排序打开和关闭?看起来这段代码要么读得太频繁,要么读得太少,这取决于读写需要多长时间。
该站点文档还说 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 message that another 250 ms of fresh audio is available
ie, read it and send it somewhere
)
我需要找到一些特定的代码,让我能够以小于约 500 毫秒的延迟捕获和处理麦克风音频。Android 提供了另一个名为 MediaRecorder 的类,但它不支持流式传输,我可能希望通过 Wi-Fi 网络近乎实时地流式传输实时麦克风音频。我在哪里可以找到一些具体的例子?