使用 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 进行麦克风输入的主要内容,如果未能解决你的问题,请参考以下文章