Ricevo buffer overflow mentre RECORDING
con la mia app. La registrazione viene eseguita in un Service
. Non riesco a capire perché sto ricevendo questo messaggio da AudioFlinger
.AudioRecord: buffer overflow?
Sotto istanziare l'oggetto AudioRecord
e impostarne le richiamate.
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];
Il callback 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)
{}
};
Ho il sospetto che il problema è legato alla: aRecorder.setPositionNotificationPeriod(framePeriod);
- forse il periodo è troppo grande per questo bufferSiz
e ed una più veloce (più piccolo) periodo risolverà il problema .
Qualcuno potrebbe dirmi come sbarazzarsi del buffer overflow?
Grazie per la risposta, tutta l'elaborazione dei dati avviene in un thread secondario. bufferSize viene utilizzato con il metodo statico di AudioRecord (getMinBufSize). il @overwrite mancava davvero. –
e ho provato ieri a moltiplicare minBufSize con 2, ma riducevo la frequenza del msg "BufferOverlow" a ~ 30 sec. Ad ogni modo, moltiplicando con 2 fino ad ora è stata la migliore variante che ho provato, ma voglio eliminarla completamente, poiché la mia registrazione si interrompe dopo 1: 3 ore. –
Quindi questo significa che dopo aver moltiplicato con 2, non c'è alcun problema di overflow del buffer ma la registrazione si sta fermando dopo un certo periodo di tempo? Potresti provare a resettare il registratore prima di rilasciarlo. –