天天看點

iOS Audio unit(音頻單元)詳解 關于音頻單元托管

iOS Audio unit(音頻單元)詳解 關于音頻單元托管

iOS  提供的音頻處理插件支援混合,均衡,格式轉換以及錄制,回放,離線呈現和實時對話(如VoIP(網際網路語音協定))的實時輸入/輸出。您可以從  ios  應用程式動态加載并使用 - 即  主機 - 這些強大且靈活的插件(稱為  音頻單元)。

音頻單元通常在稱為音頻處理圖的封閉對象的上下文中工作  ,如圖所示。在本例中,您的應用通過一個或多個回調函數向音頻圖表中的第一個音頻單元發送音頻,并對每個音頻單元進行單獨控制。I / O單元的輸出 - 這個或任何音頻處理圖形中的最後一個音頻單元 - 直接連接配接到輸出硬體。

iOS Audio unit(音頻單元)詳解 關于音頻單元托管

由于音頻單元構成iOS音頻堆棧中最低的程式設計層,是以要有效使用它們需要比您需要其他iOS音頻技術更深的了解。除非您需要實時播放合成聲音,低延遲I / O(輸入和輸出)或特定音頻單元功能,否則請首先檢視媒體播放器,AV Foundation,OpenAL或Audio Toolbox架構。這些更進階别的技術以您的名義使用音頻單元,并提供重要的附加功能,如“  多媒體程式設計指南”中所述。

直接使用音頻單元的兩大優點是:

卓越的響應能力。因為您可以通路音頻單元渲染回調函數中的實時優先級線程,是以您的音頻代碼盡可能接近金屬。合成樂器和實時同步語音I / O直接使用音頻單元最有利。

動态重新配置。以<code>AUGraph</code> 不透明類型為基礎建構的音頻處理圖形API  可讓您以線程安全的方式動态組合,重新配置和重新排列複雜的音頻處理鍊,而這一切都是在處理音頻時完成的。這是iOS中唯一提供此功能的音頻API。

音頻單元的生命周期如下進行:

在運作時,擷取對動态連結庫的引用,該庫定義要使用的音頻單元。

執行個體化音頻單元。

根據需要配置音頻單元,以适應您應用的意圖。

初始化音頻單元以準備處理音頻。

開始音頻流。

控制音頻單元。

完成後,取消配置設定音頻單元。

音頻單元提供非常有用的單個功能,如立體聲聲像,混音,音量控制和音頻電平測量。托管音頻單元可讓您将這些功能添加到您的應用中。但是,要獲得這些好處,您必須獲得一系列基本概念,包括音頻資料流格式,呈現回調函數和音頻單元架構。

相關章節:  音頻單元托管基礎

托管設計模式的音頻單元提供了靈活的藍圖,可根據您的應用的具體情況進行自定義。每種模式都表示:

如何配置I / O單元。I / O單元有兩個獨立的元件,一個接受來自輸入硬體的音頻,一個将音頻發送到輸出硬體。每個設計模式都訓示您應該啟用哪個或哪些元素。

在音頻處理圖表中,您必須指定音頻資料流格式。您必須正确指定支援音頻流的格式。

在哪裡建立音頻單元連接配接以及附加渲染回調函數的位置。音頻單元連接配接是一種正式的結構,其将流格式從一個音頻單元的輸出傳播到另一個音頻單元的輸入。渲染回調使您可以将音頻饋送到圖形中,或者在圖形中的單個樣本級别處理音頻。

無論您選擇哪種設計模式,建構音頻單元托管應用程式的步驟基本相同:

配置您的應用程式音頻會話,以確定您的應用程式在系統和裝置硬體環境中正常工作。

建構音頻處理圖。這個多步驟過程利用您在音頻單元托管基礎知識中學到的所有  知識。

提供用于控制圖形音頻單元的使用者界面。

熟悉這些步驟,以便将它們應用于自己的項目。

相關章節: 建構音頻單元應用程式

本文檔的大部分内容都告訴你,所有的iOS音頻裝置都有共同的重要屬性。例如,這些屬性包括您的應用程式需要在運作時指定和加載音頻單元,然後正确指定其音頻流格式。

同時,每個音頻單元都有一些獨特的功能和要求,從正确的音頻采樣資料類型到使用,到正确行為所需的配置。了解每個音頻裝置的使用細節和特定功能,以便了解何時使用3D混音器裝置以及何時使用多聲道混音器。

相關章節: 使用特定的音頻單元

如果您希望先從 iOS開發的音頻單元開始,請下載下傳iOS開發人員中心提供的示例應用程式之一,例如  音頻混音器(MixerHost)。回到本文檔回答您可能遇到的問題并了解更多資訊。

如果您在開始項目之前需要堅實的概念基礎,請首先閱讀  音頻單元托管基礎知識  。本章解釋API背後的概念。繼續  建構音頻單元應用程式  ,了解為項目選擇設計模式以及建構應用程式的工作流程。

如果您有一些音頻單元的使用經驗,并且隻需要特定的類型,那麼您可以從  使用特定的音頻單元開始。

在閱讀本文之前,這是一個好主意,閱讀部分  一些關于數字音頻和線性PCM  的  核心音頻概述。另外,請檢視  Core Audio詞彙表,  了解您可能不熟悉的術語。要檢查是否可以通過更進階别的技術滿足您的音頻需求,請檢視   在  多媒體程式設計指南中使用音頻。

繼續閱讀