iOSaudio单元:何时使用AUGraph的必要?

我对iOS编程(我更像一个Android家伙)是全新的,并且必须构build一个处理audioDSP的应用程序。 (我知道这不是靠近iOS开发的最简单的方法;))

该应用程序需要能够接受来自以下两方面的input:

1-内置麦克风2- iPod库

然后可以将滤波器应用于input声音,并将结果输出到:

1-扬声器2-录制到文件

我的问题是以下内容:为了能够将多个filter应用于input,或者可以通过使用不同的呈现callback处理样本来应用这些不同的效果,是否需要AUGr​​aph?

如果我使用AUGraph,是否需要:每个input1个audio单元,输出1个audio单元,每个效果/滤波器1个audioinput?

最后,如果我不能,我只有1个audio单元,并重新configuration它,以select来源/目的地?

非常感谢您的答复! 我迷失在这个东西里

你可能确实使用渲染callback,如果你愿意,但内置的audio单元是伟大的(有些事情,我不能说在这里,但在NDA等,我已经说了太多,如果你有权访问iOS 5 SDK我推荐你看看)。

你可以在不使用AUGraph情况下实现你所希望的行为,但是build议你这样做,因为它能够保护你很多东西,节省你的时间和精力。

使用AUGraph

从audio单元主机指南(iOS开发者库) :

AUGraphtypes为audio单元故事添加了线程安全性:它使您可以即时重新configuration处理链。 例如,您可以安全地插入均衡器,甚至可以在audio播放时交换混音器input的不同渲染callback函数。 事实上, AUGraphtypes提供了iOS中唯一可以在audio应用程序中执行这种dynamic重新configuration的API。

select一个devise模式(iOS Developer Library)将详细介绍如何select如何实现audio单元环境。 从设置audio会话,graphics和configuration/添加单位,写callback。

至于你想在图表中看到哪些audio单元,除了你已经说过的内容之外,你还需要有一个MultiChannel混音器单元 (请参阅使用特定的audio单元(iOS开发库) )来混合你的两个audioinput,将调音台调到输出单元。

直接连接

或者,如果您不使用AUGraph而直接执行此操作,则以下代码是您自己将Audio单元连接在一起的示例。 (从构buildaudio单元应用程序(iOS开发者库) )

您也可以通过使用audio单元属性机制来直接build立和断开audio单元之间的连接。 为此,请使用kAudioUnitProperty_MakeConnection函数和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) );