您好我正在开发一个程序,该程序可以识别我的声音,然后记下它听到的内容,但是当我运行代码并点击buttun启动recEngine时,它会说"类型' System.NullReferenceException'的未处理异常发生在System.Speech.dll"中,并在提示中说明var之前可能是null。但我之前设置了变量,或者我做错了什么。
这是代码
using System;
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);
// BtnEnable.Enabled = false;
BtnDisable.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e)
{
Choices commands = new Choices();
commands.Add(new string[] { "say hello", "print my name" });
GrammarBuilder Gbuilder = new GrammarBuilder();
Gbuilder.Append(commands);
Grammar grammar = new Grammar(Gbuilder);
recEngine.LoadGrammarAsync(grammar);
recEngine.SetInputToDefaultAudioDevice();
recEngine.SpeechRecognized += recEngine_SpeechRecognized;
}
private void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
switch (e.Result.Text)
{
case "say hello":
Log.Text += "\nHello";
break;
case "print my name":
Log.Text += "\nMyname";
break;
}
}
private void BtnDisable_Click(object sender, EventArgs e)
{
BtnEnable.Enabled = true;
BtnDisable.Enabled = false;
recEngine.RecognizeAsyncStop();
}
}
}
在提示菜单中,它显示:
- 在调用方法之前检查对象是否为null
- 使用" new"创建对象实例的关键字
提前致谢
答案 0 :(得分:1)
有些看似奇怪的事情:
使用recEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recEngine_SpeechRecognized);
代替recEngine.SpeechRecognized += recEngine_SpeechRecognized;
在您开始识别时,语法可能无法完成加载;使用LoadGrammar
代替LoadGrammarAsync
(或为LoadGrammarCompleted
添加处理程序)。
我总是发现为识别器(和语法)明确指定cultureinfo很方便,因为这可以防止对使用的语言产生误解。