Когда я беру длительность звукового файла перед игрой с:аудио изменения длительности игрок во время игры
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
...
[audioPlayer prepareToPlay];
duration = audioPlayer.duration;
я получаю длительность, например 16.71s. Затем, когда выбираете образцы каждые 0.2 секунды во время игры, продолжительность изменяется. Он изменяется с 1.2 до 1.6 секунд: 16.71 с, 17.02s, 17.23s, 17.33s, 17.38s, 17.43s, 17.38s, 17.29s, 17.31s, затем остается на 17.51s за последние 2.5 секунды. Так что он идет вверх и вниз.
Я использую метод, который обновляет положение ползунка, а также показывает прошедшее время и общую продолжительность. Вы можете себе представить, что очень странно видеть, что продолжительность (которая усечена) идет от 16 до 17 во время игры. Кроме того, положение ползунка будет выключено со всем этим дрейфом.
У кого-нибудь есть идея, почему это так?
Теперь, когда мы говорим о продолжительности: Кто-нибудь знает, почему audio player.duration
может возвращать значения, которые примерно в два раза превышают фактическую продолжительность, когда [audioPlayer prepareToPlay]
опущен?
Если вы запустите его несколько раз были такие же номера вы получаете каждый раз? Или они меняются? – WendiKidd
Первое полученное значение всегда одно и то же: 16,71 с. Значения после этого различаются при каждом воспроизведении с новым «AVAudioPlayer». Конечное значение также всегда одно и то же: 17,51 с. Но когда я проигрываю с тем же звуковым проигрывателем, все значения равны 17,51. –
Какой тип аудиофайла? Если он закодирован с VBR (переменным битрейтом), может случиться так, что аудиоплеер пытается оценить длину файла. – batkuip