9

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

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

1- 内置麦克风 2- iPod 库

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

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

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

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

最后,如果我没有,我可以只有 1 个音频单元并重新配置它以选择源/目标吗?

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

4

1 回答 1

16

如果你愿意的话,你确实可以使用渲染回调,但是内置的音频单元很棒(还有一些事情在 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)
);
于 2011-07-22T06:23:41.107 回答