私は、動的に生成されたオーディオを再生するためにストリーミングモードで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