У меня есть приложение, в котором я использую 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?