使用 AUGraphs 进行麦克风输入

Posted

技术标签:

【中文标题】使用 AUGraphs 进行麦克风输入【英文标题】:Using AUGraphs for Mic input 【发布时间】:2012-10-18 20:52:51 【问题描述】:

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

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

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

我似乎找不到任何仅使用图表来完成此任务的方法。我以前用 AVAudioRecorder 实现过它,但我对这种方法不满意。我查看了 aurioTouch 和 aurioTouch2 示例,但都没有实现图形方法。 Apple 的音频文档指出这是要走的路。

【问题讨论】:

【参考方案1】:

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

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

也就是说,假设您的 AUGraph 中有样本。您如何判断它们在给定点的声音有多大?您可以使用具有计量功能的 AUMultiChannelMixer 音频单元。只需在输入范围上启用kAudioUnitProperty_MeteringMode 属性,然后只需检查kMultiChannelMixerParam_PreAveragePower 参数即可查看在该点通过混音器的音频音量(值将从-120 浮动到0,表示-120dB 到0dB) .

【讨论】:

以上是关于使用 AUGraphs 进行麦克风输入的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 进行麦克风输入

如何使用 iphone 麦克风输入进行开关以计算车轮转数?

如何实时收听麦克风输入并进行分析?

来自 20 多个麦克风的输入

接收麦克风输入和处理

Android:强制外部麦克风(插孔输入 3.5mm)保持打开状态