如何在 iPhone 内置麦克风上禁用 AEC、AGC 和 HPF

Posted

技术标签:

【中文标题】如何在 iPhone 内置麦克风上禁用 AEC、AGC 和 HPF【英文标题】:How to disable AEC, AGC and HPF on Iphone built in microphones 【发布时间】:2021-07-01 11:13:57 【问题描述】:

目前正在开发一个基于 androidios 的移动声音分析项目。该项目正在 Unity 中开发。 Android 版本可以正常运行,但在 iOS 上,它只能在较旧的设备(iphone 5、iphone 6)上运行。从 iPhone 8 开始,苹果增加了 麦克风输入上的回声消除 (AEC)、自动增益控制 (AGC) 和高通滤波器 (HPF)。我们的应用程序分析麦克风输入并计算输入的分贝 (db) 以及我们用于迷你游戏的值。 Apple 的 3 项功能的问题在于,它会在达到某个分贝阈值后切断输入,而且它只是没有记录更高的分贝或音高。

我想在 iPhone 版本上禁用这些功能或以某种方式绕过它们,但到目前为止我还没有找到任何可行的解决方案。我想到了什么:

    将项目从 Unity 构建到 Xcode。 将一些 swift 代码放入 Xcode 中构建的项目中,这将在应用程序启动时禁用这些麦克风功能(如果可能的话?)。

我发现了这个问题 - link - 答案似乎很好,但我无法实现它,因为我没有使用任何本机 Xcode 音频引擎(如 AVAudioRecorder、AVFAudio 等),而是我' m 使用 Unity 的音频解决方案。

所以我的问题是:是否可以在 Unity 项目中使用 Swift 禁用上述 iPhone 麦克风功能,而不使用任何 Xcode/Swift 音频引擎?

我想指出,如果我们使用外部麦克风,该应用程序适用于所有新 iPhone 设备。

【问题讨论】:

***.com/questions/58472683/… @Shadowrun 我已经遇到过,但这不是 Unity 构建项目的解决方案(阅读我的完整问题,我什至引用了该链接)。 【参考方案1】:

所以我的问题是:是否可以禁用上述 在 Unity 项目中使用 Swift 的 iPhone 麦克风功能,无需使用 任何 Xcode/Swift 音频引擎?

是的,这是可能的。你应该写iOS native plug-in。

在你的 C# 类中创建外部方法:

[DllImport ("__Internal")] 
    
private static extern void AudioUnitSetProperty();

然后在你的 .mm 类中:

extern "C" void AudioUnitSetProperty()

  /* your code here */

【讨论】:

感谢哈米德的提示!但是您并没有真正回答主要问题,如何禁用这些麦克风功能?我应该在这些函数中使用哪些代码来实现这一点?

以上是关于如何在 iPhone 内置麦克风上禁用 AEC、AGC 和 HPF的主要内容,如果未能解决你的问题,请参考以下文章

iPhone/iPad上的双通道录音:耳机+内置麦克风

搭建AEC效果评测系统:系统方案设计

禁用iPhone 4S /新iPad键盘上的听写按钮

如何在 iPhone 应用程序中录制和播放声音?

在 iOS 中通过蓝牙播放时从内置麦克风录制

频率分析 - Novocaine 和麦克风播放:如何禁用扬声器输出?