SpeechRecognitionEngine不起作用

时间:2018-07-08 16:48:23

标签: c# speech-recognition

我正在尝试使用SpeechRecognitionEngine()。当我说你好时,程序应该以 hi 进行响应。问题是当我运行程序时出现错误:

  

其他信息:语法语言与语音识别器的语言不匹配。

我不知道如何在Windows窗体应用程序上修复该问题。有人可以帮忙吗? 另一个问题是,即使我说程序语音时语音性别也不是女性。为什么会这样?

谢谢。

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.Synthesis;
using System.Speech.Recognition;

namespace test1
{
public partial class Form1 : Form
{
    SpeechSynthesizer s = new SpeechSynthesizer();
    Choices list = new Choices();

    public Form1()
    {
        SpeechRecognitionEngine rec = new SpeechRecognitionEngine();

        list.Add("hello");

        Grammar gr = new Grammar(new GrammarBuilder(list));

        rec.RequestRecognizerUpdate();
        rec.LoadGrammar(gr);
        rec.SpeechRecognized += rec_SpeechRecognized;
        rec.SetInputToDefaultAudioDevice();
        rec.RecognizeAsync(RecognizeMode.Multiple);

        InitializeComponent();
    }

    private void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        s.SelectVoiceByHints(VoiceGender.Female);
        String r = e.Result.Text;

        if ( r == "hello" )
        {
            s.Speak("hi");
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

阅读MSDN文章会使我相信您对GrammarBuilder对象和SpeechRecognitionEngine对象的预期区域性不匹配。

要解决此问题,您只需在初始化这些对象时指定预期的区域性即可。 例如

    var enUS = new System.Globalization.CultureInfo("en-US");
    SpeechRecognitionEngine rec = new SpeechRecognitionEngine(enUS);
    GrammarBuilder gb = new GrammarBuilder
    {
         Culture = enUS;
    }
    gb.Append("hello");

还来自MSDN,请确保您已安装语音支持引擎,该引擎支持安装的所需语言国家/地区代码。通常,在标准Windows安装中就是这种情况。

  

Microsoft Windows和System.Speech API接受所有有效的语言国家/地区代码。要使用Culture属性中指定的语言执行语音识别,必须安装支持该语言国家/地区代码的语音识别引擎。