views:

260

answers:

2

Hello,

I am using AVAudioplayer to play some audio files. I have some controls like forward and rewind.

Rewind is working properly but forward is not.

- (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];
}

As soon as I click on forward button, the audio file just begins playing from the start.

I have followed the sample app avTouch from Apple.

Can anybody shed some light upon it?

Thnx in advance.

A: 

The simplest explanation is that cTime ends up either greater than the total time of the audio file or it ends up negative somehow. Both will cause the player instance to set its currentTime property to zero.

As an aside, I think having the player in a timer's userInfo dictionary is fragile. Unless it just absolutely must be embedded in the timer, I would move it to a property of the class so that all the methods can easily access it. The timer can still call the methods but you won't run the risk of the player being lost while swapping from timer to timer.

TechZen
what could be the solution how to implement forward action.........
Ankit Sachan
A: 

you might have done the property declaration of AVAudioPlayer *player; in the h file and also synthesised it. Now for forward, just do,

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

}

do similarly for rewind+

OR

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

    }
    else
        [player setCurrentTime:time];
    }

this one seems the better way, also for rewind compare to 0 instead of duration

Nithin
it still not working, if you click the button for a long time, the song will retun at the beginning. Do you know hat is the problem?
ludo
how are u implementing this, 'skip track' and 'forward' functions are in the same buttons or you just want to forward on touch up inside event??
Nithin