我有一个应用程序,我在流模式下使用AudioTrack
播放动态生成的音频。该应用程序不需要立即对输入做出响应,因此延迟问题不会影响到该程序的这一方面。您如何确定Android上的音频延迟(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的延迟?
请注意,在某些设备上抛出'MethodNotFoundException' – zella 2015-09-10 08:21:00