我想请教您如何将语音命令分配给方法的最佳方法。
我正在使用语法生成器和选择:
//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 。
非常感谢!
答案 0 :(得分:0)
您可以使用custom attributes和reflection进行此操作。
首先,创建自己的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;
}
}