2010-01-05 2 views
2

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

Rewind работает нормально, но вперед нет.

- (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

Возможно, вы сделали объявление собственности 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

все еще не работает, если вы нажмете кнопку в течение долгого времени, песня будет перенастроена на хлопкоочистительных. Знаете ли вы, что проблема с шляпой? – ludo

+0

Как вы это реализуете, функции «skip track» и «forward» находятся в одних и тех же кнопках, или вы просто хотите переслать на касание внутри события? – Nithin

0

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

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

+0

что может быть решением, как реализовать прямое действие ......... –

Смежные вопросы