1

我已经制作了一个使用 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.  i.e. "Windows XP Service Pack 3"
                    operatingSystem += " " + os.ServicePack;
                }
                //Append the OS architecture.  i.e. "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我在恢复识别器时遇到了问题

4

1 回答 1

2

这在一定程度上取决于您对识别器所做的工作。是的,桌面操作系统(Windows Vista、7)带有一个与操作系统语言版本相关的识别器。但是,微软还免费(不需要武器)赠送了一个用于服务器的识别引擎(但也可以用于桌面操作系统)。有许多不同的语言可供免费使用。

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

看:

有关一些背景信息,请参阅System.Speech.Recognition 和 Microsoft.Speech.Recognition 之间有什么区别?

于 2012-08-13T23:29:50.657 回答