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 のレイテンシーについてシステムをポーリングする方法はありますか?