我有一个应用程序,我在其中使用AudioTrack
流模式播放动态生成的音频。该应用程序不必立即响应输入,因此延迟问题不会为程序的那一侧困扰我。
问题是我有一个动画需要尽可能精确地与音频“同步”,而且似乎不同的设备在AudioTrack
停止阻塞write()
呼叫并要求更多数据之间的时间不同,而当该音频是从扬声器播放的。
AudioTrack
我目前的解决方案让我大部分时间都在那里 - 我计算了到目前为止我传入的帧数,并将其与getPlaybackHeadPosition()
. 它看起来基本上像:
long currentTimeInFrames = 0;
while(playingAudio) {
currentTimeInFrames += numberOfFramesToWrite;
long delayInFrames = (currentTimeInFrames - audioTrack.getPlaybackHeadPosition());
audioTrack.write(frameBuffer,0,sampleSize);
doAnimationAfterDelay(delayInFrames);
}
但是,仍有一些延迟getPlaybackHeadPosition()
似乎无法解释因设备而异。
有没有办法轮询系统的 AudioTrack 的延迟?