iOS音频单元:何时使用AUGraph是必要的?

Aca*_*ins 9 ipod core-audio audiounit ios

我对iOS编程完全不熟悉(我更像是一个Android人......)并且必须构建一个处理音频DSP的应用程序.(我知道这不是接近iOS开发的最简单方法;))

该应用程序需要能够接受以下输入:

1-内置麦克风2- iPod库

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

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

我的问题如下:为了能够将多个过滤器应用于输入,或者通过处理具有不同渲染回调的样本可以应用这些不同的效果,是否必须使用AUGraph?

如果我使用AUGraph,我需要:每个输入1个音频单元,输出1个音频单元和每个效果/滤波器1个音频输入吗?

最后,如果我不这样做,我可能只有1个音频单元并重新配置它以选择源/目的地?

非常感谢您的回答!我迷失了这些东西......

DJ *_*che 14

如果你愿意的话,你可能确实使用渲染回调,但是内置的音频单元很棒(而且有些东西在NDA等我还不能说,我已经说了太多,如果你有权访问iOS 5 SDK我推荐你看看).

您可以在不使用的情况下实现您希望的行为AUGraph,但建议您这样做,因为它可以处理很多事情,节省您的时间和精力.

使用AUGraph

音频单元托管指南(iOS开发人员库):

AUGraph类型为音频单元故事增加了线程安全性:它使您能够动态地重新配置处理链.例如,您可以安全地插入均衡器,甚至可以在播放音频时交换混音器输入的不同渲染回调函数.事实上,该AUGraph类型提供了iOS中唯一的API,用于在音频应用中执行此类动态重新配置.

选择设计模式(iOS开发人员库)会详细介绍如何选择如何实现音频单元环境.从设置音频会话,图形和配置/添加单元,编写回调.

至于你想要在图表中使用哪些音频单元,除了你已经说过的,你还需要一个MultiChannel调音台单元(参见使用特定的音频单元(iOS Developer Library))混合你的两个音频输入然后挂钩将调音台调到输出单元.

直接连接

或者,如果您在不使用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)
);
Run Code Online (Sandbox Code Playgroud)