Unity Microphone.Start() 滞后,如何摆脱它?
Posted
技术标签:
【中文标题】Unity Microphone.Start() 滞后,如何摆脱它?【英文标题】:Unity Microphone.Start() lag, how to get rid of it? 【发布时间】:2021-12-29 12:20:38 【问题描述】:使用 unity 2020.3 和 XR 插件(目前只有 oculus,但我希望将迁移到 openxr)并在按下辅助按钮时尝试启动麦克风。它可以工作,但启动麦克风会导致延迟。协程无济于事,我尝试了线程来停止延迟,但随后无法对音频剪辑做任何事情。多年来,这个问题已经被问过几次,但还没有答案。代码如下:
void Update()
foreach(var d in devices)
if (d.TryGetFeatureValue(CommonUsages.secondaryButton, out isPressed))
if (isPressed && !wasTalking)
wasTalking = true;
asource.PlayOneShot(walkietalkie);
//start_recording = new Thread(startRecording);
//start_recording.Start();
startRecording();
else if (wasTalking && !isPressed)
finishRecording();
wasTalking = false;
private void startRecording()
recording = Microphone.Start(null, false, 30, freq);
startRecordingTime = Time.time;
yield return null;
编辑:我已经删除了无用的协程。为什么我的问题是 -1?
【问题讨论】:
仅供参考,您的协程实际上并没有做任何事情..它完全在一帧内执行;)..我也很确定你不能在线程中执行此异步/大多数 Unity API 只能在主线程上调用 我知道 :),只是我尝试过的一长串事情,因为我在 posibilites 中报废了桶底 【参考方案1】:我认为缓解口吃的主要方法是将这项工作转移到另一个线程,这对于 Unity 来说是出了名的困难。
对此的解决方案可能是使用或调整另一种录制音频的方法,例如NAudio。
【讨论】:
我正在努力使这个项目尽可能精简。我正在考虑使用 30 秒循环开始录制。然后获取用户何时按下按钮以及何时松开。 30秒以内应该没问题 @jason 想一想你的问题,卡顿很可能来自大量垃圾收集,所以你认为你可以禁用自动垃圾收集并编写自己的脚本来管理它吗?跨度> hmm,我不认为这是垃圾收集,因为无论游戏运行多长时间,当我启动麦克风时都会导致卡顿。也许问题在于在内存中创建空间,而不是访问它。 我的意思是启动麦克风会导致产生大量垃圾。值得一试。以上是关于Unity Microphone.Start() 滞后,如何摆脱它?的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D资源文件 ③ ( Unity 资源包简介 | 导出 Unity 资源包 | 导出资源包的包含依赖选项 | 导入 Unity 资源包 | Unity 资源商店 )