AudioToolbox
, 記錄或播放音頻彻亲,轉(zhuǎn)換格式,解析音頻流以及配置音頻會話。音頻工具箱框架提供了用于記錄,回放和流解析的接口抹沪。在iOS中,該框架提供了用于管理音頻會話的其他接口瓤球。
整合音效和樂器(Incorporating Audio Effects and Instruments)
通過托管音頻單元(AU)插件融欧,將自定義音頻處理和MIDI樂器添加到您的應(yīng)用程序。注釋:AU(Audio Unit) MIDI (Musical Instrument Digital Interface)樂器數(shù)字接口
HostViewController 及其關(guān)聯(lián)的Storyboard提供了用戶界面卦羡。
AudioUnitManager 使用效果器和樂器插件管理交互噪馏。
SimplePlayEngine 用AVAudioEngine播放音頻樣本和MIDI數(shù)據(jù)
一、 查找音頻單元(Audio Units)
AudioComponentDescription
結(jié)構(gòu)體绿饵。音頻組建描述,標(biāo)識音頻組件的信息欠肾。
例:
AudioComponentDescription description = {0};
//用于標(biāo)識組件的接口。輸出播放拟赊,樂器等等
description.componentType = kAudioUnitType_Output;
//可用于指示組件的用途刺桃。例如,您可以使用lpas或lowp作為助記符指示音頻單元是低通濾波器吸祟。
description.componentSubType = kAudioUnitSubType_RemoteIO;
//向Apple注冊的音頻組件的唯一供應(yīng)商標(biāo)識符瑟慈。
description.componentManufacturer = kAudioUnitManufacturer_Apple;
AVAudioUnitComponent
類 。提供有關(guān)音頻單元的詳細(xì)信息屋匕,例如:類型葛碧,子類型,制造商和位置过吻。
//該音頻單元組分
//獲取音頻單元組件的音頻單元
@property(nonatomic, readonly) AudioComponent audioComponent;
AVAudioUnitComponentManager
類 进泼。一個對象,提供一種搜索和查詢在系統(tǒng)中注冊的音頻組件的方法纤虽。
// 存放AVAudioUnitComponent的NSArry
// - (NSArray<AVAudioUnitComponent *> *)componentsMatchingDescription:(AudioComponentDescription)desc;
NSArray*arr = [[AVAudioUnitComponentManager sharedAudioUnitComponentManager]componentsMatchingDescription:description];
//與搜索匹配的音頻組件對象數(shù)組乳绕。
//predicate搜索謂詞。音頻組件的信息或標(biāo)簽可用于構(gòu)建搜索條件逼纸,例如"typeName CONTAINS 'Effect'" or "tags IN {'Sampler', 'MIDI'}".
- (NSArray<AVAudioUnitComponent *> *)componentsMatchingPredicate:(NSPredicate *)predicate;
//等等刷袍。還有一些別的參數(shù)方法獲取根據(jù)需要去拿。
kAudioUnitType_Effect
全局變量樊展。音頻效果
kAudioUnitType_Effect = 'aufx'
kAudioUnitType_MusicDevice
全局變量\枚舉呻纹。樂器單元可以用作軟件樂器,例如采樣器或合成器专缠。它響應(yīng)MIDI(樂器數(shù)字接口)控制信號并可以創(chuàng)建音符雷酪。
kAudioUnitType_MusicDevice = 'aumu'
二、初始化 AVAudioUnit
AVAudioUnit
類涝婉。音頻節(jié)點(diǎn)類的子類哥力,根據(jù)音頻單元的類型,可以實(shí)時或非實(shí)時處理音頻墩弯。
異步實(shí)例化
//異步創(chuàng)建包裝在AVAudioUnit中的音頻單元組件(audio unit)的實(shí)例
[AVAudioUnit instantiateWithComponentDescription:description options:kAudioComponentInstantiation_LoadOutOfProcess completionHandler:^(__kindof AVAudioUnit * _Nullable audioUnit, NSError * _Nullable error) {
}];