iOS 提供了音頻處理插件,支持混音,聲音均衡,格式轉化,以及用於錄音,回放,離線渲染,實時對話的輸入輸出。能夠動態載入和使用這些強大而靈活的插件,在 iOS 應用中這些插件被稱爲 audio units。html
Audio units 一般在被稱爲 audio processing graph 的封閉對象的上下文中進行工做,如圖所示,應用程序經過一個或者多個回調函數將音頻發送到 graph 中的第一個音頻單元,並對每個音頻單元進行單獨控制。在 I/O unit 的輸出(audio processing graph 中最後一個 audio unit)直接鏈接到輸出硬件。編程
因爲 audio units 構成了 iOS 音頻堆棧中最低層的編程層,想要高效的使用它們須要比其它音頻技術有更深刻的瞭解。除非須要實時播放合成聲音,低延遲輸入輸出,或者特定的 audio unit 功能,不然優先使用 Media Player,AV Foundation,OpenAL 或 AudioToolbox 框架。設計模式
直接使用 audio units 有兩大優勢:session
一個 audio unit 的生命週期以下:架構
Audio units 提供了很是有用的功能,例如立體聲聲相,混音,音量控制,音頻電平測量。添加 audio units 到你的應用中,你必須掌握一些列基本概念,例如音頻數據流格式,呈現回調函數和音頻單元架構。app
不管你選擇哪一種設計模式,構建 audio unit 應用程序的基本步驟是相同的:框架
大部分文檔都告訴你全部的iOS audio units 都有重要的共同屬性。例如程序須要在運行時指定和加載 audio unit,而後正確指定音頻流格式。
同時,每個 audio unit 具備某些獨特的特性和要求,從正確的音頻樣本數據類型到如何使用,到所須要的正確配置。瞭解每個 audio unit 的細節和特定功能,例如如何使用 3D mixer unit,如何使用 Multichannel Mixer。ide
若是你但願快速應用 audio unit,能夠下載參考代碼,如遇到問題,查閱文檔。若是你想開始項目前,對 audio unit 有一個較好的基礎,能夠先詳細閱讀基礎文檔,而後選擇設計模式,構建本身的應用。若是對開發 audio units 有必定的經驗,僅想使用指定的類型,參考 Using Specific Audio Units.模塊化