简体   繁体   中英

Play/Pause with the same button [AVAudioPlayer]

How can I play a sound with an IBAction by pressing on a UIbutton once and pause it by pressing the button again using AVAudioPlayer ? Also I want to change the state of that UIButton when the sound is playing and when it's not.

Here's my code:

- (IBAction)Beat
{
    if ([Media2 isPlaying])
    {
        [Media2 pause];
        [Button17 setSelected:NO];
    }

    else
    {
        Path = [[NSBundle mainBundle] pathForResource:@"Beat" ofType:@"mp3"];
        AVAudioPlayer *Media2 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:Path] error:NULL];
        [Media2 setDelegate:self];
        [Media2 play];
        [Button17 setSelected:YES];
    }
}

Here's is simple method using BOOL Variable.

Set playing = NO in viewDidLoad .

-(void)PlayStop{    
    if (playing==NO) {
        // Init audio with playback capability
        [play setBackgroundImage:[UIImage imageNamed:@"hmpause.png"] forState:UIControlStateNormal];

        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:______ error:&err];
        [audioPlayer prepareToPlay];

        audioPlayer.delegate=self;
        [audioPlayer play];

        playing=YES;
    }
    else if(playing==YES){
        [play setBackgroundImage:[UIImage imageNamed:@"Audioplay.png"] forState:UIControlStateNormal];

        [audioPlayer pause];

        playing=NO;
    }
}

Keep your audioPlayer instance ready to play using the below method.

/*
 Prepares the audio file to play.
 */
-(void) initWithAudioPath:(NSString *) audioPath {
    // Converts the sound's file path to an NSURL object
    NSURL *audioPathURL = [[NSURL alloc] initFileURLWithPath:audioPath];

    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioPathURL error:nil];
    audioPlayer.delegate = self;

    [audioPlayer prepareToPlay];

    [audioPathURL release];
}

-(void) pausePlaybackForPlayer:(AVAudioPlayer *) player {
    [player pause];
}

-(void) startPlaybackForPlayer:(AVAudioPlayer *) player {
    if (![player play]) {
        NSLog(@"Could not play %@\n", player.url);
    }
}

- (IBAction)Beat {
    if (audioPlayer.playing == NO) {
        // Audio player is not playing.
        // Set the button title here to "stop"...
        [self startPlaybackForPlayer:audioPlayer];
    }else {
        // Audio player is playing.
        // Set the button title here to "play"...
        [self pausePlaybackForPlayer:audioPlayer];
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM