iPhone - почему AVAudioPlayer currentTime возвращает отрицательное значение? - PullRequest
1 голос
/ 17 ноября 2009

Когда метод currentTime AVAudioPlayer возвращает отрицательное значение? Звуковой файл воспроизводится (я проверяю его перед получением currentTime), но вызов currentTime возвращает отрицательное значение.

Есть идеи? Спасибо

if(thePlayer != nil && [thePlayer isPlaying]){
    double playerTime = [thePlayer currentTime];
    NSLog(@"Player Time: %f", playerTime);
}

выход

Player Time: -0.019683

Ответы [ 3 ]

1 голос
/ 31 марта 2010

Вы тестируете это на симуляторе? В симуляторе есть несколько ошибок с AVAudioPlayer. Во-первых, currentTime может быть очень большим положительным или отрицательным числом. Даже если вы установите currentTime для определенного числа, оно все равно будет часто показывать что-то другое. Насколько я знаю, это проблема только на симуляторе, а не при работе на устройстве.

Вот код, который я использую для установки свойства currentTime экземпляра AVAudioPlayer:

- (void)safeSetCurentTime:(NSTimeInterval)newTime {
self._player.currentTime = newTime;
if (self._player.currentTime != newTime)
{
    // code falls through to here all the time
            // the second attempt _usually_ works.
    [self prepareAudioForPlayback];
    self._player.currentTime = newTime;
    //NSLog(@"Set time failed");
}

}

0 голосов
/ 11 августа 2010

Я нашел обходной путь, который устраняет проблему на iPad, которая работает до тех пор, пока iOS4 не выйдет для iPad, и не исправит проблему.

Удерживайте аудио-буфер, и когда вы собираетесь возобновить воспроизведение после приостановки / остановки, перезагрузите аудио-буфер в экземпляр AVAudioPlayer, установите currentTime в то место, с которого вы хотите возобновить воспроизведение, а затем возобновите воспроизведение.

У меня отлично работает, и перезагрузка аудио буфера кажется очень быстрой.

0 голосов
/ 29 июля 2010

Я считаю, что эта проблема исправлена ​​в выпуске iOS4 beta 2 SDK, поэтому вы не должны видеть это на iPhone. Смотрите здесь . Однако я думаю, что мы застряли с проблемой на iPad, пока iOS4 не будет доступна на этом устройстве.

Кто-нибудь знает обходной путь? Любой способ предсказать, как текущее время будет сообщено неверно, чтобы можно было применить поправочный коэффициент? Что я вижу, так это то, что текущее время, как сообщается, отстает от фактического времени воспроизведения на несколько секунд (которое может быть отрицательным, если вы находитесь ближе к началу аудио), и оно отслеживает правильную позицию. Так, может быть, есть какое-то смещение, которое можно применить, когда приложение используется в более ранней версии iOS?

...