AudioToolbox
, 记录或播放音频,转换格式,解析音频流以及配置音频会话。音频工具箱框架提供了用于记录,回放和流解析的接口。在iOS中,该框架提供了用于管理音频会话的其他接口。
整合音效和乐器(Incorporating Audio Effects and Instruments)
通过托管音频单元(AU)插件,将自定义音频处理和MIDI乐器添加到您的应用程序。注释:AU(Audio Unit) MIDI (Musical Instrument Digital Interface)乐器数字接口
HostViewController 及其关联的Storyboard提供了用户界面。
AudioUnitManager 使用效果器和乐器插件管理交互。
SimplePlayEngine 用AVAudioEngine播放音频样本和MIDI数据
一、 查找音频单元(Audio Units)
AudioComponentDescription
结构体。音频组建描述,标识音频组件的信息。
例:
AudioComponentDescription description = {0};
//用于标识组件的接口。输出播放,乐器等等
description.componentType = kAudioUnitType_Output;
//可用于指示组件的用途。例如,您可以使用lpas或lowp作为助记符指示音频单元是低通滤波器。
description.componentSubType = kAudioUnitSubType_RemoteIO;
//向Apple注册的音频组件的唯一供应商标识符。
description.componentManufacturer = kAudioUnitManufacturer_Apple;
AVAudioUnitComponent
类 。提供有关音频单元的详细信息,例如:类型,子类型,制造商和位置。
//该音频单元组分
//获取音频单元组件的音频单元
@property(nonatomic, readonly) AudioComponent audioComponent;
AVAudioUnitComponentManager
类 。一个对象,提供一种搜索和查询在系统中注册的音频组件的方法。
// 存放AVAudioUnitComponent的NSArry
// - (NSArray *)componentsMatchingDescription:(AudioComponentDescription)desc;
NSArray*arr = [[AVAudioUnitComponentManager sharedAudioUnitComponentManager]componentsMatchingDescription:description];
//与搜索匹配的音频组件对象数组。
//predicate搜索谓词。音频组件的信息或标签可用于构建搜索条件,例如"typeName CONTAINS 'Effect'" or "tags IN {'Sampler', 'MIDI'}".
- (NSArray *)componentsMatchingPredicate:(NSPredicate *)predicate;
//等等。还有一些别的参数方法获取根据需要去拿。
kAudioUnitType_Effect
全局变量。音频效果
kAudioUnitType_Effect = 'aufx'
kAudioUnitType_MusicDevice
全局变量\枚举。乐器单元可以用作软件乐器,例如采样器或合成器。它响应MIDI(乐器数字接口)控制信号并可以创建音符。
kAudioUnitType_MusicDevice = 'aumu'
二、初始化 AVAudioUnit
AVAudioUnit
类。音频节点类的子类,根据音频单元的类型,可以实时或非实时处理音频。
异步实例化
//异步创建包装在AVAudioUnit中的音频单元组件(audio unit)的实例
[AVAudioUnit instantiateWithComponentDescription:description options:kAudioComponentInstantiation_LoadOutOfProcess completionHandler:^(__kindof AVAudioUnit * _Nullable audioUnit, NSError * _Nullable error) {
}];