Otrzymuję przepełnienie bufora podczas RECORDING
z moją aplikacją. Nagrywanie odbywa się w Service
. Nie mogłem zrozumieć, dlaczego otrzymuję tę wiadomość od AudioFlinger
.AudioRecord: przepełnienie bufora?
Poniżej przedstawiam obiekt AudioRecord
i ustawię jego wywołania zwrotne.
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 zwrotna:
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)
{}
};
Podejrzewam, że problem jest związany z: aRecorder.setPositionNotificationPeriod(framePeriod);
- może okres ten jest zbyt duży dla tego bufferSiz
e i szybszy (mniejszy) okres rozwiąże problemu .
Czy ktoś może mi powiedzieć, jak pozbyć się przepełnienia bufora?
Dzięki za odpowiedź, wszystkie przetwarzanie danych odbywa się w wątku dodatkowym. bufferSize jest pobierany za pomocą statycznej metody AudioRecord (getMinBufSize). @overwrite rzeczywiście brakowało. –
i próbowałem wczoraj, aby pomnożyć minBufSize z 2, ale po prostu zmniejszałem częstotliwość "BufferOverlow" msg do ~ 30 sekund. W każdym razie, pomnożenie z 2 było do tej pory najlepszym wariantem, którego próbowałem, ale chcę się go całkowicie pozbyć, ponieważ moje nagranie kończy się po 1: 3 godzinach. –
Oznacza to, że po pomnożeniu przez 2, nie ma problemu z przepełnieniem bufora, ale nagrywanie zatrzymuje się po określonym czasie? Możesz spróbować zresetować nagrywarkę przed jej zwolnieniem. –