最好的方法,如何在C#中为语音命令分配事件/方法

时间:2013-06-11 21:31:23

标签: c# visual-studio speech-recognition voice-recognition

在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

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用custom attributesreflection进行此操作。

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

然后,当您的应用程序启动时,您可以遍历所有/某些类及其方法,使用反射检索其属性并创建一个字典,其中键是来自VoiceCommandAttributes的命令名称,值为Delegates MethodInfos

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

祝你好运。

答案 1 :(得分:0)

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

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {       
  string speech = e.Result.Text;       
    switch(speech)   
   {            
  case: "stop":          
 //do what you want           
  break;      
   }    
 }