我实时捕捉声音以缓冲,然后处理这些数据。但有时候我会收到警告:缓冲区溢出导致处理过程中的问题。
我创建了AudioRecord:
bufferSize = ???;
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, **bufferSize**);
但是没有getMaximumBufferSize的方法或类似的东西(只有getMinBufferSize - 但这里是缓冲区owerflow)。而且我认为设置自己的缓冲区大小并不是一个好的解决方案。
答案 0 :(得分:0)
根据API:
创建后,AudioRecord对象初始化其关联的音频缓冲区,它将填充新的音频数据。在构造期间指定的此缓冲区的大小决定了AudioRecord在“过度运行”尚未读取的数据之前可以记录多长时间。应该以比总记录缓冲区大小更小的块的音频硬件读取数据。
您的缓冲区应该足够大,以支持您想要支持的缓冲数据量,即比特率*时间,并且您需要确保始终从AudioRecord
读取,以便它不会填充缓冲区,并且您读取的块的大小小于AudioRecorder
中的缓冲区大小。我喜欢以8k块读/写,但也看过其他值。