ios - 如何在 iPhone 内置麦克风上禁用 AEC、AGC 和 HPF
问题描述
目前正在开发一个基于 Android 和 iOS 的移动声音分析项目。该项目正在 Unity 中开发。Android 版本可以正常运行,但在 iOS 上,它只能在较旧的设备(iphone 5、iphone 6)上运行。从 iPhone 8 开始,Apple 在麦克风输入端添加了回声消除 (AEC)、自动增益控制 (AGC) 和高通滤波器 (HPF)。我们的应用程序分析麦克风输入并计算输入的分贝 (db) 以及我们用于迷你游戏的值。Apple 的 3 个功能的问题在于,它会在某个分贝阈值之后切断输入,并且它只是没有记录更高的分贝或音高。
我想在 iPhone 版本上禁用这些功能或以某种方式绕过它们,但到目前为止我还没有找到任何可行的解决方案。我想到的:
- 将项目从 Unity 构建到 Xcode。
- 将一些 swift 代码放入 Xcode 中构建的项目中,这将在应用程序启动时禁用这些麦克风功能(如果可能?)。
我发现了这个问题 -链接- 答案似乎很好,但我无法实现它,因为我没有使用任何本机 Xcode 音频引擎(如 AVAudioRecorder、AVFAudio 等),而是使用 Unity 的音频解决方案.
所以我的问题是:是否可以在 Unity 项目中使用 Swift 禁用上述 iPhone 麦克风功能,而不使用任何 Xcode/Swift 音频引擎?
我想注意,如果我们使用外部麦克风,该应用程序适用于所有新的 iPhone 设备。
解决方案
所以我的问题是:是否可以在 Unity 项目中使用 Swift 禁用上述 iPhone 麦克风功能,而不使用任何 Xcode/Swift 音频引擎?
是的,这是可能的。你应该写iOS 原生插件。
在您的 C# 类中创建外部方法:
[DllImport ("__Internal")]
private static extern void AudioUnitSetProperty();
然后在您的 .mm 课程中:
extern "C" void AudioUnitSetProperty()
{
/* your code here */
}
推荐阅读
- css - Laravel DataTables 基于值的颜色单元格?
- angular - 面临在 Json 值中为名称查找 id 的问题
- python - 当 slice 有一行结果时返回 pandas.DataFrame
- elasticsearch - Elasticsearch 中的映射爆炸
- javascript - Javascript 在移动设备上冻结身体(不允许任何滚动等)
- android - 有什么办法可以实现 Flutter 顶级小吃吧?
- apache - Apache 代理访问配置
- angular - 如何将图标添加到 mat-table 中的 mat-sort-header
- web-services - 关闭应用程序时,Android 服务无法连接到 Web 服务
- hyperledger-fabric - 在 Hyperledger Fabric 中,如果无法使用 peer channel fetch 命令,如何加入频道?