使用语音命令启用和禁用语音识别
有2个部分给我的问题。使用语音命令启用和禁用语音识别
有没有办法使用语音命令启用语音识别。
是否有一种方法可以禁用语音识别功能,同时还可以让其保持监听或启用命令以告诉它何时再次启用语音识别功能。
这是我的想法是:
case "Stop Listening":
synthesizer.speakasync("Ok");
recEngine.RecognizeAsyncStop();
//Command or code here that wait's for the command "Start Listening"
recEngine.RecognizeAsyncStop "until" case "Start Listening"
break;
我知道这是行不通的,因为没有“直到”命令,这样我怎么能去这样做?
我处理这个的方式是让它始终倾听;我认为这可能是'大家伙'也是这样做的,按照定义,如果您想使用语音命令开始收听,那么已经已经必须正在收听。
在我的情况下,我想要一个程序总是在运行,所以我在构造函数中设置它。这听起来像是你在做什么:它有助于在这里有一个明确的名称添加到短语(想想说“嘿Cortana”或“确定谷歌”,它可以帮助它知道你正在尝试用它)。假设你希望你的开头词是“嘿拉里,开始听我说”。你会有第二个SpeechRecognitionEngine
这个总是在那里,但如果你使用主引擎关闭,当你想让你的主引擎停止时再打开。
public partial class Form1 : Form
{
private Choices onOff = new Choices();
private Choices recChoices = new Choices();
private SpeechRecognitionEngine alwaysOnListener = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));
private SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));
public Form1()
{
InitializeComponent();
onOff.Add(new string[] {"Hey Larry start listening to me"});
GrammarBuilder gb = new GrammarBuilder();
gb.Append(onOff);
Grammar g = new Grammar(gb);
alwaysOnListener.LoadGrammar(g);
alwaysOnListener.SpeechRecognized += alwaysOnListener_SpeechRecognized;
recChoices.Add(new string[] {"Stop Listening"});
GrammarBuilder gb2 = new GrammarBuilder();
gb2.Append(recChoices);
Grammar recGrammar = new Grammar(gb2);
recEngine.LoadGrammar(recGrammar);
recEngine.SpeechRecognized += recEngine_SpeechRecognized;
}
void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text.Equals("Stop Listening"))
{
recEngine.RecognizeAsyncStop();
alwaysOnListener.RecognizeAsync(RecognizeMode.Multiple);
}
}
void alwaysOnListener_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text.Equals("Hey Larry start listening to me"))
{
recEngine.RecognizeAsync(RecognizeMode.Multiple);
alwaysOnListener.RecognizeAsyncStop();
}
}
private void button1_Click(object sender, EventArgs e)
{
alwaysOnListener.EmulateRecognize("Hey Larry start listening to me");
}
private void btnStop_Click(object sender, EventArgs e)
{
recEngine.EmulateRecognize("Stop Listening");
}
}
嘿。谢谢,我有点明白你的意思,但请你举个简单的例子。我明白你的意思。 – Sachin
np,添加了一些示例代码,并稍微改变了答案,以便更容易理解。 – DrewJordan
当我尝试运行我的程序时,它提出了一个说break的窗口。 – Sachin
如果没有办法按照我上面建议的方式做,那么请给我另外的想法。谢谢。 – Sachin