Unity打包IOS相关设置和麦克风延迟问题的解决办法

本文详细介绍了在Unity中遇到的iOS麦克风相关问题及解决方法,包括调用`Microphone.Start()`导致的卡顿、音频输出问题、程序闪退以及获取音频数据报错等。解决方案包括在游戏启动时初始化麦克风、设置`ForceIOSSpeakersWhenRecording`选项、检查Xcode的Info.plist权限设置以及修正音频数据读取错误。同时提供了Unity官方文档链接和社区资源作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引子

最近的项目用到了麦克风做音量检测,类似的问题也可能出现在制作游戏内语音系统的时候,凡是调用Unity自带的Microphone类都会有类似的问题。有需要的朋友们可以看一下。

问题一:调用Microphone.Start()方法的时候主线程明显卡顿

是的恭喜你,麦克风的确会卡,解决办法是建议你在游戏开始的时候就调用麦克风,或者在PlayerSettingOtherSettingsConfiguration里面找到这些选项,并勾选Prepare Ios For Recording选项。
好消息是如此操作之后调用麦克风的确不会卡了,坏消息是会导致音频只从上方听筒里发出来。
显然这不是我们希望的结果。
所以我们查看下一步。
截图

问题二:IOS使用麦克风时声音不会从扬声器里发出来

接上面的问题,还是这张图。
截图
网络上流传很久的UnitySpeakerFix工程或许是有用的(我没测,不妨有需要的朋友们亲测一下)(https://github.com/10people/UnitySpeakerFix
但是Unity的确为我们提供了录音时强制扬声器输出的选项。
相信大家已经看到了:Force IOS Speakers when Recording
勾选他!
就好了。
(但是理论上这样会导致录音时插耳机声音也会从扬声器传出来,我还没试,试完后更)

问题三:IOS使用麦克风或者相机的程序打包到Xcode运行时会闪退。

在确保自己代码没问题的情况下这种状况多半是Xcode工程的Plist没有正确设置。(虽说我们引用相应的名命空间Unity就会在导出Xcode工程的时候自动帮我们补齐Plist,但是前提是需要正确设置)
还是同样的一张图。
截图
前三个Description分别是相机,定位和麦克风权限,后面填写该权限用于干什么就好了。

问题四:正确设置麦克风之后记录得到的数据使用audio.clip.GetData()方法时报错Error executing result = instance->m_Sound->lock(offsetBytes, lengthBytes, &ptr1, &ptr2, &len1, &len2) (An invalid parameter was passed to this function. )

Error executing result = instance->m_Sound->lock(offsetBytes, lengthBytes, &ptr1, &ptr2, &len1, &len2) (An invalid parameter was passed to this function. )

该问题反馈传递给了该方法一个无效的参数。
该方法是因为在调取音频数据时Clip会自动混合两声道,Unity文档写明可以通过使用clip.channels * clip.samples的方式计算样本数。
具体可参见(https://answers.unity.com/questions/1188892/error-executing-result-instance-m-sound-lockoffset.html?sort=votes

原文链接

原文链接:https://blog.csdn.net/weixin_40715387/article/details/90210757

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值