系统.语法的语言与语音识别器的语言不匹配
本文关键字:语言 不匹配 语音识别 系统 语法 | 更新日期: 2023-09-27 18:19:20
我目前正在重新创建一个我最近看到的教程项目,但我面临某些问题。首先,我使用的是Windows 7家庭高级版,我的操作系统是土耳其的。
因为这个,System。语音只工作,当我做文本到语音,否则它抛出一个异常说没有安装语音识别器。我也从控制面板上检查了这个,它说这种语言的语音识别不可用。因为我没有windows的最终版本,所以我不能使用语言包来完全改变语言。
在stackoverflow上做了一些研究后,我发现安装微软语音平台和更换系统。对微软的演讲。演讲作品。所以我按照这个网站(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' occurred in Microsoft.Speech.dll"
_speechSynthesizer.Speak(_promptBuilder);
其次,当我尝试做语音识别时,我得到以下例外:
类型为"System"的未处理异常。InvalidOperationException'在Microsoft.Speech.dll中发生
附加信息:语法的语言与语音识别器的语言不匹配。
在线:
_speechRecognitionEngine.LoadGrammar(grammar);
我确实在网上搜索了一下,发现对这个问题的反应不一。有些人可以使用System。语音没有问题,因为他们安装了英语语言,一些非英语操作系统用户通过Microsoft.Speech解决了这个问题。但这个问题没有明确的答案。我目前没有选择,真的很想如果有人能解释什么是错的,甚至如果我可以在我的机器上运行这段代码,因为本机操作系统语言。
合成引擎中的异常是由于合成引擎试图查找默认语音而失败造成的。如果你显式地指定一个声音(使用SelectVoiceByHints或GetInstalledVoices(CultureInfo)),合成将成功。
第二,GrammarBuilder对象有一个Culture属性(默认为当前UI区域性)。在识别工作之前,您需要将其设置为识别器的区域性。