AVAudioPlayer resetting currently playing sound and playing it from beginning

10,322

Solution 1

For your situation I would try the following

//Pause the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    [player pause];
}

player.currentTime = 0;
[player play];

If you are going to immediately play the sound again, I would suggest pause instead of stop. Calling stop "Stops playback and undoes the setup needed for playback."

Solution 2

As indicated, if you want the sound to play again, you should avoid disabling the AVAudioPlayer instance with a stop but rather, just issue a reset of the position where it is playing. So, don't use stop() or pause() but as Plumenator mentioned, just issue .currentTime=0. So in your case, you would simply do:

if (player.isPlaying) { 
   player.currentTime = 0
} else {
   player.play()
}

Solution 3

Swift example:

player.currentTime = 0.0;
Share:
10,322
Dougnukem
Author by

Dougnukem

Worked at some game companies and social game startups, working on a new web startup currently. Personal Website

Updated on June 24, 2022

Comments

  • Dougnukem
    Dougnukem almost 2 years

    I'm having an issue using AVAudioPlayer where I want to reset a player if it's currently playing and have it play again.

    I try the following with no luck:

    The sound plays once but then the second time i select the button it stops the sound, the third time starts the sound up again.

    //Stop the player and restart it
    if (player.playing) {
        NSLog(@"Reset sound: %@", selectedSound);
        [player stop];
        [player play];
    } else {
        NSLog(@"playSound: %@", selectedSound);
        [player play];      
    }
    

    I've also tried using player.currentTime = 0 which indicates that would reset the player, that didn't work, I also tried resetting currentTime = 0 and then calling play that didn't work.

    //Stop the player and restart it
    if (player.playing) {
        NSLog(@"Reset sound: %@", selectedSound);
        player.currentTime = 0;
        [player play];
    } else {
        NSLog(@"playSound: %@", selectedSound);
        [player play];      
    }