C# windows语音识别与朗读实例

 更新时间:2021年07月26日 11:41:20   作者:qq53716684  
这篇文章主要为大家详细介绍了C# windows语音识别与朗读实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

C# windows语音识别与朗读示例,供大家参考,具体内容如下

本示例通过windows语音识别功能进行语音识别和文本朗读。

打开windows麦克风,点击start按键,大声朗读 “中国”、“美国”、“英国”,识别成功将发出“嘟”的提示音并朗读对应结果。

用到的语音识别模块包括:

using System.Speech.Recognition;
using System.Speech.Synthesis;

动态连接库文件在我的资源中下载.System.Speach.dll

示例界面如下:

程序源码如下:

using System;
using System.Runtime.InteropServices;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Threading;
using System.Windows.Forms;

namespace Test
{
    public partial class FormVoiceControl : Form
    {
        static SpeechSynthesizer SS = new SpeechSynthesizer();
        private SpeechRecognitionEngine SRE = new SpeechRecognitionEngine(); //语音识别模块
        private bool SRE_listening = false;
        private int wordid;
        private string shibie;

        [DllImport("kernel32.dll")]
        public static extern bool Beep(int freq, int duration);

        public FormVoiceControl()
        {
            InitializeComponent();
        }

        public void InitVoice()  //语音识别初始化
        {
            //SS.SelectVoice("lily");
            SRE.SetInputToDefaultAudioDevice();  // 默认的语音输入设备,也可以设定为去识别一个WAV文

            GrammarBuilder GB = new GrammarBuilder();

            GB.Append(new Choices(new string[] { "中国", "美国", "英国"}));

            DictationGrammar DG = new DictationGrammar();

            Grammar G = new Grammar(GB);

            G.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(G_SpeechRecognized);  //注册语音识别事件

            SRE.EndSilenceTimeout = TimeSpan.FromSeconds(2);

            SRE.LoadGrammar(G);

        }

        void G_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            Beep(500, 500);//已识别提示音

            string result = e.Result.Text;            
            switch (result)
            {
                case "中国":
                    shibie = "中国:五星红旗";
                    choice(0);
                    break;
                case "美国":
                    shibie = "美国:星条旗";
                    choice(1);                    
                    break;
                case "英国":
                    shibie = "英国:米字旗";
                    choice(2);
                    
                    break;               
            }

        }
        private void Button1_Click(object sender, EventArgs e)
        {
            if (SRE_listening == false)
            {
                button1.Text = "stop";
                SRE.RecognizeAsync(RecognizeMode.Multiple);
            }
            else
            {
                button1.Text = "start";
                SRE.RecognizeAsyncStop();
            }
            lblanswer.Text = "";
           SRE_listening = !SRE_listening;
        }

        private void choice(int id)
        {
            wordid = id;

            Thread t1;
            Thread t2;          

            t1 = new Thread(new ThreadStart(ShowAnswer));
            t1.Start();
            t1.Join();
            t2 = new Thread(new ThreadStart(SpeekAnswer));
            t2.Start();
        }
        void ShowAnswer()  //线程
        {
            MethodInvoker mi = new MethodInvoker(this.dosomething);
            this.BeginInvoke(mi);

        }
        void dosomething()
        {
            lblanswer.Text = shibie;
        }
        void SpeekAnswer()  //线程
        {
            switch (wordid)
            {
                case 0:
                    SS.Speak("五星红旗");
                    
                    break;
                case 1:
                    SS.Speak("星条旗");
                    
                    break;
                case 2:
                    SS.Speak("米字旗");
                    
                    break;               
            }
        }

        private void FormVoiceControl_Load(object sender, EventArgs e)
        {
            InitVoice();

        }    


    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#多线程系列之多阶段并行线程

    C#多线程系列之多阶段并行线程

    本文详细讲解了C#多线程的多阶段并行线程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C#减少垃圾回收压力的字符串操作详解

    C#减少垃圾回收压力的字符串操作详解

    这篇文章给大家详细分析了C#减少垃圾回收压力的字符串操作的相关知识点,有兴趣的朋友参考学习下吧。
    2018-03-03
  • C#连接数据库和更新数据库的方法

    C#连接数据库和更新数据库的方法

    这篇文章主要介绍了C#连接数据库和更新数据库的方法,需要的朋友可以参考下
    2015-08-08
  • 聊聊C#中的Mixin的具体用法

    聊聊C#中的Mixin的具体用法

    本文主要介绍了C#中的Mixin的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 解析在C#中接口和类的异同

    解析在C#中接口和类的异同

    今天小编就为大家分享一篇关于解析在C#中接口和类的异同,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 一文弄懂C#浅克隆与深克隆

    一文弄懂C#浅克隆与深克隆

    在C#中,浅克隆和深克隆是两种常见的对象克隆技术,本文主要介绍了C#浅克隆与深克隆,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • 详解C#如何判断输入的数字是否符合货币格式

    详解C#如何判断输入的数字是否符合货币格式

    这篇文章主要为大家详细介绍了C#判断输入的数字是否符合货币格式的两种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • C#中的自动类型转换和强制类型转换

    C#中的自动类型转换和强制类型转换

    这篇文章主要介绍了C#中的自动类型转换和强制类型转换,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • C#简单嵌套flash读取数据的实现代码

    C#简单嵌套flash读取数据的实现代码

    这篇文章主要介绍了C#简单嵌套flash读取数据的实现代码,有需要的朋友可以参考一下
    2013-11-11
  • MessageBox的Buttons和三级联动效果

    MessageBox的Buttons和三级联动效果

    这篇文章主要介绍了MessageBox的Buttons和三级联动的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11

最新评论