Audio Unit 介紹

關於 Audio Unit

iOS 提供了音頻處理插件,支持混音,聲音均衡,格式轉化,以及用於錄音,回放,離線渲染,實時對話的輸入輸出。能夠動態載入和使用這些強大而靈活的插件,在 iOS 應用中這些插件被稱爲 audio units。html

Audio units 一般在被稱爲 audio processing graph 的封閉對象的上下文中進行工做,如圖所示,應用程序經過一個或者多個回調函數將音頻發送到 graph 中的第一個音頻單元,並對每個音頻單元進行單獨控制。在 I/O unit 的輸出(audio processing graph 中最後一個 audio unit)直接鏈接到輸出硬件。編程

初識 Audio Unit

因爲 audio units 構成了 iOS 音頻堆棧中最低層的編程層,想要高效的使用它們須要比其它音頻技術有更深刻的瞭解。除非須要實時播放合成聲音,低延遲輸入輸出,或者特定的 audio unit 功能,不然優先使用 Media Player,AV Foundation,OpenAL 或 AudioToolbox 框架。設計模式

Audio Units 提供更快,模塊化音頻處理方案

直接使用 audio units 有兩大優勢:session

  • 出色的響應能力。由於你能夠訪問 audio unit 中的實時優先級線程呈現回調函數,因此你的代碼會盡量接近 metal。合成樂器和實時同步語音輸入輸入可以最大收益於直接使用 audio units。
  • 動態配置。以 AUGraph 爲基礎構建的 audio processing graph API,讓你可以動態組合,從新配置和從新排列複雜的音頻處理鏈。這是 iOS 中惟一提供此功能的 API。

一個 audio unit 的生命週期以下:架構

  1. 在運行時,獲取一個對動態連接庫的引用,該庫定義了你想要使用的 audio unit。
  2. 實例化 audio unit。
  3. 根據應用須要配置 audio unit。
  4. 初始化 audio unit 以準備處理音頻。
  5. 開始音頻流。
  6. 控制 audio unit。
  7. 完成後,銷燬 audio unit。

Audio units 提供了很是有用的功能,例如立體聲聲相,混音,音量控制,音頻電平測量。添加 audio units 到你的應用中,你必須掌握一些列基本概念,例如音頻數據流格式,呈現回調函數和音頻單元架構。app

選擇設計模式和構建應用程序

  • 如何配置 I/O unit。I/O unit 有兩個獨立的 elements,一個從輸入硬件接收音頻,一個發送音頻到輸出硬件。每一種設計模式必須指示該啓用的 element。
  • 在 audio processing graph 中,你必須正確指定音頻流支持數據流格式。
  • 在哪創建 audio unit 鏈接,在哪附加回調函數。 audio unit 鏈接是從一個 audio unit 的輸出,到另外一個 audio unit 的輸入流格式的正式構造。回調函數讓你將音頻數據輸入到 graph 中,或者在 graph 中的單個樣本級別操縱音頻。

不管你選擇哪一種設計模式,構建 audio unit 應用程序的基本步驟是相同的:框架

  • 配置應用的 audio session,確保你的應用可以股在系統和設備硬件上下文中正常工做。
  • 構建 audio processing graph。
  • 提供一個用戶交互控制圖像音頻單元。

充分利用每個 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.模塊化

相關文章
相關標籤/搜索