使用相同按钮播放/暂停[AVAudioPlayer]

时间:2011-07-09 15:16:25

标签: iphone objective-c xcode avaudioplayer

如何通过按IBAction一次UIbutton来播放声音并使用AVAudioPlayer再次按下按钮暂停播放?此外,我想在播放声音时更改UIButton的状态,何时不更改。{/ p>

这是我的代码:

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

2 个答案:

答案 0 :(得分:13)

这是使用BOOL变量的简单方法。

playing = NO中设置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;
    }
}

答案 1 :(得分:3)

使用以下方法准备好播放audioPlayer实例。

/*
 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];
    }

}