【发布时间】:2016-10-17 03:25:33
【问题描述】:
我目前正在重新创建一个我最近看到的教程项目,但我面临一些问题。首先,我使用的是 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;
}
}
}
首先,当我尝试将文本转语音时,我在此行收到错误“Microsoft.Speech.dll 中出现类型为 'System.IO.FileNotFoundException' 的未处理异常”:
_speechSynthesizer.Speak(_promptBuilder);
其次,当我尝试进行语音识别时,出现以下异常:
Microsoft.Speech.dll 中出现“System.InvalidOperationException”类型的未处理异常
附加信息:语法的语言与语音识别器的语言不匹配。
上线:
_speechRecognitionEngine.LoadGrammar(grammar);
我确实搜索了互联网,发现对这个问题的反应不一。有些人可以毫无问题地使用 System.Speech,因为他们安装了英语,一些非英语操作系统所有者通过 Microsoft.Speech 解决了这个问题。但对此没有明确的答案。我目前没有选择,真的很想有人能解释什么是错误的,或者即使我可以在我的机器上运行这段代码,因为本机操作系统语言。
【问题讨论】:
标签: c# .net speech-recognition text-to-speech