在公认的语音中解析命令的第一个单词

时间:2015-01-18 19:24:50

标签: c# speech-recognition speech-to-text

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

以下是代码,如果它有助于理解我想要实现的目标以及到目前为止我做了什么

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;
        }
    }

1 个答案:

答案 0 :(得分:1)

首先,您需要以适当的方式构建语法以允许听写,请参阅参考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");
     }
}