C# 听写识别会话获胜';即使处理了短语识别系统,也不能启动

C# 听写识别会话获胜';即使处理了短语识别系统,也不能启动,c#,unity3d,C#,Unity3d,在Unity上,我正在测试关键字识别和听写识别器,在两个按钮上分配以下功能 Unity doc说短语识别系统不会从听写识别系统开始,但在关键字识别器的文章中并没有提到。在本测试中,一切正常,但即使我启动关键字识别器并在下次单击时处理它,在另一个按钮上,单击听写识别器也不会启动,并显示以下错误: Cannot start dictation recognition session while PhraseRecognitionSystem is running. 以下是第一个按钮的OnButto

在Unity上,我正在测试关键字识别和听写识别器,在两个按钮上分配以下功能

Unity doc说短语识别系统不会从听写识别系统开始,但在关键字识别器的文章中并没有提到。在本测试中,一切正常,但即使我启动关键字识别器并在下次单击时处理它,在另一个按钮上,单击听写识别器也不会启动,并显示以下错误:

Cannot start dictation recognition session while PhraseRecognitionSystem is running.
以下是第一个按钮的OnButtonClick方法的代码:

           if(start != true){    
            m_Recognizer.Stop();
            m_Recognizer.Dispose();
            Debug.Log("disposed recognizer.");
            start = true;
            } //start on else...;
以下是启动听写识别器的代码:

        m_DictationRecognizer = new DictationRecognizer();

        m_DictationRecognizer.DictationResult += M_DictationRecognizer_DictationResult;


        m_DictationRecognizer.DictationHypothesis += (text) =>
        {

            Debug.LogFormat("Dictation hypothesis: {0}", text);
            m_Hypotheses.text = text;

        };
        //here happens mentioned exception.
               m_DictationRecognizer.Start();
我需要知道如何正确地处理关键字识别器对象,以及如何正确地启动m_DictionRecognizer,这两者是否可以同时运行


谢谢。

使用两种系统都没有意义。 无论如何,如果您想重新启动DictationRecognizer,请通过在函数中写入第二个代码片段来完全重新初始化它,并在“开始代码”中调用此函数以启动重新初始化

最好的选择是不停地处理听写识别器,并将重新登录的语句处理到正则表达式

if( Regex.IsMatch(DictationResult.text, "mykeyword", RegexOptions.IgnoreCase) )
{
   //do something
}

根据我个人的经验,我知道这个API非常糟糕而且不可靠。系统似乎在某个时间点异步停止,但很少在调用
Stop()
后立即停止。我使用过的一个难看的解决方法是在协同程序中轮询
短语识别系统的状态
,并且
在状态仍在运行时返回null
。只有在那之后,我在尝试启动
口述识别器时才没有出现异常。反之亦然。这很难看,但这是迄今为止我拥有的最好的解决方案。谢谢分享你宝贵的经验。如果有任何代码示例或链接可用于操纵PhraseRecognitionSystem的状态,那就太好了。您认为通过这种方法,我们可以同时运行这两个系统吗?不幸的是,不可能同时运行两个系统。这受到Windows本身的限制,从概念上讲也是有意义的。我将创建一个小要点,并很快将其链接到这里。这将很好。谢谢,试试这样的。这很难看,但对我来说很管用。显然,用你自己的变量之类的东西来代替。