【问题标题】:System.InvalidOperationException while running RecognizeAsync运行 RecognizeAsync 时出现 System.InvalidOperationException
【发布时间】:2017-10-21 07:04:00
【问题描述】:

我在C# 创建win form 应用程序,它可以识别用户的声音然后响应它。当我尝试说什么时,出现此异常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;
    }
}

【问题讨论】:

  • 将异常的完整描述添加到问题及其被抛出的位置
  • 它被扔在那条线上。 recEngine.RecognizeAsync(RecognizeMode.Multiple);
  • 你有 recEngine.RecognizeAsync(RecognizeMode.Multiple);在两个地方,一个在Form1_Load,另一个在enableBtn_Click。开始已经开始识别不是一个好主意,您可能只想保留 1。另一个问题是您尝试在异步模式下加载语法,但不要等待它加载。最好使用简单的LoadGrammar

标签: c# voice-recognition voice


【解决方案1】:

几个想法:

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

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2014-08-13
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多