本文轉(zhuǎn)自:AVAudioSession(1):iOS Audio Session 概覽 | www.samirchen.com
本文內(nèi)容主要來源于 Audio Session Programming Guide。
Audio Session 概覽
在 iOS 系統(tǒng)中,開發(fā)者可以通過 AVAudioSession 相關(guān)的 API 來處理 App 內(nèi)部、App 之間以及設(shè)備級別的音頻行為。比如:你的 App 的聲音是否應該受到手機的靜音鍵的控制;當你的 App 的音頻開始播放時,其他音樂播放器的聲音是否應停止;用戶拔掉耳麥、電話來了、帶聲音播放的系統(tǒng)通知響起等情況下,你的 App 的聲音應該怎么處理等等。
image
總的來說,使用 AVAudioSession 你可以做到:
- 選擇合適的音頻輸入或輸出路徑。
- 決定你的 App 的音頻如何與其他 App 的音頻共存。
- 處理來自其他 App 的中斷。
- 根據(jù)你的 App 的類別自動做音頻相關(guān)配置。
在 AVAudioSession 中如何支持你做到上述這些呢?
- 用 Category 來描述音頻使用者的角色。最主要的用來表述音頻相關(guān)行為的機制即 Audio Session Category。Category 反映了諸如「你的 App 使不使用音頻輸入或輸出」、「其他音樂能否和你的 Audio 共存播放」等等角色能力。不同的 Category 可以
支持播放
、錄制
、邊播放邊錄制
等不同的行為模式,系統(tǒng)通過 Audio Session Category 知道你的角色,從而賦予你與角色匹配的硬件訪問權(quán)限。同時,系統(tǒng)保障還其他 App 的音頻行為與你的角色相匹配。比如,你希望 Music 應用會被你的音頻播放打斷。
- 用 Mode 來定制 Category 的具體行為。比如,你的 App 使用 Video Recording Mode 模式時,系統(tǒng)可能會選擇一個與 Default Mode 模式不同的內(nèi)置麥克風來采集音頻。
- 用 Notification 來支持中斷消息通知。產(chǎn)生中斷通常是因為另一個和你的 App 存在競爭性音頻行為的 App 此時被激活,而這個 App 設(shè)置的 Category 不支持 mix 你的音頻。這時你的 App 的音頻可能就直接被停掉了。如果要做到合乎邏輯的處理,這時候則需要你監(jiān)聽中斷通知 AVAudioSessionInterruptionNotification:當你的 Audio Session 被中斷而失效時,系統(tǒng)會發(fā)送給你一個通知信息,這時候你可以做一些狀態(tài)信息存儲、更新用戶界面之類的動作。
- 用 Notification 來支持 Audio Route 切換消息通知。當手機被鎖屏或解鎖、插上或拔出了耳麥時,音頻的輸入或輸出路徑是會發(fā)生改變的,這時候你需要監(jiān)聽 AVAudioSessionRouteChangeNotification 通知,來做相應的處理以符合用戶的期望。
- 用 Category 來支持更高級的功能。你可以通過各種方式調(diào)優(yōu) Category,從而做到這些:
- 允許其他 App 的音頻與你的音頻 mix 在一起播放。
- 將音頻輸出路徑從聽筒改到揚聲器。
- 允許通過藍牙做音頻輸入。
- 當你的音頻播放時,指定其他的音頻降低音量。
- 在運行狀態(tài)下根據(jù)硬件行為和用戶行為優(yōu)化你的 App 音頻行為。比如,用戶插上耳機時將音量降低以免吵到用戶。