0

我实时捕捉声音进行缓冲,然后处理这些数据。但有时我会收到警告:缓冲区溢出处理中出现问题的原因是什么。

我创建了音频记录:

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

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

4

1 回答 1

1

根据API

在创建时,AudioRecord 对象初始化其关联的音频缓冲区,它将用新的音频数据填充。这个缓冲区的大小,在构造过程中指定,决定了 AudioRecord 在“溢出”尚未读取的数据之前可以记录多长时间。应该从音频硬件中以小于总记录缓冲区大小的块读取数据。

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

于 2013-11-11T01:56:23.813 回答