运行RecognizeAsync时出现System.InvalidOperationException

时间:2017-05-21 16:09:30

标签: c# voice-recognition voice

我在C#创建了win form app,它识别用户的声音,然后回复它。当我试图说出任何内容时,会发生此例外An unhandled exception of type 'System.InvalidOperationException' occurred in System.Speech.dll

如果有人知道,请帮忙。 这是我的代码,以便更好地理解.....

  public partial class Form1 : Form
   {
    SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine();
    public Form1()
    {
        InitializeComponent();
    }

    private void enableBtn_Click(object sender, EventArgs e)
    {
        recEngine.RecognizeAsync(RecognizeMode.Multiple);
        disableBtn.Enabled = true;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Choices command = new Choices();
        command.Add(new String[] { "say hello" , "show my name"});
        GrammarBuilder gBuilder = new GrammarBuilder();
        gBuilder.Append(command);
        Grammar gram = new Grammar(gBuilder);
        recEngine.LoadGrammarAsync(gram);
        recEngine.SetInputToDefaultAudioDevice();
        recEngine.RecognizeAsync(RecognizeMode.Multiple);
        recEngine.SpeechRecognized += recEngine_SpeechRecognized;

    }

    void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        switch (e.Result.Text)
        {
            case "say hello":
                MessageBox.Show("Hello Quanit!!");
                break;
            case "show my name":
                richTextBox1.Text += "\nQuanit";
                break;
        }
    }

    private void disableBtn_Click(object sender, EventArgs e)
    {
        recEngine.RecognizeAsyncStop();
        disableBtn.Enabled = false;
    }
}

1 个答案:

答案 0 :(得分:0)

一些想法:

  • 您正在调用LoadGrammarAsync。在调用RecognizeAsync之前,无法保证加载语法。
  • 您两次调用RecognizeAsync。