我正在尝试使用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");
}
}
}
}
答案 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属性中指定的语言执行语音识别,必须安装支持该语言国家/地区代码的语音识别引擎。