任何吸引人的游戲都少不了聲音歼捐。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)。
本系列文章中嗡呼,會(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和框架。
主要的幾類(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)系。
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