В Android getPlaybackHeadPosition() метод AudioTrack возвращает позицию воспроизведения, выраженную в кадрах, каково ее эквивалентное значение в миллисекундах?
Преобразование кадров в миллисекунды в android
Ответ 1
Я предполагаю, что это будет
( track.getPlaybackHeadPosition( ) / track.getSampleRate( ) ) * 1000.0
Другими словами, количество воспроизводимых кадров делится на количество кадров в секунду. Затем вы умножаете результат на 1000, чтобы получить миллисекунды.
Кадр состоит из одного образца на канал и поэтому должен быть эквивалентен частоте дискретизации.
Например, если getPlaybackHeadPosition( )
возвращает 8654
и getSampleRate( )
возвращает 8000
, то время с начала дорожки будет ( 8654 / 8000 ) * 1000
или 1081.75ms
. (Предполагая арифметику с плавающей запятой)
Ответ 2
Ответ от @Nike прав.
Но есть проблема.
Если мы вызываем метод MediaExtractor.seekTo
, AudioTrack.getPlaybackHeadPosition()
возвращает значение накопления.
MediaExtractor.getSampleTime() / 1000
- это правильный ms для текущей позиции.
Вы можете проверить это!