听到多个按钮,当其他按钮在iOS中播放时停止

时间:2013-03-29 05:09:22

标签: iphone ios objective-c

我正在尝试整理一个小应用程序来学习一些iOS开发的基础知识,如果这是基本的话请原谅我。我看了很多线程,但我想有几个特定于这个应用程序的问题。

  1. 按下按钮时,我看到了几种不同的音频播放方式。一个涉及“CFBundleRef”(How to play iPhone tap sound?)和另一个“AVAudioPlayer”(Play Audio iOS Objective-C)。我如何知道使用哪个以及何时适当使用?

  2. 我现在使用第一个选项运行音频,但我似乎无法弄清楚当按下另一个按钮时声音是如何停止的。我怎么能这样做?

  3. 除了我所做的以外,有没有更简单的方法将15个声音/按钮链接在一起?

  4. 这是.m文件:

    #import "animalsViewController.h"
    
    @interface animalsViewController ()
    
    @end
    
    
    @implementation animalsViewController
    
    
    -(IBAction) boom; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"bird", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom2; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"bird2", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    -(IBAction) boom3; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"bird3", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom4; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"chicken1", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom5; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"chicken2", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom6; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"cow", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom7; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"dog1", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom8; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"duck", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom9; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"horse", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom10; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"lion", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom11; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"monkey", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom12; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"owl", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom13; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"pig", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom14; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"rooster", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    -(IBAction) boom15; {
    
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"sheep", CFSTR ("mp3"), NULL);
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    
    }
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    
    
    
    
    @end
    

    这是.h文件:

    #import <UIKit/UIKit.h>
    #import <AudioToolbox/AudioToolbox.h>
    
    @interface animalsViewController : UIViewController{
    
    
    }
    
    -(IBAction) boom;
    -(IBAction) boom2;
    -(IBAction) boom3;
    -(IBAction) boom4;
    -(IBAction) boom5;
    -(IBAction) boom6;
    -(IBAction) boom7;
    -(IBAction) boom8;
    -(IBAction) boom9;
    -(IBAction) boom10;
    -(IBAction) boom11;
    -(IBAction) boom12;
    -(IBAction) boom13;
    -(IBAction) boom14;
    -(IBAction) boom15;
    
    @end
    

2 个答案:

答案 0 :(得分:1)

使用单个AVAudioPlayer实例,类似于以下内容..

-(void)playAudioOfType:(int)type{

     [self stopAudio];


     NSString *sound=@"";

     switch (type) {
       case 1:
          sound=@"bird";
        break;

       case 2:
          sound=@"bird2";
        break;

       case 3:
          sound=@"bird3";
        break;

       case 4:
          sound=@"chicken";
        break;

       default:
         break;
      }


      NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:sound
                                     ofType:@"mp3"]];



NSError *error;
if(url){
    audioPlayer = [[AVAudioPlayer alloc]
                   initWithContentsOfURL:url
                   error:&error];



    if (error)
    {
        NSLog(@"Error in audioPlayer: %@", 
              [error localizedDescription]);
    } else {
        audioPlayer.delegate = self;
        [audioPlayer prepareToPlay];
    }

    [audioPlayer play];
}


 }

 -(void)stopAudio{

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


}

然后你可以调用下面的每个动作

-(IBAction) boom; {
     [self playAudioOfType:1]; //Will play bird.mp3
}

-(IBAction) boom1; {
     [self playAudioOfType:2]; //Will play bird2.mp3
}

-(IBAction) boom2; {
     [self playAudioOfType:3]; //Will play bird3.mp3
}

找一个测试应用here ..你只需要在应用中添加mp3文件,它应该可以工作..

答案 1 :(得分:0)

试试此链接:Simple sound question

在这个问题的最后看到......

    -(void)stop
    {
            AudioServicesDisposeSystemSoundID (_soundID);
            self.IsPlaying = FALSE;
    }