2

一度に1つのサウンドを再生するサウンドボードアプリを作成しています。UIButtonで、他のすべてのサウンドの再生を停止し、クリックすると独自のサウンドの再生を開始できるようにしたいと思います。すべてのサウンドを再生するように設定された単一のAVAudioPlayerがあります(クリックするとサウンドファイルのURLを変更しますが、一度に1つのサウンドしか再生したくないので、これは問題ではありません)。他のすべての音を止めて、押したボタンに応じて音を鳴らす方法を知りたいのですが、クリックしたボタンが現在鳴っている音のボタンの場合、ボタンは音を止めるだけです。これは、オーディオプレーヤーを分離し、停止イベントをトリガーすることで実現できることはわかっていますが、コードのコピーと貼り付けを避け、可能な限り効率を維持したいと考えています。さらに、オーディオプレーヤーは1つだけ必要です。これが私のコードです:

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

どんな助けでも大歓迎です。前もって感謝します!

4

2 に答える 2

4

これを行うだけ

-(void)stopAudio{

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

}

そして、クリックするたびにこの関数を呼び出します。

- (IBAction)play2 {
    [self stopAudio];

    //Do your Stuffs
}
于 2013-03-12T09:25:02.067 に答える
0

ボタンがクリックされたら、オーディオプレーヤーを停止し、新しい曲の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];
于 2013-03-12T09:32:20.293 に答える