音频单元托管基础草稿

招募一起翻译的小伙伴,有意者请私信我!

翻译进度表:

1.2014/10/7完整目录以及1.3
2.本项目暂时冷冻,目前忙于WP客户端开发



1.音频单元提供快速、模块化的音频处理

1.1iOS中的音频单元

1.1.1音效单元

1.1.2混响单元

1.1.3I/O单元

1.1.4格式转换单元

1.2协调一致地使用这两个音频单元API


1.3使用identifier来指定和获取音频单元

为在运行时找到音频单元,可以先在一个音频组件描述中指定它的类型,子类型和生产商键值。你可以通过音频单元或者音频处理流程图API来完成这项工作。清单1-1显示如下。

清单1-1 创建一个音频组件描述来标识一个音频单元
AudioComponentDescription ioUnitDescription;
 
ioUnitDescription.componentType          = kAudioUnitType_Output;
ioUnitDescription.componentSubType       = kAudioUnitSubType_RemoteIO;
ioUnitDescription.componentManufacturer  = kAudioUnitManufacturer_Apple;
ioUnitDescription.componentFlags         = 0;
ioUnitDescription.componentFlagsMask     = 0;

这个描述指定了一个音频单元——远程I/O单元。与该类型以及其他类型对应的键列举在《 Identifier Keys for Audio Units》注意,所有iOS音频单元的 componentManufacturer字段都 使用   kAudioUnitManufacturer_Apple作为键值。
为创建一个通配的描述,需要将type/subtype字段中的一个或者多个设为0。例如,为匹配所有I/O单元,需要将清单1-1中的componentSubType字段设为0。
当手头上有一个描述可用时,你就可以使用两者中的任一API来获取一个指向指定音频单元(集)的库的引用。音频单元API如清单1-2所示。
清单1-2使用音频单元API获取一个音频单元实例
AudioComponent foundIoUnitReference = AudioComponentFindNext (
                                          NULL,
                                          &ioUnitDescription
                                      );
AudioUnit ioUnitInstance;
AudioComponentInstanceNew (
    foundIoUnitReference,
    &ioUnitInstance
);
将NULL传给AudioComponentFindNext的第一个参数,告诉该函数去找到第一个( 按系统定义顺序)匹配该描述的系统音频单元。如果你传入的是一个先前找到的音频单元的引用,该函数会定位到下一个匹配该描述的音频单元。这个用法使你可以通过重复调用AudioComponetFindNext来获取所有音频单元的引用。
AudioComponentFindNext调用的第二个参数指向清单1-1中定义的音频单元描述。
AudioComponentFindNext函数的结果是一个指向定义该音频单元的动态链接库的引用。将该引用传给AudioComponentInstanceNew函数来实例该音频单元,如清单1-2所示。
代替地,你可以使用音频处理流程图API来实例一个音频单元,清单1-3显示如何实现。
清单1-3使用音频处理流程图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函数调用的输出,也即是ioUnit参数中,获得一个指向新的音频单元实例的引用。
AUGraphAddNode调用的第二个参数指向清单1-1中定义的音频单元描述。
获得一个音频单元实例后,你可以配置它。为实现这个,你需要学习两个音频单元特征,scope和element。


1.4使用scope和element来确定音频单元的各部分


1.5使用property来配置音频单元


1.6使用parameter和UIKit来给予用户控制权


1.7I/O单元的重要角色


2音频处理流程图管理音频单元

2.1一个音频处理流程图拥有一个I/O单元

2.2音频处理流程图提供线程安全

2.3图中的音频流程使用“拖”动作




3提供回调函数将音频喂给音频单元

3.1理解音频单元提供回调函数



4音频流格式使能数据流

4.1处理AudioStreamBasicDescription结构

4.2理解何处以及如何设置流格式




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值