Ich habe eine App, in der ich einen AudioTrack
im Streaming-Modus verwende, um dynamisch generiertes Audio wiederzugeben. Die App muss nicht sofort auf Eingaben reagieren, so dass die Latenzprobleme mich für diese Seite des Programms nicht stören.Wie bestimmen Sie die Audio-Latenz (AudioTrack) auf Android?
Das Problem ist, dass ich eine Animation, die so genau ‚in-sync‘ wie möglich mit dem Audio sein muss und es scheint, dass verschiedene Geräte unterschiedliche Mengen an Zeit zwischen, wenn die AudioTrack
stoppt die write()
Anrufblockierung und fragt für mehr Daten und wenn dieses Audio vom Lautsprecher gespielt wird.
Meine aktuelle Lösung bringt mich am meisten dorthin - ich zähle die Anzahl der Frames, die ich bisher an die AudioTrack
übergeben habe, und vergleiche sie mit . Es sieht im Grunde wie:
long currentTimeInFrames = 0;
while(playingAudio) {
currentTimeInFrames += numberOfFramesToWrite;
long delayInFrames = (currentTimeInFrames - audioTrack.getPlaybackHeadPosition());
audioTrack.write(frameBuffer,0,sampleSize);
doAnimationAfterDelay(delayInFrames);
}
Allerdings gibt es noch einige Latenz dass getPlaybackHeadPosition()
nicht zu berücksichtigen, scheint für die von der Vorrichtung variiert.
Gibt es eine Möglichkeit, das System auf die Latenz von AudioTrack abzufragen?
Beachten Sie, dass auf einigen Geräten "MethodNotFoundException" ausgelöst wird – zella