在 C# 中识别语音的问题
Issue with recognising speech in C#
我正在编写一个语音识别应用程序,我找到了一个示例 here。我尽可能地遵循代码,只有很少的变化,但是当我启动应用程序时,我在第 24 行捕获了 InnerException,特别是
At least one grammar must be loaded before doing a recognition
问题。我已将代码行复制到行(出于教育目的),所以我很确定它一定可以工作,但由于某种原因它没有。我的代码是:
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 社区版。我不认为,这是问题所在。
P.S。我知道,已经有人问过类似的问题 here on stack overflow;但是,我的问题有点不同,因为以上所有代码对我来说都是正确的。
如果您不注册 Load
事件,方法 Form1_Load
将永远不会执行。您可以在构造函数中执行此操作。
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
我想示例中的这一行在设计器文件中。
我正在编写一个语音识别应用程序,我找到了一个示例 here。我尽可能地遵循代码,只有很少的变化,但是当我启动应用程序时,我在第 24 行捕获了 InnerException,特别是
At least one grammar must be loaded before doing a recognition
问题。我已将代码行复制到行(出于教育目的),所以我很确定它一定可以工作,但由于某种原因它没有。我的代码是:
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 社区版。我不认为,这是问题所在。
P.S。我知道,已经有人问过类似的问题 here on stack overflow;但是,我的问题有点不同,因为以上所有代码对我来说都是正确的。
如果您不注册 Load
事件,方法 Form1_Load
将永远不会执行。您可以在构造函数中执行此操作。
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
我想示例中的这一行在设计器文件中。