Я получаю переполнение буфера в то время как RECORDING
с моим приложением. Запись выполняется в Service
. Я не мог понять, почему я получаю это сообщение от AudioFlinger
.AudioRecord: переполнение буфера?
Ниже я создаю объект AudioRecord
и устанавливаю его обратные вызовы.
bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
aRecorder = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize);
aRecorder.setRecordPositionUpdateListener(updateListener);
bytesPerSample = bitsPerSample/8;
int bytesPerFrame = nChannels * bytesPerSample;
framePeriod = bufferSize/bytesPerFrame; // nr of frames that can be kept in a bufferSize dimension
int result = aRecorder.setPositionNotificationPeriod(framePeriod);
buffer = new byte[bufferSize];
audioRecord обратного вызова:
private AudioRecord.OnRecordPositionUpdateListener updateListener = new AudioRecord.OnRecordPositionUpdateListener(){
public void onPeriodicNotification(AudioRecord recorder){
int result = aRecorder.read(buffer, 0, buffer.length);
}
public void onMarkerReached(AudioRecord recorder)
{}
};
Я подозреваю, что проблема связана с: aRecorder.setPositionNotificationPeriod(framePeriod);
- может быть, период слишком велик для этого bufferSiz
е и быстрее (меньше) период будет решить вопрос ,
Может ли кто-нибудь сказать мне, как избавиться от переполнения буфера?
Спасибо за ваш ответ, вся обработка данных выполняется во вторичном потоке. bufferSize берется с использованием статического метода od AudioRecord (getMinBufSize). @overwrite действительно отсутствовал. –
, и я попытался вчера умножить minBufSize на 2, но просто уменьшил частоту «BufferOverlow» msg до ~ 30 секунд. Во всяком случае, умножение на 2 было до сих пор лучшим вариантом, который я пробовал, но я хочу полностью избавиться от него, так как моя запись останавливается через 1: 3 часа. –
Значит, после умножения на 2 проблема с переполнением буфера отсутствует, но запись останавливается через определенное время? Вы можете попытаться сбросить рекордер, прежде чем выпускать его. –