Android,最大缓冲区大小

时间:2013-11-11 01:02:56

标签: android audio-recording

我实时捕捉声音以缓冲,然后处理这些数据。但有时候我会收到警告:缓冲区溢出导致处理过程中的问题。

我创建了AudioRecord:

    bufferSize = ???;
    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
                    RECORDER_SAMPLERATE, RECORDER_CHANNELS,
                    RECORDER_AUDIO_ENCODING, **bufferSize**);

但是没有getMaximumBufferSize的方法或类似的东西(只有getMinBufferSize - 但这里是缓冲区owerflow)。而且我认为设置自己的缓冲区大小并不是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

根据API

  

创建后,AudioRecord对象初始化其关联的音频缓冲区,它将填充新的音频数据。在构造期间指定的此缓冲区的大小决定了AudioRecord在“过度运行”尚未读取的数据之前可以记录多长时间。应该以比总记录缓冲区大小更小的块的音频硬件读取数据。

您的缓冲区应该足够大,以支持您想要支持的缓冲数据量,即比特率*时间,并且您需要确保始终从AudioRecord读取,以便它不会填充缓冲区,并且您读取的块的大小小于AudioRecorder中的缓冲区大小。我喜欢以8k块读/写,但也看过其他值。

相关问题