iOS 音頻系列之一:Core Audio簡(jiǎn)介

任何吸引人的游戲都少不了聲音歼捐。iOS開(kāi)發(fā)者在游戲中需要使用聲音時(shí)有多種選擇婿滓,取決于對(duì)游戲中音頻的控制需求墙歪,可以選擇簡(jiǎn)單的內(nèi)置服務(wù)赴捞,也可以選擇更高級(jí)的API(比如OpenAL)。

通過(guò)音頻API绘闷,可以實(shí)現(xiàn)流式音頻藐守,播放簡(jiǎn)短音效浪藻,甚至模擬3d空間的音頻浙芙。有些游戲可以通過(guò)音軌讓玩家沉浸在特定的心境中玩游戲登刺,設(shè)置鼓勵(lì)用戶使用耳機(jī)來(lái)獲得更完美的體驗(yàn)。

IMG_8866.PNG

本系列文章中嗡呼,會(huì)陸續(xù)整理近幾年來(lái)在工作中涉及到的音頻的相關(guān)知識(shí)纸俭,以算做對(duì)自己知識(shí)體系的一次梳理吧,大體包括Core Audio晤锥、OpenAL 以及Cocos2d引擎中的音效部分等三個(gè)方面。

? Core Audio 是什么?
? Core Audio 中提供的音頻服務(wù)
? Core Audio 中的有關(guān)音頻框架
? 有關(guān) Core Audio 的變化及更新

Core Audio 是什么廊宪?

Core Audio 是iOS和 MAC 的關(guān)于數(shù)字音頻處理的基礎(chǔ)矾瘾,它提供應(yīng)用程序用來(lái)處理音頻的一組軟件框架,所有關(guān)于IOS音頻開(kāi)發(fā)的接口都是由Core Audio來(lái)提供或者經(jīng)過(guò)它提供的接口來(lái)進(jìn)行封裝的箭启,按照官方的說(shuō)法是集播放壕翩、音頻處理、錄制為一體的專(zhuān)業(yè)技術(shù)傅寡,通過(guò)它我們的程序可以同時(shí)錄制放妈,播放一個(gè)或者多個(gè)音頻流,自動(dòng)適應(yīng)耳機(jī)荐操,藍(lán)牙耳機(jī)等硬件芜抒,響應(yīng)各種電話中斷,靜音托启,震動(dòng)等宅倒,甚至提供3D效果的音樂(lè)播放。

相關(guān)鏈接:
Core Audio Overview
Audio & Video Starting Point
Core Audio Glossary

Core Audio中提供的音頻服務(wù)

Core Audio 本身是一個(gè)很龐大的話題屯耸,涉及到多個(gè)領(lǐng)域中的不同服務(wù)拐迁,為了更方便的使用Core Audio蹭劈,通常可以將其分割為更小的模塊线召。圖一展示了根據(jù)應(yīng)用程序服務(wù)層分解的示意圖铺韧。構(gòu)建在應(yīng)用程序棧最下面的是底層硬件。接下來(lái)往上是驅(qū)動(dòng)程序?qū)踊貉汀?gòu)建在驅(qū)動(dòng)層之上的每一層都是蘋(píng)果提供給開(kāi)發(fā)人員的應(yīng)用層服務(wù)哈打,包括各類(lèi)音頻API和框架。

無(wú)標(biāo)題1.png

主要的幾類(lèi)服務(wù):

Audio Unit
Audio Unit 是Core Audio 在應(yīng)用層中最底層的服務(wù)割卖。在使用其他音頻API時(shí)前酿,最終在底層都會(huì)調(diào)用到Audio Unit。在所有的API中鹏溯,Audio Unit 是延遲最短且最靈活的罢维,但代價(jià)就是它的使用相當(dāng)?shù)膹?fù)雜,幸運(yùn)的是在實(shí)際使用中丙挽,我們很少直接使用Audio Unit肺孵。
相關(guān)鏈接:
Audio Unit Framework Reference
相關(guān)項(xiàng)目工程:
Core Audio Utility Classes

Audio File Service
通過(guò)Audio File Service 提供的API可以打開(kāi)并讀取或者寫(xiě)入磁盤(pán)上存儲(chǔ)的文件。

Audio File Stream Service
它是對(duì)Audio File Service 的擴(kuò)展補(bǔ)充颜阐。Audio File Service 對(duì)存儲(chǔ)到磁盤(pán)上的音頻文件進(jìn)行操作平窘,而Audio File Stream Service
并不一定關(guān)聯(lián)到某個(gè)文件上,它更適合基于網(wǎng)絡(luò)的音頻應(yīng)用程序凳怨。

