【发布时间】:2018-09-16 08:30:53
【问题描述】:
我想补充一点,只要它识别出“搜索 X”,它就会搜索“X”,但我不知道如何将其添加到语法中,或者如何做这样的事情用我的 switch 语句。
private void Form1_Load(object sender, EventArgs e)
{
Choices commands = new Choices();
commands.Add(new string[] { "hello", "start chrome", "search" });
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
gBuilder.Culture = new System.Globalization.CultureInfo("en-GB");
Grammar grammar = new Grammar(gBuilder);
recEngine.LoadGrammarAsync(grammar);
recEngine.SetInputToDefaultAudioDevice();
recEngine.SpeechRecognized += RecEngine_SpeechRecognized;
}
private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
switch (e.Result.Text)
{
case "hello":
synthesizer.SpeakAsync("Hello! How are you doing today?");
break;
case "start chrome":
Process.Start("http://www.google.com");
break;
case "search":
SearchChrome("search");
break;
}
}
static void SearchChrome(string searchterm)
{
Process.Start("https://www.google.com/search?q=" + searchterm);
}
所以我想在我的语法“Search X”和我的案例中添加“Search X”,它会搜索 X 是什么。
提前致谢!
【问题讨论】:
-
最快的解决方案是延迟说出
X,并等待用户说出X,然后将其与Search连接。用户说Search;他会等一下然后说X。您已经激活了Search命令,然后您将搜索X。或者您可以删除开关并使用IF语句来检查输入是否以搜索开头。如果是这样,您可以拆分字符串以获取搜索短语。 -
由于很难知道最好等待多长时间,而且您选择的任何值都可能容易出错,为什么不两个为每种情况使用两个不同的关键字?
标签: c# switch-statement speech-recognition wildcard