2013-11-11 5 views
0

Я записываю звук в реальном времени в буфер, а затем обрабатываю эти данные. Но иногда я получаю предупреждение: переполнение буфера, какая причина проблемы при обработке.Android, максимальный размер буфера

Я создал AudioRecord:

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

но не метод getMaximumBufferSize или semthing как то (только getMinBufferSize - но вот буфер owerflow). И я думаю, что установка собственного размера буфера не является хорошим решением.

ответ

0

Согласно API:

После создания объекта AudioRecord инициализирует связанный с ним звуковой буфер, который будет наполняться новыми аудиоданных. Размер этого буфера, указанный во время построения, определяет, как долго AudioRecord может записывать до того, как данные «перегружаются» еще не были прочитаны. Данные должны считываться с аудиооборудования в кусках размеров, меньших общего размера буфера записи.

Ваш буфер должен быть достаточно большим для количества забуференных данных, которые вы хотите поддержать, т.е. битрейта * время, и вы должны убедиться, что вы читаете из AudioRecord последовательно, так что он не заполняет буфер , и размер читаемых фрагментов меньше размера буфера в AudioRecorder. Мне нравится читать/писать в 8k кусках, но и другие ценности.

Смежные вопросы