系统.语法的语言与语音识别器的语言不匹配

本文关键字:语言 不匹配 语音识别 系统 语法 | 更新日期: 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区域性)。在识别工作之前,您需要将其设置为识别器的区域性。