私のアプリで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は、AudioRecord(getMinBufSize)の静的メソッドを使用して取得されます。 @overwriteは本当に欠けていました。 –
と私は昨日minBufSizeに2を掛けようとしましたが、 "BufferOverlow" msgの頻度を〜30秒に減らしていました。とにかく、2を乗算することは今まで私が試した最良の変種でしたが、私は1:3時間後に録音が止まるので完全に取り除きたいと思います。 –
これは、2を掛けた後に、バッファオーバーフローの問題はありませんが、一定の時間が経過すると録画が停止することを意味していますか?レコーダーをリセットする前に、リセットすることができます。 –