Unity打包Ios相关权限和麦克风延迟问题的一种解决办法

Unity打包Ios相关权限和麦克风延迟问题

  • Hello 大家好我又来填坑了
    • 问题一:调用 Microphone.Start()方法的时候主线程明显卡顿
    • 问题二:IOS使用麦克风时声音不会从扬声器里发出来
    • 问题三:IOS使用麦克风或者相机的程序打包到Xcode运行时会闪退。
    • 问题四:正确设置麦克风之后记录得到的数据使用audio.clip.GetData()方法时报错Error executing result = instance->m_Sound->lock(offsetBytes, lengthBytes, &ptr1, &ptr2, &len1, &len2) (An invalid parameter was passed to this function. )

Hello 大家好我又来填坑了

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

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

是的恭喜你,麦克风的确会卡,解决办法是建议你在游戏开始的时候就调用麦克风,或者在PlayerSetting的OtherSettings的Configuration里面找到这些选项,并勾选Prepare Ios For Recording选项。
好消息是如此操作之后调用麦克风的确不会卡了,坏消息是会导致音频只从上方听筒里发出来。
显然这不是我们希望的结果。
所以我们查看下一步。
Unity打包Ios相关权限和麦克风延迟问题的一种解决办法_第1张图片

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

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

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

在确保自己代码没问题的情况下这种状况多半是Xcode工程的Plist没有正确设置。(虽说我们引用相应的名命空间Unity就会在导出Xcode工程的时候自动帮我们补齐Plist,但是前提是需要正确设置)
还是同样的一张图。
Unity打包Ios相关权限和麦克风延迟问题的一种解决办法_第3张图片
前三个 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. )

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

你可能感兴趣的:(Unity)