版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.06.24 |
前言
AudioUnit框架作為您的應(yīng)用程序添加復(fù)雜的音頻操作和處理功能锁荔。 創(chuàng)建在主機(jī)應(yīng)用程序中生成或修改音頻的音頻單元擴(kuò)展阳堕。接下來幾篇我們就一起看一下這個框架恬总,感興趣的看上面幾篇文章壹堰。
1. AudioUnit框架詳細(xì)解析(一) —— 基本概覽
2. AudioUnit框架詳細(xì)解析(二) —— 關(guān)于Audio Unit Hosting之概覽(一)
3. AudioUnit框架詳細(xì)解析(三) —— 關(guān)于Audio Unit Hosting之如何使用本文檔和參考資料(二)
4. AudioUnit框架詳細(xì)解析(四) —— 音頻單元提供快速的模塊化音頻處理之iOS中的Audio Units(一)
5. AudioUnit框架詳細(xì)解析(五) —— 音頻單元提供快速的模塊化音頻處理之在Concert中使用兩個音頻單元API(二)
Use Identifiers to Specify and Obtain Audio Units - 使用標(biāo)識符來指定和獲取音頻單元
要在運(yùn)行時查找音頻單元贱纠,請首先在音頻組件描述數(shù)據(jù)結(jié)構(gòu)中指定其類型谆焊,子類型和制造商密鑰浦夷。 無論使用音頻單元還是音頻處理圖形API,都可以這樣做。 Listing 1-1給出了怎么做懈息。
// Listing 1-1 Creating an audio component description to identify an audio unit
AudioComponentDescription ioUnitDescription;
ioUnitDescription.componentType = kAudioUnitType_Output;
ioUnitDescription.componentSubType = kAudioUnitSubType_RemoteIO;
ioUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
ioUnitDescription.componentFlags = 0;
ioUnitDescription.componentFlagsMask = 0;
此說明僅指定一個音頻單元 - Remote I/O unit
摹恰。 此音頻和其他iOS音頻單元的鍵在Identifier Keys for Audio Units
中列出。 請注意姑宽,所有iOS音頻設(shè)備都使用componentManufacturer
字段的kAudioUnitManufacturer_Apple
密鑰。
要創(chuàng)建通配符描述舵变,請將一個或多個類型/子類型字段設(shè)置為0纪隙。例如扛或,要匹配所有I / O單元熙兔,請將列表1-1更改為對componentSubType
字段使用值0。
通過描述麸锉,您可以使用兩種API中的任何一種獲得對指定音頻單元(或音頻單元集)的庫的引用淮椰。 音頻單元API如Listing 1-2
所示纳寂。
Listing 1-2 Obtaining an audio unit instance using the audio unit API
AudioComponent foundIoUnitReference = AudioComponentFindNext (
NULL,
AudioUnit ioUnitInstance;
AudioComponentInstanceNew (
foundIoUnitReference,
&ioUnitInstance
);
將NULL
傳遞給AudioComponentFindNext
的第一個參數(shù)告訴該函數(shù)使用系統(tǒng)定義的順序查找與描述匹配的第一個系統(tǒng)音頻單元毙芜。 如果您改為在此參數(shù)中傳遞先前找到的音頻單元引用,則該函數(shù)將找到與該描述匹配的下一個音頻單元晦雨。 例如闹瞧,此用法可讓您通過重復(fù)調(diào)用AudioComponentFindNext
來獲取對所有I / O單元的引用展辞。
AudioComponentFindNext
調(diào)用的第二個參數(shù)是指Listing 1-1
中定義的音頻單元描述。
AudioComponentFindNext
函數(shù)的結(jié)果是對定義音頻單元的動態(tài)鏈接庫的引用脚粟。 將引用傳遞給AudioComponentInstanceNew
函數(shù)以實(shí)例化音頻單元蘸朋,如Listing 1-2
所示藕坯。
您可以使用音頻處理圖API來實(shí)例化音頻單元。 Listing 1-3顯示了做法已慢。
// Listing 1-3 Obtaining an audio unit instance using the audio processing graph API
// Declare and instantiate an audio processing graph
AUGraph processingGraph;
NewAUGraph (&processingGraph);
// Add an audio unit node to the graph, then instantiate the audio unit
AUNode ioNode;
AUGraphAddNode (
processingGraph,
&ioUnitDescription,
&ioNode
);
AUGraphOpen (processingGraph); // indirectly performs audio unit instantiation
// Obtain a reference to the newly-instantiated I/O unit
AudioUnit ioUnit;
AUGraphNodeInfo (
processingGraph,
ioNode,
NULL,
&ioUnit
);
該代碼清單引入了AUNode
佑惠,這是一種不透明的類型膜楷,表示音頻處理圖形上下文中的音頻單元贞奋。 在AUGraphNodeInfo
函數(shù)調(diào)用的輸出中,您將在ioUnit
參數(shù)中收到對新音頻單元實(shí)例的引用特愿。
AUGraphAddNode
調(diào)用的第二個參數(shù)引用了Listing 1-1中定義的音頻單元描述揍障。
獲得音頻單元實(shí)例后俩由,您可以對其進(jìn)行配置幻梯。 為此,您需要了解兩個音頻單元的特征咬摇,范圍和元素(scopes and elements)
肛鹏。
后記
本篇主要講述了使用標(biāo)識符來指定和獲取音頻單元,感興趣的給個贊或者關(guān)注~~~~