Невозможно выполнить прямое действие в AVAudioplayer - PullRequest
2 голосов
/ 05 января 2010

Я использую AVAudioplayer для воспроизведения некоторых аудиофайлов. У меня есть некоторые элементы управления, такие как перемотка вперед и назад.

Перемотка работает нормально, а перемотка - нет.

- (void)rewind
{
    AVAudioPlayer *player = _rewTimer.userInfo;
    player.currentTime-= SKIP_TIME;
    [_rewTimer invalidate];
    _rewTimer=nil;
    [self updateCurrentTime];
}

- (void)ffwd
{
    AVAudioPlayer *player = _ffwTimer.userInfo;
    player.currentTime-= SKIP_TIME;
    [player setCurrentTime:cTime];
    [_ffwTimer invalidate];
    _ffwTimer=nil;

    [self updateCurrentTime];
}

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

Я следовал примеру приложения avTouch от Apple.

Ответы [ 2 ]

2 голосов
/ 06 января 2010

возможно, вы сделали объявление свойства AVAudioPlayer * player;в файле h, а также синтезировал его.Теперь для вперед, просто сделайте,

- (void)ffwd
{
    NSTimeInterval *time = [player currentTime];
    time+=SKIP_TIME;
    [player setCurrentTime:time];    

}

сделайте аналогично для перемотки +

ИЛИ

 - (void)ffwd{
    NSTimeInterval time = avPlayer.currentTime;
 time+=SKIP_TIME;
    if (time > avPLayer.duration)
    {
       //nothing to do

    }
    else
        [player setCurrentTime:time];
    }

этот способ кажется лучшим, также для перемотки сравните с 0длительностью

0 голосов
/ 05 января 2010

Самое простое объяснение состоит в том, что cTime заканчивается либо больше, чем общее время аудиофайла, либо как-то отрицательно. И то и другое заставит экземпляр проигрывателя установить его свойство currentTime в ноль.

Кроме того, я думаю, что наличие игрока в пользовательском словаре таймера хрупко. Если только он просто не должен быть встроен в таймер, я бы переместил его в свойство класса, чтобы все методы могли легко получить к нему доступ. Таймер все еще может вызывать методы, но вы не рискуете потерять игрока при переключении с таймера на таймер.

...