ios 播放鈴聲(短音效)

1尼变、音效播放的一般步驟:

AudioServicesPlaySystemSound和AudioServicesPlayAlertSound方法的異同:
相同點:都可以同時播放多個音效
不同點:AudioServicesPlayAlertSound這個方法播放音效有震動利凑,另一個方法沒有

    //定義soundID,并先賦值為0
    SystemSoundID soundID = 0;
    
    //獲取要播放音效的URL
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"lose.aac" withExtension:nil];
    
    //將音效的URL橋接為CFURLRef類型的URL
    CFURLRef urlRef = (__bridge CFURLRef)(url);
    
    //根據(jù)音效urlRef生成對應(yīng)的SystemSoundID(傳soundID的地址嫌术,生成之后會根據(jù)地址找到它并給它賦值)
    AudioServicesCreateSystemSoundID(urlRef, &soundID);
    
    //播放音效
    AudioServicesPlaySystemSound(soundID);
   // AudioServicesPlayAlertSound(soundID);

   //  上面兩個方法的方法的異同點:
   //  相同點:都可以同時播放多個音效
   //  不同點:AudioServicesPlayAlertSound這個方法播放音效有震動哀澈,另一個方法沒有

2、一個界面多個音效

如果一個界面有多個音效需要播放度气,那么就需要定義一個可變字典割按,保存每個音效對應(yīng)的soundID。每次播放都會從字典中找對應(yīng)的soundID磷籍,這樣就不用每次都創(chuàng)建一個soundID了适荣。

@interface ViewController ()

/** 可變字典现柠,保存音效ID */
@property (nonatomic, strong) NSMutableDictionary * soundIDs;

@end

可以播放音效抽取成一個方法,在需要播放的時候直接傳入音效名稱參數(shù)調(diào)用方法就可以播放

-(void) playSoundWithSoundName:(NSString *)soundName
{
    //定義soundID弛矛,并先賦值為0
    SystemSoundID soundID = 0;
    
    //先從字典中取出soundID
    soundID = [self.soundIDs[soundName] unsignedIntValue];
    
    //如果從字典獲取不到soundName對應(yīng)的soundID够吩,就創(chuàng)建soundID
    if (soundID == 0)
    {
        //加載音效的URL
        NSURL *url = [[NSBundle mainBundle] URLForResource:soundName withExtension:nil];
        
        //將音效的URL橋接為CFURLRef類型的URL
        CFURLRef urlRef = (__bridge CFURLRef)(url);
        
        //根據(jù)音效URL生成對應(yīng)的SystemSoundID(傳soundID的地址,生成之后會根據(jù)地址找到它丈氓,并賦值)
        AudioServicesCreateSystemSoundID(urlRef, &soundID);
        
        //將這個soundID保存到字典
        [self.soundIDs setValue:@(soundID) forKey:soundName];
    }
    
    //播放音效
    AudioServicesPlaySystemSound(soundID);
}

3周循、封裝播放音效工具類

如果想在整個app內(nèi)調(diào)用播放音效的方法,那么可以創(chuàng)建一個播放音效工具類万俗。在需要播放音效的控制器直接導入頭文件湾笛,調(diào)用播放音效的類方法即可。

  • 第一步:創(chuàng)建工具類


    Snip20160706_2.png
  • 第2步:定義一個靜態(tài)可變字典保存soundID

由于提供的是類方法來播放音效该编,但類方法不能訪問成員屬性迄本,所以不能將保存soundID的字典定義為成員屬性硕淑,只能定義為靜態(tài)變量课竣,還要對這個可變字典通過懶加載進行初始化

static NSMutableDictionary *_soundIDs;

+ (NSMutableDictionary *) soundIDs
{
   if (_soundIDs == nil)
  {
       _soundIDs = [NSMutableDictionary dictionary];
   }
   return _soundIDs;
}
  • 第3步:在.h文件提供一個播放音效的方法接口

    @interface PlayAudioTool : NSObject
    
    /** 提供類方法播放音效 */
    +(void) playAudioWithAudioName:(NSString *)audioName;
    
    @end
    
  • 第4步:實現(xiàn)播放音效的方法

    //播放音效的類方法
    +(void)playAudioWithAudioName:(NSString *)audioName
    {
        //定義soundID,并先賦值為0
        SystemSoundID soundID = 0;
      
        //先從字典中取出soundID
        soundID = [self.soundIDs[audioName] unsignedIntValue];
      
        //如果從字典獲取不到audioName對應(yīng)的soundID置媳,就創(chuàng)建soundID
        if (soundID == 0)
        {
            //加載音效的URL
            NSURL *url = [[NSBundle mainBundle] URLForResource:audioName withExtension:nil];
          
            //將音效的URL橋接為CFURLRef類型的URL
            CFURLRef urlRef = (__bridge CFURLRef)(url);
          
            //根據(jù)音效url生成對應(yīng)的SystemSoundID(傳soundID的地址于樟,生成之后會根據(jù)地址找到它,并賦值)
            AudioServicesCreateSystemSoundID(urlRef, &soundID);
          
            //將這個soundID保存到字典
            [self.soundIDs setValue:@(soundID) forKey:audioName];
        }
      
        //播放音效
        AudioServicesPlaySystemSound(soundID);
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拇囊,一起剝皮案震驚了整個濱河市迂曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寥袭,老刑警劉巖路捧,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異传黄,居然都是意外死亡杰扫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門膘掰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來章姓,“玉大人,你說我怎么就攤上這事识埋》惨粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵窒舟,是天一觀的道長系忙。 經(jīng)常有香客問我,道長惠豺,這世上最難降的妖魔是什么笨觅? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任拦耐,我火速辦了婚禮,結(jié)果婚禮上见剩,老公的妹妹穿的比我還像新娘杀糯。我一直安慰自己,他們只是感情好苍苞,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布固翰。 她就那樣靜靜地躺著,像睡著了一般羹呵。 火紅的嫁衣襯著肌膚如雪骂际。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天冈欢,我揣著相機與錄音歉铝,去河邊找鬼。 笑死凑耻,一個胖子當著我的面吹牛太示,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播香浩,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼类缤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了邻吭?” 一聲冷哼從身側(cè)響起餐弱,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎囱晴,沒想到半個月后膏蚓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡畸写,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年驮瞧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺糜。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡剧董,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出破停,到底是詐尸還是另有隱情翅楼,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布真慢,位于F島的核電站毅臊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏黑界。R本人自食惡果不足惜管嬉,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一皂林、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚯撩,春花似錦础倍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至犹菇,卻和暖如春德迹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揭芍。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工胳搞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人称杨。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓肌毅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親列另。 傳聞我的和親對象是個殘疾皇子芽腾,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容