zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
    
  • 相关阅读:
    38丨WebSocket:沙盒里的TCP
    Jmeter安装与介绍(一)
    37丨CDN:加速我们的网络服务
    爬虫笔记:xpath和lxml(十二)
    爬虫笔记:Selenium(十一)
    36丨WAF:保护我们的网络服务
    35丨OpenResty:更灵活的Web服务器
    爬虫笔记:抓取qq群成员的头像和昵称生成词云(十)
    Python全栈工程师 (类变量、方法、继承、覆盖)
    Python全栈工程师(面向对象)
  • 原文地址:https://www.cnblogs.com/geovindu/p/3694910.html
Copyright © 2011-2022 走看看