解析已识别语音中命令的第一个词

Parse first word of the command in recognized speech

我正在尝试获取 speech 输入并将其转换为字符串并将其显示在 richtext box 控件上。我在几篇文章中阅读了有关语音合成和语音识别的文章,在这些文章中我学会了通过语音获取命令,但是我想在我的命令 Write 被识别后写在富文本框控件上。可能吗?

这是代码,如果它有助于理解我想要实现的目标以及我到目前为止所做的事情

object 声明

PromptBuilder pb = new PromptBuilder();
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
Choices clist = new Choices();

Enabling语音输入的代码

 private void btnEnableVoice_Click(object sender, EventArgs e)
    {
        btnEnableVoice.Enabled = false;
        btnDisableVoice.Enabled = true;

        /////////////Adding commands in a list of type Choices///////////////////////
        clist.Add(new string[] { "Is it working", "Write" });
        Grammar gr = new Grammar(new GrammarBuilder(clist));

        try
        {
            recognizer.RequestRecognizerUpdate(); ///////starting engine
            recognizer.LoadGrammar(gr);
            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
            recognizer.SetInputToDefaultAudioDevice();
            recognizer.RecognizeAsync(RecognizeMode.Multiple);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }
    }
   void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        switch (e.Result.Text.ToString())
        { 
            case "Is it working":
                ss.SpeakAsync("Yes its working");
                break;
            case "Write":
                richTextBox1.Text += ""; //Speech to text input here
                break;
        }
    }

首先你需要以适当的方式构建语法以允许听写,参考http://msdn.microsoft.com/en-us/library/ms576565(v=vs.110).aspx:

 Choices clist = new Choices();
 clist.Add(new string[] { "Is it working", "Write" });
 GrammarBuilder bl = new GrammarBuilder(clist);
 bl.appendDictation();
 Grammar gr = new Grammar(bl);

要解析你需要像

这样的东西
void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
     string result = e.Result.Text.ToString();
     if (result.startsWith("Write")) {
         richTextBox1.Text += result.substring(7); // Skip first 6 chars
     } else if (result.startsWith("Is it working")) {
         ss.SpeakAsync("Yes its working");
     }
}