iOS音频单元:何时需要使用AUGraph?
我对iOS编程一无所知,我更喜欢安卓系统。。并且必须构建一个处理音频DSP的应用程序。我知道这不是接近iOS开发的最简单的方法 应用程序需要能够接受来自以下两方面的输入: 1-内置麦克风 2-iPod库 然后,可将滤波器应用于输入声音,并将结果输出至: 1名发言者 2-记录到文件中 我的问题是:例如,为了能够对输入应用多个过滤器,是否需要一个螺旋图,或者可以通过使用不同的渲染回调处理样本来应用这些不同的效果 如果我使用AUGraph,我是否需要:每个输入1个音频单元,输出1个音频单元,每个效果/过滤器1个音频输入 最后,如果我没有,我可以只拥有一个音频单元并重新配置它以选择源/目标吗iOS音频单元:何时需要使用AUGraph?,ios,core-audio,ipod,audiounit,Ios,Core Audio,Ipod,Audiounit,我对iOS编程一无所知,我更喜欢安卓系统。。并且必须构建一个处理音频DSP的应用程序。我知道这不是接近iOS开发的最简单的方法 应用程序需要能够接受来自以下两方面的输入: 1-内置麦克风 2-iPod库 然后,可将滤波器应用于输入声音,并将结果输出至: 1名发言者 2-记录到文件中 我的问题是:例如,为了能够对输入应用多个过滤器,是否需要一个螺旋图,或者可以通过使用不同的渲染回调处理样本来应用这些不同的效果 如果我使用AUGraph,我是否需要:每个输入1个音频单元,输出1个音频单元,每个效果/
非常感谢你的回答!我对这些东西迷惑不解…如果你愿意,你确实可以使用渲染回调,但内置音频单元很棒,在NDA等项下,有些事情我还不能在这里说,我说得太多了,如果你可以访问iOS 5 SDK,我建议你看看 您可以在不使用AUGraph的情况下实现您希望的行为,但是建议您这样做,因为它可以在引擎盖下处理很多事情,并节省您的时间和精力 使用螺旋描记器 从: AUGraph类型为音频单元故事增加了线程安全性:它使您能够动态地重新配置处理链。例如,在播放音频时,您可以安全地插入均衡器,甚至可以为混音器输入交换不同的渲染回调函数。事实上,AUGraph类型提供了iOS中唯一一个用于在音频应用程序中执行这种动态重新配置的API 详细介绍如何选择如何实现音频单元环境。从设置音频会话、图形和配置/添加单元、编写回调 至于您希望在图表中显示哪些音频单元,除了您已经说明的之外,您还需要一个多声道混音器单元来混合两个音频输入,然后将混音器连接到输出单元 直接连接 或者,如果您不使用AUGraph直接执行此操作,下面的代码是一个示例,您可以自己将音频单元连接在一起。从 或者,您可以在音频设备之间建立和断开连接 通过使用音频单元属性机制直接创建单元。为此,, 将AudioUnitSetProperty函数与 kAudioUnitProperty_MakeConnection属性,如清单2-6所示。 这种方法要求您定义AudioUnitConnection 将每个连接的结构用作其属性值
你好,谢谢你的回答!我已经读过你提到的东西了。我开始的项目将作为一个框架,其他学生只需添加新的dsp效果/滤波器,这就是为什么除了remoteIO之外的内置音频单元不是很有用的原因。我采取了稍微不同的方法。我只有一个remoteIO音频单元和一个渲染回调。图2.3选择了一种设计模式,在这种模式中,我调用AudioUnitRender将麦克风渲染到ioData缓冲区。在渲染回调结束时,我可以使用ExtAudioFileWriteAsync将输出记录到文件中。处理可以在两者之间进行。如果目的是作为编写音频效果的框架,那么您的方法可能就足够了,也更适合。渲染回调适用于此。您还提到了关于从iPod库中获取输入的问题,当处理多个输入时,您可能需要考虑使用AuGrice来进行至少一个混合器。应用程序现在工作得相当好,而我目前不使用混合器,因为用户每次只能有一个活动源。我将与我的主管讨论将这两个来源混合在一起的可能性,如果有必要,我将使用图表和混合器。谢谢你的建议!
/*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)
);