首页 > 解决方案 > 如何在 iPhone 内置麦克风上禁用 AEC、AGC 和 HPF

问题描述

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

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

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

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

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

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

标签: iosswiftiphonexcodeunity3d

解决方案


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

是的,这是可能的。你应该写iOS 原生插件

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

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

然后在您的 .mm 课程中:

extern "C" void AudioUnitSetProperty()
{
  /* your code here */
}

推荐阅读