0

在 Visual Studio 中,我正在创建使用语音识别进行应用程序控制的应用程序。

我想向您寻求有关如何将语音命令分配给方法的最佳方法的帮助。

我正在使用语法生成器和选择:

//Create Grammar Builder with Choices
 GrammarBuilder slovnik = new GrammarBuilder();
 slovnik.Append(new Choices("stop", "go"));

如果我想将选项中的一个词分配给(语音命令)到方法(例如 - 显示消息框) - 在事件处理程序中我使用 if 命令:

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            if (e.Result.Text == "stop")
            {
                MessageBox.Show("Some message, that the voice command works");
            }
        }

我的问题是 - If 子句是如何将单词/短语从语法连接到方法/事件的最佳方式,还是有更好(更清洁)的解决方案如何做到这一点?我正在使用C#System.Speech.Recognition.SpeechRecognitionEngine

非常感谢!

4

2 回答 2

0

您可以为此使用自定义属性反射

首先,创建您自己的VoiceCommandAttribute派生Attribute类。它应该有一个构造函数,该构造函数将命令名称存储在string字段中。命令名称应该可以通过属性访问。

然后,当您的应用程序启动时,您可以遍历所有/某些类及其方法,使用反射检索它们的属性并制作一个字典,其中键是命令名称VoiceCommandAttributes,值是DelegatesMethodInfos.

最后,在SpeechRecognized事件处理程序中,您可以在字典中查找单词/短语并调用委托。

祝你好运。

于 2013-06-12T00:01:11.810 回答
0

我认为使用案例也可以解决问题。

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {       
  string speech = e.Result.Text;       
    switch(speech)   
   {            
  case: "stop":          
 //do what you want           
  break;      
   }    
 }
于 2015-10-16T09:05:35.673 回答