2012-10-18 64 views
4

我正在尝试创建一个简化的音频应用程序,它从iPhone输入麦克风的音量并使用它来设置从另一个音频单元源播放的声音的音量。使用AUGraphs进行麦克风输入

我宁愿使用图形来做所有这些。除了音量级别之外,我不需要麦克风提供的任何信息,如前所述,我希望这是一个简化的解决方案,具有良好的性能和最少的代码。

我在调查一种解决方案,该解决方案将remoteIO作为子类型使用“输出”音频类型,文档中说该类型可用于输入或输出或两者。

我似乎无法找到任何方式来使用图表来完成此操作。我以前用AVAudioRecorder来实现它,但是我对这种方法并不满意。我已经看过aurioTouch和aurioTouch2的例子,但都没有实现图表方法。苹果的音频文件指出,这是一条路。

回答

4

Novocaine可能是您最简单的解决方案,因为它可以立即为您提供来自麦克风的数据。你可能会想要把它给你的缓冲区并计算它的RMS。这会给你一个粗略的“现在麦克风音量有多大”的答案。

要从AUGraph的角度回答您的问题,诀窍是很难将RemoteIO用作AUGraph的输入。从技术上讲,RemoteIO是一个输出单位,它在一定程度上混淆了AUGraph。通常情况下,您将使用环形缓冲区来缓存来自RemoteIO麦克风输入的音频,然后在AUGraph稍后将其提供给AUGraph(即,当AUGraph的负责人向您的应用程序发出渲染回调时)。当然,如果你到了这一点,你根本不需要一个AUGraph,只需检查什么是环形缓冲阶段的音频电平即可。

这就是说,假设你有样品进入你的AUGraph。你怎么知道他们在某个特定点上有多大声?您可以使用具有测光功能的AUMultiChannelMixer音频单元。只需在输入范围上启用kAudioUnitProperty_MeteringMode属性,然后只需检查kMultiChannelMixerParam_PreAveragePower param即可查看在该点通过调音台的音频音量(值将从-120浮动到0,代表-120dB到0dB)。