我最近尝试在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的语音库,我构建了一个可以工作的合成器。
答案 0 :(得分:2)
你加载了语法,但是你曾经调用过sr.RecognizeAsync(); ?
您必须调用Recognize()进行同步识别或RecognizeAsync()进行识别。你们两个都做不到。
假设您正在从声卡中捕获音频,请在加载语法后尝试:
sr.SetInputToDefaultAudioDevice();
sr.RecognizeAsync();
要开始使用.NET语音,几年前在http://msdn.microsoft.com/en-us/magazine/cc163663.aspx发表了一篇非常好的文章。这可能是迄今为止我发现的最好的介绍性文章。它有点过时了,但非常好。 (测试结束后,AppendResultKeyValue方法被删除了。)