软件编程
位置:首页>> 软件编程>> C#编程>> C# windows语音识别与朗读实例

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

作者:qq53716684  发布时间:2023-04-15 12:26:54 

标签:C#,语音识别,朗读

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

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

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

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


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

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

示例界面如下:

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

程序源码如下:


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();

}    

}
}

来源:https://blog.csdn.net/yx1234321/article/details/107078699

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com