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