AVAudioSession配置

語音session配置Category

AVAudioSessionCategoryAmbient
用于非以語音為主的應(yīng)用,使用這個category的應(yīng)用會隨著靜音鍵和屏幕關(guān)閉而靜音。
并且不會中止其它應(yīng)用播放聲音,可以和其它自帶應(yīng)用如iPod,safari等同時播放聲音。
注意:該Category無法在后臺播放聲音
AVAudioSessionCategorySoloAmbient
類似于AVAudioSessionCategoryAmbient不同之處在于它會中止其它應(yīng)用播放聲音。
這個category為默認(rèn)category。
該Category無法在后臺播放聲音
AVAudioSessionCategoryPlayback
用于以語音為主的應(yīng)用,使用這個category的應(yīng)用不會隨著靜音鍵和屏幕關(guān)閉而靜音。
可在后臺播放聲音
AVAudioSessionCategoryRecord
用于需要錄音的應(yīng)用,設(shè)置該category后,除了來電鈴聲,鬧鐘或日歷提醒之外的其它系統(tǒng)聲音都不會被播放。
該Category只提供單純錄音功能。
AVAudioSessionCategoryPlayAndRecord
用于既需要播放聲音又需要錄音的應(yīng)用,語音聊天應(yīng)用(如微信)應(yīng)該使用這個category。
該Category提供錄音和播放功能。
如果你的應(yīng)用需要用到iPhone上的聽筒,該category是你唯一的選擇,在該Category下聲音的默認(rèn)出口為聽筒(在沒有外接設(shè)備的情況下)。
注意:并不是一個應(yīng)用只能使用一個category,程序應(yīng)該根據(jù)實際需要來切換設(shè)置不同的category。
舉個例子,錄音的時候,需要設(shè)置為AVAudioSessionCategoryRecord,
當(dāng)錄音結(jié)束時,應(yīng)根據(jù)程序需要更改category為AVAudioSessionCategoryAmbient,
AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種。
會話類型 說明 是否要求輸入 是否要求輸出 是否遵從靜音鍵
AVAudioSessionCategoryAmbient 混音播放,可以與其他音頻應(yīng)用同時播放
AVAudioSessionCategorySoloAmbient 獨(dú)占播放
AVAudioSessionCategoryPlayback 后臺播放,也是獨(dú)占的
AVAudioSessionCategoryRecord 錄音模式,用于錄音時使用
AVAudioSessionCategoryPlayAndRecord 播放和錄音,此時可以錄音也可以播放
AVAudioSessionCategoryAudioProcessing 硬件解碼音頻,此時不能播放和錄制
AVAudioSessionCategoryMultiRoute 多種輸入輸出,例如可以耳機(jī)、USB設(shè)備同時播放
配置激活A(yù)VAudioSession
- (void)configAudioSession {
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    //設(shè)置為播放和錄音狀態(tài),以便可以在錄制完之后播放錄音
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    [audioSession setActive:YES error:nil];
}
Deactivate AVAudioSession
AVAudioSession *audioSession = [AVAudioSession sharedInstance];  
[audioSession setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];  

Audio Route的選擇

當(dāng)你的iPhone接有多個外接音頻設(shè)備時(耳塞,藍(lán)牙耳機(jī)等),AudioSession將遵循last-in wins的原則來選擇外接設(shè)備,即聲音將被導(dǎo)向最后接入的設(shè)備。

當(dāng)沒有接入任何音頻設(shè)備時,一般情況下聲音會默認(rèn)從揚(yáng)聲器出來,但有一個例外的情況:在PlayAndRecord這個category下,聽筒會成為默認(rèn)的輸出設(shè)備。如果你想要改變這個行為,可以提供MPVolumeView來讓用戶切換到揚(yáng)聲器,也可通過overrideOutputAudioPort方法來programmingly切換到揚(yáng)聲器,也可以修改category option為AVAudioSessionCategoryOptionDefaultToSpeaker。


PlayandRecord下切換到揚(yáng)聲器

除了讓用戶手動選擇,你也可以通過以下兩種方法在程序里進(jìn)行切換
  1. 修改Category的默認(rèn)行為:
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];  
  1. OverrideOutputAudioPort
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)自:AVAudioSession(3):定制 Audio Session 的 Category | www....
    SamirChen閱讀 1,200評論 0 3
  • **場景一 **場景說明:應(yīng)用A正在播放音樂,應(yīng)用B啟動語音合成,但不中斷應(yīng)用A播放。解決步驟: 在應(yīng)用B中設(shè)置A...
    明謠_羅瀟閱讀 5,701評論 0 5
  • 1. AVAudioSession 概述 最近一年一直在做IPC Camera的iOS客戶端開發(fā)。和音頻打交道,必...
    安東_Ace閱讀 52,797評論 20 169
  • 音頻輸出作為硬件資源,對于iOS系統(tǒng)來說是唯一的,那么要如何協(xié)調(diào)和各個App之間對這個稀缺的硬件持有關(guān)系呢? iO...
    CZ_iOS閱讀 75,407評論 31 261
  • 還記得《非誠勿擾》里葛大爺發(fā)明的“分歧終端機(jī)”嗎?忽悠了范偉200萬英鎊。雖然是個笑話,但是確實說出了一個現(xiàn)象: ...
    托爸閱讀 1,451評論 0 2

友情鏈接更多精彩內(nèi)容