Audio Conversion Service
通過(guò)它可以將數(shù)據(jù)轉(zhuǎn)換為PCM格式或者從PCM格式轉(zhuǎn)換成數(shù)據(jù)瑰艘。

Extended Audio File Service
可以將它理解為Audio File Service 和 Audio File Service 的組合。通過(guò)這種API 可以直接加在并轉(zhuǎn)換音頻文件肤舞。

Audio Session Service
和Core Audio中的其他API不同紫新,它的主要用于 iOS 系統(tǒng)中協(xié)調(diào)應(yīng)用程序之間的音頻播放的 API 的。例如李剖,當(dāng)有電話打進(jìn)來(lái)時(shí)芒率,音頻的播放就會(huì)被暫停;在用戶啟動(dòng)電影時(shí)篙顺,音樂(lè)的播放就會(huì)停止偶芍。我們需要使用這些 API 來(lái)確保一個(gè)應(yīng)用程序能夠正確響應(yīng)并處理這類(lèi)事件。

System Sound Service
它是一種允許播放短音效和警告的基本服務(wù)德玫,還具有提供振動(dòng)功能的獨(dú)特能力匪蟀,Core Audio中的其他任何服務(wù)都不能訪問(wèn)振動(dòng)系統(tǒng)。

Audio Queue Service
它可以對(duì)播放音頻進(jìn)行精細(xì)的控制宰僧,比如暫停萄窜、繼續(xù)、循環(huán)播放和音頻同步等,因此特別適合于播放和錄制持續(xù)時(shí)間很長(zhǎng)的音頻查刻。在游戲中進(jìn)行語(yǔ)音敘述等情景時(shí)键兜,需要音樂(lè)或者長(zhǎng)時(shí)間的播放文件,便會(huì)需要它穗泵。

AVFoundation
它是Core Audio中唯一基于Objective-C的框架普气。這個(gè)框架提供了AVAudioPlayer類(lèi)用于播放,AVAudioReconder類(lèi)用于錄音佃延,以及AVAudioSession類(lèi)用于設(shè)置音頻回話现诀。和其他高層API一樣,我們需要在易用性和功能之間做出權(quán)衡履肃。如果在此框架中找不到我們需要的特性或者功能仔沿,那么就必須深入底層服務(wù)并直接使用底層的API。

相關(guān)鏈接:
AV Foundation Framework Reference
AV Foundation Programming Guide
Audio Session Programming Guide
相關(guān)的項(xiàng)目工程:
AVCaptureAudioDataOutput To AudioUnit iOS

OpenAL
和其他專(zhuān)用API不同尺棋,OpenAL是一個(gè)狂平臺(tái)的用于播放和捕捉音頻的工業(yè)標(biāo)準(zhǔn)封锉。OpenAL更適合播放空間音頻(spatialized sound)或者定位音頻(positional sound)”烀可以將空間音頻理解成3D空間中的聲音成福,通過(guò)OpanAL可以對(duì)音效添加一些效果,比如位置屬性荆残,這樣會(huì)使遠(yuǎn)程的聲音比近處的聲音聽(tīng)起來(lái)要弱一些奴艾。

相關(guān)鏈接:
OpenAL FAQ for iPhone OS
相關(guān)的項(xiàng)目工程:
oalTouch

Core Audio中的有關(guān)音頻框架

Core Audio 中的服務(wù)和框架并沒(méi)有一對(duì)一的對(duì)應(yīng)關(guān)系,應(yīng)用層的服務(wù)實(shí)際上分為5個(gè)不同的框架:Core Audio内斯、Audio Toolbox蕴潦、Audio Unit、AVFoundtaion俘闯、OpenAL潭苞。圖二中很好的展示了這些框架和服務(wù)之間的映射關(guān)系。

無(wú)標(biāo)題2.png

Audio Unit备徐、AVFoundation和OpenAL的框架非常明了萄传,和他們同名的服務(wù)直接對(duì)應(yīng)甚颂,其中AVFoundtion有三個(gè)Objective-C類(lèi)組成:AVAudioPlayer蜜猾、AVAudioRecorder和AVAudioSession。

Audio Toolbox 框架提供了前面列出的其他剩下的應(yīng)用層服務(wù)振诬,包括非常重要的Audio Session Service蹭睡。
相關(guān)鏈接:
Audio Toolbox Framework Reference

其他相關(guān)框架:

