我目前正在重新创建一个我最近看到的教程项目,但我遇到了一些问题。首先我使用的是Windows 7 Home Premium,我的操作系统是土耳其语。
因此,System.Speech仅在我进行文本到语音时才起作用,否则会引发异常,说明没有安装语音识别器。我也从控制面板检查了这一点,并且说这种语言没有语音识别功能。由于我没有最终版本的Windows,因此我无法使用语言包来完全改变语言。
经过对stackoverflow的一些研究后,我发现安装micosoft语音平台并将System.Speech改为Microsoft.Speech。所以我按照本网站上的说明(http://msdn.microsoft.com/en-us/library/hh362873.aspx)安装了组件,包括en-US语言包。
我更改了代码以反映更改,现在我在不同的行上遇到了不同的错误。这是我的代码:
using System;
using System.Globalization;
using Microsoft.Speech.Recognition;
using Microsoft.Speech.Synthesis;
using System.Windows.Forms;
namespace SpeechRecognitionTest
{
public partial class Form1 : Form
{
private SpeechRecognitionEngine _speechRecognitionEngine = new SpeechRecognitionEngine(new CultureInfo("en-US"));
private SpeechSynthesizer _speechSynthesizer = new SpeechSynthesizer();
private PromptBuilder _promptBuilder = new PromptBuilder();
public Form1()
{
InitializeComponent();
}
private void btnSpeakText_Click(object sender, EventArgs e)
{
_promptBuilder.ClearContent();
_promptBuilder.AppendText(txtSpeech.Text);
_speechSynthesizer.SetOutputToDefaultAudioDevice();
_speechSynthesizer.Speak(_promptBuilder);
}
private void btnStart_Click(object sender, EventArgs e)
{
btnStart.Enabled = false;
btnEnd.Enabled = true;
var choicesList = new Choices();
choicesList.Add(new string[]{"hello","yes"});
var grammar = new Grammar(new GrammarBuilder(choicesList));
_speechRecognitionEngine.RequestRecognizerUpdate();
_speechRecognitionEngine.LoadGrammar(grammar);
_speechRecognitionEngine.SpeechRecognized += _speechRecognitionEngine_SpeechRecognized;
_speechRecognitionEngine.SetInputToDefaultAudioDevice();
_speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
}
void _speechRecognitionEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
MessageBox.Show(e.Result.Text);
}
private void btnEnd_Click(object sender, EventArgs e)
{
btnStart.Enabled = true;
btnEnd.Enabled = false;
}
}
}
首先,当我尝试文本到语音时,我得到错误"未处理的类型' System.IO.FileNotFoundException'发生在Microsoft.Speech.dll"在这一行:
_speechSynthesizer.Speak(_promptBuilder);
其次,当我尝试进行语音识别时,我得到以下异常:
未处理的类型' System.InvalidOperationException'发生在Microsoft.Speech.dll
附加信息:语法的语言与语音识别器的语言不匹配。
在线:
_speechRecognitionEngine.LoadGrammar(grammar);
我确实搜索了互联网,发现对这个问题的反应不一。有些人可以使用System.Speech没有问题,因为他们安装了英语,一些非英语操作系统所有者通过Microsoft.Speech解决了这个问题。但对此没有明确的答案。我目前没有选择,如果有人可以解释什么是错的,或者即使我可以在我的机器上运行此代码,因为本机操作系统语言,我真的很喜欢。
答案 0 :(得分:1)
合成引擎中的异常是由合成引擎试图找到默认语音并失败引起的。如果您明确指定了语音(使用SelectVoiceByHints或GetInstalledVoices(CultureInfo)),则合成将成功。
其次,GrammarBuilder个对象具有Culture属性(默认为当前的UI文化)。在识别可行之前,您需要将其设置为识别器的文化。