Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS音频单元:何时需要使用AUGraph?_Ios_Core Audio_Ipod_Audiounit - Fatal编程技术网

iOS音频单元:何时需要使用AUGraph?

iOS音频单元:何时需要使用AUGraph?,ios,core-audio,ipod,audiounit,Ios,Core Audio,Ipod,Audiounit,我对iOS编程一无所知,我更喜欢安卓系统。。并且必须构建一个处理音频DSP的应用程序。我知道这不是接近iOS开发的最简单的方法 应用程序需要能够接受来自以下两方面的输入: 1-内置麦克风 2-iPod库 然后,可将滤波器应用于输入声音,并将结果输出至: 1名发言者 2-记录到文件中 我的问题是:例如,为了能够对输入应用多个过滤器,是否需要一个螺旋图,或者可以通过使用不同的渲染回调处理样本来应用这些不同的效果 如果我使用AUGraph,我是否需要:每个输入1个音频单元,输出1个音频单元,每个效果/

我对iOS编程一无所知,我更喜欢安卓系统。。并且必须构建一个处理音频DSP的应用程序。我知道这不是接近iOS开发的最简单的方法

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

1-内置麦克风 2-iPod库

然后,可将滤波器应用于输入声音,并将结果输出至:

1名发言者 2-记录到文件中

我的问题是:例如,为了能够对输入应用多个过滤器,是否需要一个螺旋图,或者可以通过使用不同的渲染回调处理样本来应用这些不同的效果

如果我使用AUGraph,我是否需要:每个输入1个音频单元,输出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)
);