【发布时间】:2018-05-04 21:19:04
【问题描述】:
启动麦克风会使整个应用程序完全冻结 5 秒(始终为 5 秒)。统一 5.6.0f3
代码:
public void StartRecording()
{
System.Diagnostics.Stopwatch sw1 = new System.Diagnostics.Stopwatch();
sw1.Start();
if (!Microphone.IsRecording(null))
{
m_ForcedStopRecording = false;
m_RecordingStartTime = Time.time;
Debug.Log("ms before start microphone 2: " + sw1.ElapsedMilliseconds);
m_RecordedAudio = Microphone.Start(null, false, m_MaxRecordingLengthInSeconds, m_RecordingFrequency);
Debug.Log("ms after start microphone: " + sw1.ElapsedMilliseconds);
StartCoroutine(WaitForRecordingTimeout());
}
Debug.Log("total StartRecording: " + sw1.ElapsedMilliseconds);
}
启动麦克风 2 前的毫秒数结果为 0 启动麦克风后的毫秒数为 5011 有什么建议吗?
【问题讨论】:
-
m_MaxRecordingLengthInSeconds有什么价值?Microphone.Start是阻塞呼叫(我敢打赌)吗?如果是这样,那么该调用只是阻塞了您的主线程。 -
临时冻结是一个错误。提交错误报告。看起来他们没有在另一个线程上进行调用。这应该是一个带有麦克风启动时回调函数的异步函数。
-
@Programmer 即使是因为不异步而导致的错误,为什么总是需要 5 秒才能启动?但并非总是如此,因为如果我重新启动计算机需要 2 毫秒,然后突然没有任何模式,它开始需要 5 秒来启动麦克风,这听起来很奇怪
-
该功能是枚举您计算机上的麦克风然后启动它。它应该在另一个线程中完成。这不是你的错。这是 API 的问题。您必须提交错误报告然后等待修复,或者您可以为最常用的平台(Windows、iOS、Android)构建原生麦克风插件。
标签: c# unity3d audio audio-recording microphone