AudioTrack オブジェクトがアンダーバッファになった場合にコールバックまたは何かを取得する方法を見つけようとしています。これにより、再充填されるまで再生を一時停止できます。これは私以外の人にも役立つと思います!
私が考えることができる唯一のアプローチは、バッファーを書き込むたびに Systemclock.elapsedRealtime() を呼び出し、AudioTrack に書き込んだミリ秒数と比較することです。これにより、バッファーに残っている量が得られると思いました. しかし、測定された時間差 (ログに表示) は、一定に保たれるのではなく、時間の経過とともに徐々に増加または減少します。誰でも理由がわかりますか?
これが私が持っているものです。最初に初期化する:
msWritten = SystemClock.elapsedRealtime();
次に、バッファを書き込みます。
track.write(samples, 0, length);
// convert stereo samples to ms
msWritten += length/88.2;
if (SystemClock.elapsedRealtime() > msWritten) {
Log.e("UNDERRUN", String.valueOf(SystemClock.elapsedRealtime()-msWritten));
} else {
Log.e("GOOD", String.valueOf(SystemClock.elapsedRealtime()-msWritten));
}