1

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));
}
4

0 に答える 0