使用AUGraphs进行麦克风输入

时间:2012-10-18 20:52:52

标签: iphone ios audio microphone audiounit

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

我更愿意使用图表来完成所有这些工作。我不需要麦克风以外的任何信息,如前所述,我希望这是一个简化的解决方案,具有良好的性能和最少的代码。

我正在研究一种解决方案,该解决方案将使用带有remoteIO的“输出”音频类型作为子类型,文档中说这些可用于输入或输出或两者。

我似乎无法使用图表找到任何方法来实现这一点。我以前用AVAudioRecorder实现了它,但我对这种方法不满意。我查看了aurioTouch和aurioTouch2示例,但都没有实现图形方法。 Apple的音频文档声明这是可行的方法。

1 个答案:

答案 0 :(得分:4)

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

要从AUGraph的角度回答你的问题,诀窍是很难将RemoteIO用作AUGraph的输入。从技术上讲,RemoteIO是一个输出单元,它会稍微混淆AUGraph。通常,您将使用环形缓冲区来缓冲来自RemoteIO的麦克风输入的音频,然后将其输入到AUGraph中(即,当AUGraph的头部向您的应用发出渲染回调时)。当然,如果你达到这一点,你根本不需要AUGr​​aph,只需检查环形缓冲阶段的音频电平。

那就是说,让我们说你有样品进入你的AUGraph。你怎么知道他们在某一点上有多大声?您可以使用具有测光功能的AUMultiChannelMixer音频装置。只需在输入范围上启用kAudioUnitProperty_MeteringMode属性,然后只需检查kMultiChannelMixerParam_PreAveragePower参数,即可查看此时通过调音台的音频音量(值将从-120浮动到0表示 - 120dB至0dB)。