为什么UWP连续语音识别停止

问题描述 投票:1回答:1

我有一个Windows 10 UWP应用程序,我正在为文本框启用语音识别。是的,我知道我也可以利用Cortana。然而,Cortana也有一些缺点,主要是你在应用程序中几乎无法控制Cortana。

这就是SpeechRecognizer命名空间的连续识别的用武之地。我喜欢我拥有的控制量。然而,似乎在几秒钟后随机停止收听。

以下是我实施的方法。请注意,我还尝试将每个可能的超时设置为0,这意味着没有超时。

页面属性:

private SpeechRecognizer speechRecognizer;
private CoreDispatcher dispatcher;

OnLoaded的页面:

speechRecognizer = new SpeechRecognizer();
speechRecognizer.Timeouts.BabbleTimeout = TimeSpan.FromSeconds(0);
speechRecognizer.Timeouts.InitialSilenceTimeout = TimeSpan.FromSeconds(0);
speechRecognizer.Timeouts.EndSilenceTimeout = TimeSpan.FromSeconds(0);
speechRecognizer.ContinuousRecognitionSession.AutoStopSilenceTimeout = TimeSpan.FromSeconds(0);

SpeechRecognitionCompilationResult result = await speechRecognizer.CompileConstraintsAsync();
speechRecognizer.ContinuousRecognitionSession.ResultGenerated += ContinuousRecognitionSession_ResultGenerated;
speechRecognizer.StateChanged += SpeechRecognizer_StateChanged;

然后,当我单击按钮开始收听时,我这样做开始:

if (speechRecognizer.State == SpeechRecognizerState.Idle)
{
     await speechRecognizer.ContinuousRecognitionSession.StartAsync();
}

最后,我听一下上面的两个事件处理程序,用于ResultGenerated和StateChanged。我在这两个事件中设置了断点。当页面加载时,一切都被实例化得很好。当我单击按钮开始收听时,它确实启动也很好,我看到StateChanged事件处理程序触发以显示它正在侦听。但是,如果我让应用程序闲置(没有说话)几秒钟(并且秒数似乎是随机的,可以是2-5秒之间的任何时间),则StateChanged事件将触发并再次表示它处于空闲状态。在那之后,当我尝试说话时,我无法触发ResultGenerated事件,这进一步显示它不再是在监听。

我可以点击按钮再次开始收听,但是会有相同的随机停止。

此外,如果我立即说话,在我点击按钮后,语音识别确实可以正常工作。

我想要发生的是当你点击按钮时,我希望它无限期地收听,直到我调用StopAsync并告诉它停止。有人知道为什么它会自行停止???

更新 - 我添加了完成的事件处理程序:

speechRecognizer.ContinuousRecognitionSession.Completed += ContinuousRecognitionSession_Completed;

因为这会给我一个args.Status的状态,我在那里放了一个断点。有趣的是,当连续识别停止时,此断点将在2-5秒内命中,并且即使我没有说任何内容且ResultGenerated事件从未触发过结果,它也会显示“SUCCESS”状态。那么,如何取得成功却没有结果呢?为什么这会导致它停止?

谢谢!

c# .net uwp windows-10-universal voice-recognition
1个回答
0
投票

所以我遇到了同样的问题,并遇到了这个问题。我想我最终想通了。问题是,当UWP应用程序离开前台(如切换到另一个应用程序)时,语音识别器将停止(没有任何事件)。

当调试时,当然会在设置断点时发生。我认为问题是通过重新启动SpeechRecognizer再次进入前台来解决的。

© www.soinside.com 2019 - 2024. All rights reserved.