C#SAPI 5.4语言?

我已经制作了一个使用SAPI 5.4识别语音的简单程序,我想问一下我是否可以为TTS和ASR添加更多语言,谢谢以下代码我让你任何人都需要看看它

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using SpeechLib; using System.Globalization; using System.Speech.Recognition; namespace WindowsFormsApplication1 { public partial class Form1 : Form { // Speech Recognition Object SpSharedRecoContext listener; // Grammar object ISpeechRecoGrammar grammar; public Form1() { InitializeComponent(); } public string ps; private void button1_Click(object sender, EventArgs e) { if (btnListen.Text == "Start Listening") { try { listener = new SpeechLib.SpSharedRecoContext(); listener.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(listener_Reco); grammar = listener.CreateGrammar(0); grammar.DictationLoad("", SpeechLoadOption.SLOStatic); grammar.DictationSetState(SpeechRuleState.SGDSActive); btnListen.Text = "Stop Listening"; if (ps == "1") { listener.Resume(); ps = "0"; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } else if (btnListen.Text == "Stop Listening") { listener.Pause(); btnListen.Text = "Start Listening"; if (ps == "0") { ps = "1"; } } } public void listener_Reco(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult Result) { string heard = Result.PhraseInfo.GetText(0, -1, true); textBox1.Text += " " + heard; } private void button1_Click_1(object sender, EventArgs e) { WinXP winxp = new WinXP(); winxp.Show(); this.Hide(); } string getOSInfo() { //Get Operating system information. OperatingSystem os = Environment.OSVersion; //Get version information about the os. Version vs = os.Version; //Variable to hold our return value string operatingSystem = ""; if (os.Platform == PlatformID.Win32Windows) { //This is a pre-NT version of Windows switch (vs.Minor) { case 0: operatingSystem = "95"; break; case 10: if (vs.Revision.ToString() == "2222A") operatingSystem = "98SE"; else operatingSystem = "98"; break; case 90: operatingSystem = "Me"; break; default: break; } } else if (os.Platform == PlatformID.Win32NT) { switch (vs.Major) { case 3: operatingSystem = "NT 3.51"; break; case 4: operatingSystem = "NT 4.0"; break; case 5: if (vs.Minor == 0) operatingSystem = "2000"; else operatingSystem = "XP"; break; case 6: if (vs.Minor == 0) operatingSystem = "Vista"; else operatingSystem = "7"; break; default: break; } } //Make sure we actually got something in our OS check //We don't want to just return " Service Pack 2" or " 32-bit" //That information is useless without the OS version. if (operatingSystem != "") { //Got something. Let's prepend "Windows" and get more info. operatingSystem = "Windows " + operatingSystem; //See if there's a service pack installed. if (os.ServicePack != "") { //Append it to the OS name. ie "Windows XP Service Pack 3" operatingSystem += " " + os.ServicePack; } //Append the OS architecture. ie "Windows XP Service Pack 3 32-bit" operatingSystem += " " + getOSArchitecture().ToString() + "-bit"; } //Return the information we've gathered. return operatingSystem; } int getOSArchitecture() { string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); return ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? 32 : 64); } private void Form1_Load(object sender, EventArgs e) { string OS = getOSInfo(); if (OS.Contains("XP")) { btnXP.Visible = true; } else { btnXP.Visible = false; btnYes2.Visible = true; btnNo2.Visible = true; btnNo.Visible = false; btnYes.Visible = false; } } } } 

PS我在恢复识别器时遇到了问题

这取决于您使用识别器进行的操作。 是的,桌面操作系统(Windows Vista,7)附带一个与操作系统语言版本相关的识别器。 但是,微软还免费赠送(无需武器)用于服务器的识别引擎(但也可用于桌面操作系统)。 有许多不同的语言可供免费使用。

桌面和服务器识别器库之间存在一些差异。 我的理解是桌面识别器可以针对特定扬声器进行训练,支持更高质量的音频输入,并包括听写语法。 这些设计用于桌面使用,一次只能使用一个扬声器。 服务器识别器设计用于电话质量的音频,不可训练,并且需要有限的语法(没有听写)。 服务器引擎设计用于更高规模和多个同步扬声器(如IVR或SpeechServer应用程序)。

看到:

有些背景,请参阅System.Speech.Recognition和Microsoft.Speech.Recognition之间的区别是什么?