Media Player Framework
它是一個(gè)用于音頻和視頻播放的高層級(jí)接口,它包含了一個(gè)可以在應(yīng)用中直接使用的默認(rèn)的用戶界面赶么,可以使用它來(lái)播放用戶在 iPod 庫(kù)中的項(xiàng)目肩豁,或者播放本地文件以及網(wǎng)絡(luò)流。另外,這個(gè)框架也包括了查找用戶媒體庫(kù)中內(nèi)容的 API清钥,同時(shí)還可以配置像是在鎖屏界面或者控制中心里的音頻控件琼锋。

相關(guān)鏈接:
Media Player Framework Reference

Core MIDI Framework
提供與MIDI設(shè)備通訊的標(biāo)準(zhǔn)方式,包括硬件鍵盤(pán)和合成器祟昭÷瓶玻可以使用這個(gè)框架來(lái)發(fā)送和接收MIDI消息以及與通過(guò)dock連接器或網(wǎng)絡(luò)連接到iOS設(shè)備的MIDI外設(shè)交互。

相關(guān)鏈接:
Core MIDI Framework Reference

OS 4.0以后的功能變化如下:

iOS 7.1
Support for External Media Players (CarPlay相關(guān)的)

iOS 7.0
新增 Inter-App Audio和 AudioCopy
強(qiáng)化 Media Player / AV Foundation Framework
棄用 Audio Toolbox framework內(nèi)的Audio Session API

iOS 6.0
新增 Audio UnitのComponent
強(qiáng)化 Media Player / Core Media / AV Foundation Framework

iOS 5.0
新增 Audio UnitのComponent
強(qiáng)化 Media Player / AV Foundation / AudioToolbox Frameworks

iOS 4.3
強(qiáng)化 AV Foundation
強(qiáng)化 Media Player / Audio Unit / Audio Toolbox Frameworks

iOS 4.2
新增 Core MIDI framework
強(qiáng)化 Media Player Framework
新增 AirPlay

iOS 4.1
強(qiáng)化 AV Foundation

iOS 4.0
新增 Core Media Framework
強(qiáng)化 AV Foundation

相關(guān)鏈接:What's New in iOS

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末篡悟,一起剝皮案震驚了整個(gè)濱河市谜叹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搬葬,老刑警劉巖荷腊,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異急凰,居然都是意外死亡女仰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)香府,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)董栽,“玉大人,你說(shuō)我怎么就攤上這事企孩《迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵勿璃,是天一觀的道長(zhǎng)擒抛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)补疑,這世上最難降的妖魔是什么歧沪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮莲组,結(jié)果婚禮上诊胞,老公的妹妹穿的比我還像新娘。我一直安慰自己锹杈,他們只是感情好撵孤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著竭望,像睡著了一般邪码。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咬清,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天闭专,我揣著相機(jī)與錄音奴潘,去河邊找鬼。 笑死影钉,一個(gè)胖子當(dāng)著我的面吹牛画髓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播平委,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雀扶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了肆汹?” 一聲冷哼從身側(cè)響起愚墓,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昂勉,沒(méi)想到半個(gè)月后浪册,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岗照,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年村象,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攒至。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厚者,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迫吐,到底是詐尸還是另有隱情库菲,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布志膀,位于F島的核電站熙宇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏溉浙。R本人自食惡果不足惜烫止,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戳稽。 院中可真熱鬧馆蠕,春花似錦、人聲如沸惊奇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赊时。三九已至吨铸,卻和暖如春行拢,著一層夾襖步出監(jiān)牢的瞬間祖秒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竭缝,地道東北人房维。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像抬纸,于是被迫代替她去往敵國(guó)和親咙俩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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

  • Core Audio 是什么湿故?Core Audio 是iOS和 MAC 的關(guān)于數(shù)字音頻處理的基礎(chǔ)阿趁,它提供應(yīng)用程序用...
    WSGNSLog閱讀 1,031評(píng)論 0 1
  • Core Audio 是什么?Core Audio 是iOS和 MAC 的關(guān)于數(shù)字音頻處理的基礎(chǔ)坛猪,它提供應(yīng)用程序用...
    JonesCxy閱讀 795評(píng)論 0 2
  • What Is Core Audio? Core Audio is the digital audio infra...
    MoShengLive閱讀 3,046評(píng)論 0 4
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議脖阵。它實(shí)...
    香橙柚子閱讀 23,881評(píng)論 8 183
  • 寫(xiě)一封信,放進(jìn)信封墅茉,塞進(jìn)門(mén)縫命黔。媽媽打開(kāi)門(mén),就看到了你寫(xiě)給媽媽的信就斤。 你讀信給媽媽聽(tīng):媽媽?zhuān)易類(lèi)?ài)你悍募。我會(huì)擁抱你,親...
    Anne_GG閱讀 226評(píng)論 0 0