【问题标题】:Issue with recognising speech in C#在 C# 中识别语音的问题
【发布时间】:2017-05-28 22:55:55
【问题描述】:

我正在编写一个语音识别应用程序,我找到了一个示例 here。我尽可能地遵循代码,只有很少的变化,但是当我启动应用程序时,我在第 24 行捕获了 InnerException,特别是

在进行识别之前必须至少加载一个语法

问题。我已经逐行复制了代码(出于教育目的),所以我很确定它必须有效,但由于某种原因它不能。我的代码是:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Recognition;

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

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

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

        private void Form1_Load(object sender, EventArgs e)
        {
            Choices commands = new Choices();
            commands.Add(new string[] { "say hello", "say goodbye", "say my name" });
            GrammarBuilder gBuilder = new GrammarBuilder();
            gBuilder.Append(commands);
            Grammar grammar = new Grammar(gBuilder);

            recEngine.LoadGrammarAsync(grammar);
            recEngine.SetInputToDefaultAudioDevice();
            recEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(RecEngine_SpeechRecognized);
        }

        private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            switch (e.Result.Text)
            {
                case "say hello":
                    MessageBox.Show("Hello to you!");
                    break;
                case "say goodbye":
                    MessageBox.Show("Bye, bye!");
                    break;
                case "say my name":
                    InputBox.Text += "\nYourName";
                    break;
            }
        }
    }
}

我正在使用 Visual Studio 2015 社区版。不过,我不认为这是问题所在。

附:我知道,类似的问题已经被问到here on stack overflow;但是,我的问题有点不同,因为上面的所有代码对我来说都是正确的。

【问题讨论】:

  • 第 24 行在哪里?如果发生异常请在代码中添加注释
  • recEngine.RecognizeAsync(RecognizeMode.Multiple);

标签: c# .net winforms speech-recognition


【解决方案1】:

如果你不注册Load事件,方法Form1_Load将永远不会被执行。您可以在构造函数中执行此操作。

public Form1()
{
    InitializeComponent();
    Load += Form1_Load;
}

我想在示例中这一行在设计器文件中。

【讨论】:

  • 谢谢!我会检查这个解决方案。
  • @L_Pav 总是很开心
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多