在c#VS 2010中使用Windows 7运行基本语音识别程序,它会编译,但它不会运行

时间:2011-04-28 23:10:42

标签: c# speech-recognition

我最近尝试在Windows 7戴尔计算机上使用VS 2010中的C#(WinFormsApp)编写基本语音识别。我能够使用microsoft的基本示例(http://msdn.microsoft.com/en-us/magazine/cc163663.aspx#S5)以及像这样的论坛来使其工作。但是,我需要更换计算机,现在我试图在具有相同规格的Lenovo计算机上复制它。它不起作用,事实上,语音识别一直在干扰程序运行,当我改为SpeechRecognitionEngine它仍然没有运行。 我能够编译没有错误,但我没有看到结果,即MessageBox显示e.Result.Text

我的代码如下:

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

namespace SpeechRecogTest
{
    public partial class Form1 : Form
    {
        SpeechRecognitionEngine sr = new SpeechRecognitionEngine(); 

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Create grammar
            Choices words = new Choices(); 
            words.Add("Hi");
            words.Add("No");
            words.Add("Yes");

            Grammar wordsList = new Grammar(new GrammarBuilder(words));

            wordsList.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(rec_SpeechRecognized);
            sr.LoadGrammar(wordsList);

        }

        void rec_SpeechRecognized(object sender, RecognitionEventArgs e)
        {
            MessageBox.Show(e.Result.Text);
        }
    }
}

我非常感谢你的帮助。我很确定我已经安装了所有的SDK,包括SAPI 5.1,Windows SDK v7.0和v7.1,我还包括了COM和NET的语音库,我构建了一个可以工作的合成器。

1 个答案:

答案 0 :(得分:2)

你加载了语法,但是你曾经调用过sr.RecognizeAsync(); ?

您必须调用Recognize()进行同步识别或RecognizeAsync()进行识别。你们两个都做不到。

假设您正在从声卡中捕获音频,请在加载语法后尝试:

sr.SetInputToDefaultAudioDevice();
sr.RecognizeAsync();

要开始使用.NET语音,几年前在http://msdn.microsoft.com/en-us/magazine/cc163663.aspx发表了一篇非常好的文章。这可能是迄今为止我发现的最好的介绍性文章。它有点过时了,但非常好。 (测试结束后,AppendResultKeyValue方法被删除了。)