Ios 触发AVAudioPlayer以停止所有声音并播放选定的声音,但单击播放(选定)按钮时除外

Ios 触发AVAudioPlayer以停止所有声音并播放选定的声音,但单击播放(选定)按钮时除外,ios,objective-c,xcode,avaudioplayer,Ios,Objective C,Xcode,Avaudioplayer,我正在创建一个声卡应用程序,一次播放一个声音。我想一个UIButton能够停止所有其他声音播放,并开始播放自己的声音时,点击。我有一个单独的AVAudioPlayer设置来播放所有声音(我在单击时更改声音文件url,因为我一次只想播放一个声音,所以这不是问题)。我想知道如何停止所有其他声音并根据按下的按钮播放声音,但如果单击的按钮是当前播放声音的按钮,则按钮仅停止声音。我知道这是可以通过使用单独的音频播放器和触发停止事件来实现的,但我希望避免复制和粘贴代码,并尽可能保持效率,另外我只想要/需要一

我正在创建一个声卡应用程序,一次播放一个声音。我想一个UIButton能够停止所有其他声音播放,并开始播放自己的声音时,点击。我有一个单独的AVAudioPlayer设置来播放所有声音(我在单击时更改声音文件url,因为我一次只想播放一个声音,所以这不是问题)。我想知道如何停止所有其他声音并根据按下的按钮播放声音,但如果单击的按钮是当前播放声音的按钮,则按钮仅停止声音。我知道这是可以通过使用单独的音频播放器和触发停止事件来实现的,但我希望避免复制和粘贴代码,并尽可能保持效率,另外我只想要/需要一个音频播放器。这是我的密码:

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

}
并在每次单击时调用此函数

- (IBAction)play2 {
    [self stopAudio];

    //Do your Stuffs
}
就这么做吧

-(void)stopAudio{

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

}
并在每次单击时调用此函数

- (IBAction)play2 {
    [self stopAudio];

    //Do your Stuffs
}

单击按钮时,请停止音频播放器,分配新歌曲的url,然后播放。单击按钮播放歌曲时,请编写以下代码

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

单击按钮时,请停止音频播放器,分配新歌曲的url,然后播放。单击按钮播放歌曲时,请编写以下代码

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