音頻 API 一覽

iOS 和 OS X 平臺都有一系列操做音頻的 API,其中涵蓋了從低到高的所有層級。隨着時間的推移、平臺的增加以及改變,不一樣 API 的數量能夠說有着很是巨大的變化。本文對當前可使用的 API 以及它們使用的不一樣目的進行簡要的歸納。html

Media Player 框架

Media Player 框架是 iOS 平臺上一個用於音頻和視頻播放的高層級接口,它包含了一個你能夠在應用中直接使用的默認的用戶界面。你可使用它來播放用戶在 iPod 庫中的項目,或者播放本地文件以及網絡流。ios

另外,這個框架也包括了查找用戶媒體庫中內容的 API,同時還能夠配置像是在鎖屏界面或者控制中內心的音頻控件。api

AVFoundation

AVFoundation 是蘋果的現代媒體框架,它包含了一些不一樣的用途的 API 和不一樣層級的抽象。其中有一些是現代 Objective-C 對於底層 C 語言接口的封裝。除了少數的例外狀況,AVFoundation 能夠同時在 iOS 和 OS X 中使用。服務器

AVAudioSession

AVAudioSession 是用於 iOS 系統中協調應用程序之間的音頻播放的 API 的。例如,當有電話打進來時,音頻的播放就會被暫停;在用戶啓動電影時,音樂的播放就會中止。咱們須要使用這些 API 來確保一個應用程序可以正確響應並處理這類事件。網絡

AVAudioPlayer

這個高層級的 API 爲你提供一個簡單的接口,用來播放本地或者內存中的音頻。這是一個無界面的音頻播放器 (也就是說沒有提供 UI 元素),使用起來也很直接簡單。它不適用於網絡音頻流或者低延遲的實時音頻播放。若是這些問題都不須要擔憂,那麼 AVAudioPlayer 可能就是正確的選擇。音頻播放器的 API 也爲咱們帶來了一些額外的功能,好比循環播放、獲取音頻的音量強度等等。session

AVAudioRecorder

做爲與 AVAudioPlayer 相對應的 API,AVAudioRecorder 是將音頻錄製爲文件的最簡單的方法。除了用一個音量計接受音量的峯值和平均值之外,這個 API 簡單粗暴,但要是你的使用場景很簡單的話,這可能偏偏就是你想要的方法。框架

AVPlayer

AVPlayer 與上面提到的 API 相比,提供了更多的靈活性和可控性。它基於 AVPlayerItem 和 AVAsset,爲你提供了顆粒度更細的權限來獲取資源,好比選擇指定的音軌。它還經過 AVQueuePlayer 子類支持播放列表,並且你能夠控制這些資源是否可以經過 AirPlay 發送。ui

與 AVAudioPlayer 最主要的區別是,AVPlayer 對來自網絡的流媒體資源的 「開箱即用」 支持。這增長了處理播放狀態的複雜性,可是你可使用 KVO 來觀測全部的狀態參數來解決這個問題。插件

AVAudioEngine

AVAudioEngine 是播放和錄製的 Objective-C 接口。它提供了之前須要深刻到 Audio Toolbox 框架的 C API 才能作的控制 (例如一些實時音頻任務)。該音頻引擎 API 對底層的 API 創建了優秀的接口。若是你不得不處理底層的問題,你仍然可使用 Audio Toolbox 框架。3d

這個 API 的基本概念是創建一個音頻的節點圖,從源節點 (播放器和麥克風) 以及過處理 (overprocessing) 節點 (混音器和效果器) 到目標節點 (硬件輸出)。每個節點都具備必定數量的輸入和輸出總線,同時這些總線也有良好定義的數據格式。這種結構使得它很是的靈活和強大。並且它集成了音頻單元 (audio unit)。

Audio Unit 框架

Audio Unit 框架是一個底層的 API;全部 iOS 中的音頻技術都構建在 Audio Unit 這個框架之上。音頻單元是用來加工音頻數據的插件。一個音頻單元鏈叫作音頻處理圖。

若是你須要很是低的延遲 (如 VoIP 或合成樂器)、回聲消除、混音或者音調均衡的話,你可能須要直接使用音頻單元,或者本身寫一個音頻單元。可是其中的大部分工做可使用 AVAudioEngine 的 API 來完成。若是你不得不寫本身的音頻單元的話,你能夠將它們與 AVAudioUnit 節點一塊兒集成在 AVAudioEngine 處理圖中。

跨應用程序音頻

Audio Unit 的 API 能夠在 iOS 中進行跨應用音頻。音頻流 (和 MIDI 命令) 能夠在應用程序之間發送。好比說:一個應用程序能夠提供音頻的效果器或者濾波器。另外一個應用程序能夠將它的音頻發送到第一個應用程序中,並使用其中的音頻效果器處理音頻。被過濾的音頻又會被實時地發送回原來的應用程序中。 CoreAudioKit 提供了一個簡單的跨應用程序的音頻界面。

其餘 APIs

OpenAL

OpenAL 是一個跨平臺的 API。它提供了位置 (3D) 和低延遲的音頻服務。它主要用於跨平臺遊戲的開發。它有意地模仿了 OpenGL 中 API 的風格。

MIDI

在 iOS 上,Core MIDI 和 CoreAudioKit 能夠被用來使應用程序表現爲 MIDI 設備。在 OS X 上,Music Sequencing 服務提供了基於 MIDI 的控制和對音樂數據訪問的權限。Core MIDI 服務爲服務器和驅動程序提供了支持。

TheAmazingAudioEngine

就是基於AudioUnit框架、AudioToolBox框架、AVFoundation框架的封裝,使其更方便使用。

更多

  • 在 OS X 中,最基本的音頻接口就是 NSBeep(),它可以簡單地播放系統中的聲音。
  • NSSound 類爲 OS X 提供了用於播放聲音的簡單接口,與 iOS 中的 AVAudioPlayer 在概念上基本相似。
  • 全部的通知 API,包括 iOS 中的本地通知或者推送通知、OS X 中的 NSUserNotification 以及 CloudKit 通知,均可以播放聲音。
  • Audio Toolbox 框架是強大的,可是它的層級卻很是的低。在過去,它基於 C++ 所編寫,可是其大多數的功能如今均可以經過 AVFoundation 實現。
  • QTKit 和 QuickTime 框架如今已通過時了,它們不該該被用在之後的開發中。咱們應該使用 AVFoundation (和 AVKit) 來代替它們。

原文 Audio API Overview

相關文章
相關標籤/搜索