C# SAPI 5.4 Languages?

2019-04-16 03:49发布

I've made a Simple Program That Recognizes Speech Using SAPI 5.4 , i wanted to ask if i can add some more languages to the TTS and The ASR , Thanks Here is the code i made you anybody needs to take a look at it

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;
            }
        }




    }
}

P.S i've Had A Problem When Resuming The Recognizer

1条回答
成全新的幸福
2楼-- · 2019-04-16 03:58

It depends a little bit on what you're doing with the recognizer. Yes, the desktop OSes (Windows Vista, 7) come with a recognizer that is tied to the language version of the OS. But, Microsoft also gives away for free (no weapon needed) a recognition engine for use on Servers (but can also be used on Desktop OSes). There are many different langauges available for free.

There are a few differences between the desktop and server recognizer libraries. My understanding is that the desktop recognizers are trainable for a specific speaker, support higher quality audio input, and include a dictation grammar. These are designed for desktop use where only one speaker is expected at a time. The server recognizers are designed for telephone quality audio, are not trainable, and require a limited grammar (no dictation). The server engines are designed for higher scale and multiple simultaneous speakers (like in IVR or SpeechServer applications).

See:

For some background, see What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition?

查看更多
登录 后发表回答