如果你愿意的话,你确实可以使用渲染回调,但是内置的音频单元很棒(还有一些事情在 NDA 等下我还不能在这里说,如果你可以访问的话,我已经说得太多了iOS 5 SDK 我推荐你看看)。
您可以在不使用 的情况下实现您希望的行为AUGraph
,但是建议您这样做,因为它可以处理很多事情并节省您的时间和精力。
使用 AUGraph
来自音频单元托管指南(iOS 开发人员库):
该AUGraph
类型为音频单元故事增加了线程安全性:它使您能够即时重新配置处理链。例如,您可以安全地插入均衡器,甚至在播放音频时为混音器输入交换不同的渲染回调函数。事实上,该AUGraph
类型提供了 iOS 中唯一用于在音频应用程序中执行这种动态重新配置的 API。
选择设计模式(iOS 开发人员库)详细介绍了如何选择如何实现音频单元环境。从设置音频会话、图形和配置/添加单元到编写回调。
至于您想要在图表中使用哪些音频单元,除了您已经说明的内容之外,您还需要一个多通道混合器单元(请参阅使用特定音频单元(iOS 开发人员库))来混合您的两个音频输入,然后挂钩调音台到输出单元。
直接连接
或者,如果您不使用 AUGraph 直接执行此操作,则以下代码是您自己将音频单元连接在一起的示例。(来自构建音频单元应用程序(iOS 开发人员库))
或者,您可以使用音频单元属性机制直接建立和断开音频单元之间的连接。为此,请使用该AudioUnitSetProperty
函数和
kAudioUnitProperty_MakeConnection
属性,如清单 2-6所示。此方法要求您为每个连接定义一个 AudioUnitConnection 结构以用作其属性值。
/*Listing 2-6*/
AudioUnitElement mixerUnitOutputBus = 0;
AudioUnitElement ioUnitOutputElement = 0;
AudioUnitConnection mixerOutToIoUnitIn;
mixerOutToIoUnitIn.sourceAudioUnit = mixerUnitInstance;
mixerOutToIoUnitIn.sourceOutputNumber = mixerUnitOutputBus;
mixerOutToIoUnitIn.destInputNumber = ioUnitOutputElement;
AudioUnitSetProperty (
ioUnitInstance, // connection destination
kAudioUnitProperty_MakeConnection, // property key
kAudioUnitScope_Input, // destination scope
ioUnitOutputElement, // destination element
&mixerOutToIoUnitIn, // connection definition
sizeof (mixerOutToIoUnitIn)
);