iOS 和 OS X 平臺都有一系列操做音頻的 API,其中涵蓋了從低到高的所有層級。隨着時間的推移、平臺的增加以及改變,不一樣 API 的數量能夠說有着很是巨大的變化。本文對當前可使用的 API 以及它們使用的不一樣目的進行簡要的歸納。html
Media Player 框架是 iOS 平臺上一個用於音頻和視頻播放的高層級接口,它包含了一個你能夠在應用中直接使用的默認的用戶界面。你可使用它來播放用戶在 iPod 庫中的項目,或者播放本地文件以及網絡流。ios
另外,這個框架也包括了查找用戶媒體庫中內容的 API,同時還能夠配置像是在鎖屏界面或者控制中內心的音頻控件。api
AVFoundation
是蘋果的現代媒體框架,它包含了一些不一樣的用途的 API 和不一樣層級的抽象。其中有一些是現代 Objective-C 對於底層 C 語言接口的封裝。除了少數的例外狀況,AVFoundation
能夠同時在 iOS 和 OS X 中使用。服務器
AVAudioSession
是用於 iOS 系統中協調應用程序之間的音頻播放的 API 的。例如,當有電話打進來時,音頻的播放就會被暫停;在用戶啓動電影時,音樂的播放就會中止。咱們須要使用這些 API 來確保一個應用程序可以正確響應並處理這類事件。網絡
這個高層級的 API 爲你提供一個簡單的接口,用來播放本地或者內存中的音頻。這是一個無界面的音頻播放器 (也就是說沒有提供 UI 元素),使用起來也很直接簡單。它不適用於網絡音頻流或者低延遲的實時音頻播放。若是這些問題都不須要擔憂,那麼 AVAudioPlayer
可能就是正確的選擇。音頻播放器的 API 也爲咱們帶來了一些額外的功能,好比循環播放、獲取音頻的音量強度等等。session
做爲與 AVAudioPlayer
相對應的 API,AVAudioRecorder
是將音頻錄製爲文件的最簡單的方法。除了用一個音量計接受音量的峯值和平均值之外,這個 API 簡單粗暴,但要是你的使用場景很簡單的話,這可能偏偏就是你想要的方法。框架
AVPlayer
與上面提到的 API 相比,提供了更多的靈活性和可控性。它基於 AVPlayerItem
和 AVAsset
,爲你提供了顆粒度更細的權限來獲取資源,好比選擇指定的音軌。它還經過 AVQueuePlayer
子類支持播放列表,並且你能夠控制這些資源是否可以經過 AirPlay 發送。ui
與 AVAudioPlayer
最主要的區別是,AVPlayer
對來自網絡的流媒體資源的 「開箱即用」 支持。這增長了處理播放狀態的複雜性,可是你可使用 KVO 來觀測全部的狀態參數來解決這個問題。插件
AVAudioEngine
是播放和錄製的 Objective-C 接口。它提供了之前須要深刻到 Audio Toolbox 框架的 C API 才能作的控制 (例如一些實時音頻任務)。該音頻引擎 API 對底層的 API 創建了優秀的接口。若是你不得不處理底層的問題,你仍然可使用 Audio Toolbox 框架。3d
這個 API 的基本概念是創建一個音頻的節點圖,從源節點 (播放器和麥克風) 以及過處理 (overprocessing) 節點 (混音器和效果器) 到目標節點 (硬件輸出)。每個節點都具備必定數量的輸入和輸出總線,同時這些總線也有良好定義的數據格式。這種結構使得它很是的靈活和強大。並且它集成了音頻單元 (audio unit)。
Audio Unit 框架是一個底層的 API;全部 iOS 中的音頻技術都構建在 Audio Unit 這個框架之上。音頻單元是用來加工音頻數據的插件。一個音頻單元鏈叫作音頻處理圖。
若是你須要很是低的延遲 (如 VoIP 或合成樂器)、回聲消除、混音或者音調均衡的話,你可能須要直接使用音頻單元,或者本身寫一個音頻單元。可是其中的大部分工做可使用 AVAudioEngine
的 API 來完成。若是你不得不寫本身的音頻單元的話,你能夠將它們與 AVAudioUnit
節點一塊兒集成在 AVAudioEngine
處理圖中。
Audio Unit 的 API 能夠在 iOS 中進行跨應用音頻。音頻流 (和 MIDI 命令) 能夠在應用程序之間發送。好比說:一個應用程序能夠提供音頻的效果器或者濾波器。另外一個應用程序能夠將它的音頻發送到第一個應用程序中,並使用其中的音頻效果器處理音頻。被過濾的音頻又會被實時地發送回原來的應用程序中。 CoreAudioKit 提供了一個簡單的跨應用程序的音頻界面。
OpenAL 是一個跨平臺的 API。它提供了位置 (3D) 和低延遲的音頻服務。它主要用於跨平臺遊戲的開發。它有意地模仿了 OpenGL 中 API 的風格。
在 iOS 上,Core MIDI 和 CoreAudioKit 能夠被用來使應用程序表現爲 MIDI 設備。在 OS X 上,Music Sequencing 服務提供了基於 MIDI 的控制和對音樂數據訪問的權限。Core MIDI 服務爲服務器和驅動程序提供了支持。
就是基於AudioUnit框架、AudioToolBox框架、AVFoundation框架的封裝,使其更方便使用。
NSBeep()
,它可以簡單地播放系統中的聲音。NSSound
類爲 OS X 提供了用於播放聲音的簡單接口,與 iOS 中的 AVAudioPlayer
在概念上基本相似。NSUserNotification
以及 CloudKit 通知,均可以播放聲音。AVFoundation
實現。AVFoundation
(和 AVKit) 來代替它們。