AVAudioSession(1):iOS Audio Session 概覽

本文轉(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 音頻行為。比如,用戶插上耳機時將音量降低以免吵到用戶。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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