• Csharp: speech to text, text to speech in win


    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 System.Threading;
    using SpeechLib;//NET2.0 引用 Speech sdk 5.1 在COM选项卡里面的Microsoft Speech  object  library引用 已经有11.0版本
    using System.Speech;
    using System.Speech.Recognition;
    using System.Speech.Synthesis;
    
    
    namespace Speech
    {
        /// <summary>
        /// 20140427
        /// 涂聚文
        /// 
        /// </summary>
        public partial class Form1 : Form
        {
            private enum State
            {
                Idle = 0,
                Accepting = 1,
                Off = 2,
            }
    
            private State RecogState = State.Off;
            private SpeechRecognitionEngine recognizer;
            private SpeechSynthesizer synthesizer = null;
            private int Hypothesized = 0;
            private int Recognized = 0;
            /// <summary>
            /// 
            /// </summary>
            public Form1()
            {
                InitializeComponent();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Form1_Load(object sender, EventArgs e)
            {
                // SpVoice voice = new SpVoice();//SAPI 5.4           
                //SpeechLib.ISpeechObjectTokens obj = voice.GetVoices(string.Empty, string.Empty);
                //int count = obj.Count;//获取语音库总数
                //bool result = false;
                //for (int i = 0; i < count; i++)
                //{
                //    string desc = obj.Item(i).GetDescription(i);//.GetDescription(); //遍历语音库
    
                //    comboBox1.Items.Add(desc);
                //}
    
    
                //SpVoiceClass voice = new SpVoiceClass();//SAPI 5.1
                ////voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);
                ////voice.Speak("你要说的话",SpeechVoiceSpeakFlags.SVSFlagsAsync);
    
                //SpVoice voice1 = new SpVoice();//SAPI 5.4
                //voice1.Volume = 100;//音量
                //voice1.Voice = voice1.GetVoices(string.Empty, string.Empty).Item(0);
    
                //voice1.Rate = 2;//速度语音朗读速度
                //           voice1.Speak("你要说的话", SpeechVoiceSpeakFlags.SVSFlagsAsync);
                 //voice1.Speak("speech sdk 5.1", SpeechVoiceSpeakFlags.SVSFlagsAsync);
                //SpeechSynthesizer syn = new SpeechSynthesizer();
                //syn.SelectVoice("Microsoft Lili"); 
    
                //initialize recognizer and synthesizer
                InitializeRecognizerSynthesizer();
    
                //if input device found then proceed
                if (SelectInputDevice())
                {
                    LoadDictationGrammar();
                   
                    ReadAloud("中华人民共和国"); //中文方式Speech Engine Ready for Input
                }
    
            }
            /// <summary>
            /// 中文
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                SpVoiceClass voice = new SpVoiceClass();
                voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); //0,为系统默认,中文
               
                voice.Speak(this.textBox1.Text.Trim(), SpeechVoiceSpeakFlags.SVSFlagsAsync);
            }
            /// <summary>
            /// 英文
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                SpVoiceClass voice = new SpVoiceClass();
                voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(1);//
                voice.Speak(this.textBox2.Text.Trim(), SpeechVoiceSpeakFlags.SVSFlagsAsync);
            }
            /// <summary>
            /// 输入中文语音输出中文文字
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button3_Click(object sender, EventArgs e)
            {
                switch (RecogState)
                {
                    case State.Off:
                        RecogState = State.Accepting;
                        button3.Text = "Stop";
                        recognizer.RecognizeAsync(RecognizeMode.Multiple);
                        break;
                    case State.Accepting:
                        RecogState = State.Off;
                        button3.Text = "Start";
                        recognizer.RecognizeAsyncStop();
                        break;
                }
            }
            /// <summary>
            /// pause recognition and speak the text sent
            /// </summary>
            /// <param name="speakText"></param>
            public void ReadAloud(string speakText)
            {
                try
                {
                    recognizer.RecognizeAsyncCancel();
                    synthesizer.SpeakAsync(speakText);
                }
                catch { }
            }
    
            /// <summary>
            /// initialize recognizer and synthesizer along with their events
            /// /// </summary>
            private void InitializeRecognizerSynthesizer()
            {
                var selectedRecognizer = (from e in SpeechRecognitionEngine.InstalledRecognizers()
                                          where e.Culture.Equals(Thread.CurrentThread.CurrentCulture)
                                          select e).FirstOrDefault();
                recognizer = new SpeechRecognitionEngine(selectedRecognizer);
                recognizer.AudioStateChanged += new EventHandler<AudioStateChangedEventArgs>(recognizer_AudioStateChanged);
                recognizer.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);
                recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
    
                synthesizer = new SpeechSynthesizer();
            }
            #region Recognizer events
            private void recognizer_AudioStateChanged(object sender, AudioStateChangedEventArgs e)
            {
                switch (e.AudioState)
                {
                    case AudioState.Speech:
                        LabelStatus.Text = "Listening";
                        break;
                    case AudioState.Silence:
                        LabelStatus.Text = "Idle";
                        break;
                    case AudioState.Stopped:
                        LabelStatus.Text = "Stopped";
                        break;
                }
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void recognizer_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
            {
                Hypothesized++;
                LabelHypothesized.Text = "Hypothesized: " + Hypothesized.ToString();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
            {
                Recognized++;
                string s = "Recognized: " + Recognized.ToString();
    
                if (RecogState == State.Off)
                    return;
                float accuracy = (float)e.Result.Confidence;
                string phrase = e.Result.Text;
                {
                    if (phrase == "End Dictate")
                    {
                        RecogState = State.Off;
                        recognizer.RecognizeAsyncStop();
                        ReadAloud("Dictation Ended");
                        return;
                    }
                    textBox1.AppendText(" " + e.Result.Text);
                }
            }
            #endregion
            /// <summary>
            /// select input device if available
            /// </summary>
            /// <returns></returns>
            private bool SelectInputDevice()
            {
                bool proceedLoading = true;
                //if OS is above XP
                if (IsOscompatible())
                {
                    try
                    {
                        recognizer.SetInputToDefaultAudioDevice();
                    }
                    catch
                    {
                        proceedLoading = false; //no audio input device
                    }
                }
                //if OS is XP or below 
                else
                    ThreadPool.QueueUserWorkItem(InitSpeechRecogniser);
                return proceedLoading;
            }
    
            /// <summary>
            /// Findout if OS is compatible. 
            /// </summary>
            /// <returns>true if greater than XP otherwise false</returns>
            private bool IsOscompatible()
            {
                OperatingSystem osInfo = Environment.OSVersion;
                if (osInfo.Version > new Version("6.0"))
                    return true;
                else
                    return false;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="o"></param>
            private void InitSpeechRecogniser(object o)
            {
                recognizer.SetInputToDefaultAudioDevice();
            }
    
            /// <summary>
            /// Load grammars, one for command and other for dictation
            /// </summary>
            private void LoadDictationGrammar()
            {
                GrammarBuilder grammarBuilder = new GrammarBuilder();
                grammarBuilder.Append(new Choices("End Dictate"));
                Grammar commandGrammar = new Grammar(grammarBuilder);
                commandGrammar.Name = "main command grammar";
                recognizer.LoadGrammar(commandGrammar);
    
                DictationGrammar dictationGrammar = new DictationGrammar();
                dictationGrammar.Name = "dictation";
                recognizer.LoadGrammar(dictationGrammar);
            }
        }
    }
    
  • 相关阅读:
    AsyncTask(异步任务)
    Android之listview添加数据篇
    Android之ListView动态添加数据(SQLiteOpenHelper类添加数据)
    Android之sqlite数据库版本升级和降级的处理(onUpgrade和onDowngrade)
    Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机
    Android之SQLite
    Eclipse快捷键
    Android之微信布局篇
    Android之MainActivity类
    onOptionsItemSelected、onMenuItemSelected、onContextItemSelected 区别
  • 原文地址:https://www.cnblogs.com/geovindu/p/3694910.html
Copyright © 2020-2023  润新知