我得到緩衝區溢出,而我的應用程序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
e和更快的(小)期間將解決這個問題。
有人能告訴我如何擺脫緩衝區溢出?
感謝您的回答,所有數據處理都在輔助線程中完成。 bufferSize是使用靜態方法od AudioRecord(getMinBufSize)獲取的。 @overwrite確實缺失。 –
,我昨天試圖將minBufSize乘以2,但只是將「BufferOverlow」味精的頻率降低到〜30秒。無論如何,與2相乘直到現在爲止我嘗試過的最佳變體,但我想徹底擺脫它,因爲我的記錄在1:3小時後停止。 –
所以這意味着在乘以2之後,沒有緩衝區溢出的問題,但是記錄在一段時間之後停止?您可以在釋放之前嘗試重置記錄器。 –