lakshmen
lakshmen

Reputation: 29064

Checking whether the audio has ended playing in iOS

I would like to check whether the audio has ended playing. If so, I need to change the button to a play button instead of a pause button. How do i do it in iOS?

My code looks like this:

-(void)playAudioFile:(BOOL)status
{
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"audio" ofType:@"mp3"];
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];


    NSError *error;

    if(status)
    {

        if(!audioPlayer)
        {
            audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:&error];
            audioPlayer.currentTime = currentPlayTime;
            audioPlayer.numberOfLoops = 0; //Infinite
            audioDuration = audioPlayer.duration;

            audioPlaySlider.minimumValue = 0;
            audioPlaySlider.maximumValue = audioDuration;
            audioPlaySlider.value = currentPlayTime;

            [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(audioTimer:) userInfo:[NSDictionary dictionaryWithObject:audioPlayer forKey:@"playerObject"] repeats:YES];
        }

        [audioPlayer play];

        if([audioPlayer rate] != 1.0 )
        {
            [audioPlayer play];
        }
        else
        {
            [self->audioPlayBtn setBackgroundImage:[UIImage imageNamed:@"playBtn.png"] forState:UIControlStateNormal];
        }


        NSLog(@"Play duration : %f",audioDuration);
    }
    else
    {
        if(audioPlayer && audioPlayer.playing)
        {
            [audioPlayer pause];                
        }
    }

    NSLog(@"Error for file : %@",error);

}

I tried this:

            if([audioPlayer rate] != 1.0 )
            {
                [audioPlayer play];
            }
            else
            {
                [self->audioPlayBtn setBackgroundImage:[UIImage imageNamed:@"playBtn.png"] forState:UIControlStateNormal];
            }

But not working.. Need some guidance...

Upvotes: 0

Views: 349

Answers (1)

lostInTransit
lostInTransit

Reputation: 70997

Use the AVAudioPlayerDelegate's method

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

Your viewcontroller/class with the audioplayer instance must be the delegate for the audio player. The method will be called when the audio player finishes playback.

http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioPlayerDelegateProtocolReference/Reference/Reference.html

Upvotes: 1

Related Questions