触发AVAudioPlayer停止所有的声音和播放select,除非单击播放(选定)button

我正在创build一个可以一次播放一个声音的声卡应用程序。 我想要一个UIButton能够阻止所有其他的声音播放,并开始播放自己的声音点击。 我有一个AVAudioPlayer设置播放所有的声音(我点击时改变声音文件的URL,因为我只想一次播放一个声音不是问题)。 我想知道如何停止所有其他的声音,并按下button播放声音,但是如果点击的button是当前正在播放声音的button,button只会停止声音。 我知道这是可以通过去分开audioplayers和触发停止事件,但我想避免复制和粘贴代码,并尽可能保持高效,加上我只想/需要一个audioplayer。 这是我的代码:

- (IBAction)play { if (audioPlayer.playing == NO) { NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/k.mp3", [[NSBundle mainBundle] resourcePath]]]; NSError *error; [audioPlayer release]; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = 0; AVAudioSession *audiosession = [AVAudioSession sharedInstance]; [audiosession setCategory:AVAudioSessionCategoryAmbient error:nil]; [audioPlayer play]; [start setTitle:@"Stop" forState:UIControlStateNormal]; } else if (audioPlayer.playing == YES) { [audioPlayer stop]; [start setTitle:@"Start" forState:UIControlStateNormal]; } } - (IBAction)play2 { if (audioPlayer.playing == NO) { NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/chicken.mp3", [[NSBundle mainBundle] resourcePath]]]; NSError *error; [audioPlayer release]; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = 0; AVAudioSession *audiosession = [AVAudioSession sharedInstance]; [audiosession setCategory:AVAudioSessionCategoryAmbient error:nil]; [audioPlayer play]; [start2 setTitle:@"Stop" forState:UIControlStateNormal]; } else if (audioPlayer.playing == YES) { [audioPlayer stop]; [start2 setTitle:@"Start" forState:UIControlStateNormal]; } } 

任何帮助表示赞赏。 先谢谢你!

只要做到这一点

 -(void)stopAudio{ if(audioPlayer && [audioPlayer isPlaying]){ [audioPlayer stop]; audioPlayer=nil; } } 

并每次点击调用此function..

 - (IBAction)play2 { [self stopAudio]; //Do your Stuffs } 

当你的button被点击停止你的audio播放器,并分配你的新歌曲url,然后播放它。当你点击button播放歌曲时写这个代码。

 if(audioPlayer.isPlaying) [audioPlayer stop]; AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; NSURL *url = [NSURL fileURLWithPath:YourSoundURL]; NSError *error; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.delegate=self; [audioPlayer play]; [start2 setTitle:@"Stop" forState:UIControlStateNormal];