问题
- 我想在我的游戏中使用设备的麦克风
- 不能实时回放麦克风输入的声音,有延迟存在
原因
您不能实时回放麦克风采集的声音,您可能遇到了以下问题:
- 回放时能听到一些不容易察觉的杂音
- 采集到的声音有无限循环的反馈噪声
- 回放时听到的声音有很大的延迟
解决方案
为确保实时播放麦克风采集的声音:
首先,您需要将麦克风设置为AudioClip并附加到音源Audio Source上,同时在Audio Source上设置音频模式为循环:勾选Inspector中Audio Source组件的loop tick单选框。此时您就可以从Audio Source获得音频数据了,而不是从Audio Listener。
其次,您需要为Audio Source附加另外的脚本,用于告知Unity这个麦克风将要开始记录AudioClip,为此您需要调用Microphone.Start()函数。
如需控制延迟,您需要调用Microphone.GetPosition()函数,然后设置需要的延迟采样率。如要无延迟播放,可将其设为0,在播放音频之前就开始采样。参考下面的脚本:
注意,移动平台和Web平台需要申请麦克风权限,如果您在脚本中引用了 UnityEngine.Microphone,则Unity会自动为其添加该权限。
但Android平台对此要求并不是特别严格,因为这会在Android TV平台上产生兼容问题。
更多信息
更多关于Microphone.Start()的信息,请参考该文档
更多关于Microphone.GetPosition()的信息,请参考该文档