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
示例界面如下:
程序源码如下:
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
投稿
猜你喜欢
- 实践过程效果代码public partial class GlorifyCheckBox : CheckBox {
- 一、Elasticseach介绍1.简单介绍官网:开源搜索:Elasticsearch、ELK Stack 和 Kibana 的
- 本文实例讲述了C#实现的JS操作类。分享给大家供大家参考。具体如下:这个C#类封装了常用的JS客户端代码操作,包括弹出对话框、返回上一页,通
- 手机二维码扫码登录已经成为了现代互联网时代的一种普遍的登录方式。它的出现,极大地方便了用户登录的流程,减少了用户输入用户名和密码的麻烦。在二
- 项目中用到WebView加上进度条放在顶部,让用户知道加载进度情况,可以提高用户体验:效果:布局:<RelativeLayoutand
- 前言本文主要介绍下Spring事务中的传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是S
- 题目一:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比
- 在远程调用中,需要把参数和返回值通过网络传输,这个使用
- Java的接口和抽象类深入理解对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。
- 0 写在前面在实际工作中有一些地方需要用到截取字符串的方法,所以在此记录下截取字符串的几种方法。.substring()StringUtil
- 最新Spring Data JPA官方参考手册 Version 2.0.0.RC2,2017-07-25https://docs.sprin
- Eclipse提供了一个可扩展插件的开发系统。这就使得Eclipse在运行系统之上可以实现各种功能。这些插件也不同于其他的应用(插件的功能是
- 本文实例为大家分享了java实现2048小游戏的具体代码,供大家参考,具体内容如下效果图:游戏介绍:1.2048是一款益智类小游戏,刚开始随
- 一、银行存取款1.前言毕竟谁不喜欢钱呢!(不是😅)我看谁不喜欢在知识的海洋中遨游😤!2.描述银行存取款的流程是人们非常熟悉的事情,用户可以在
- 本文实例形式展示了C#中异步调用的实现方法,并对其原理进行了较为深入的分析,现以教程的方式分享给大家供大家参考之用。具体如下:首先我们来看一
- 一般情况下,Redis Client端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响
- 一、前言canal:阿里巴巴 MySQL binlog 增量订阅&消费组件https://github.com/alibaba/ca
- 本文实例讲述了C#实现软件监控外部程序运行状态的方法。分享给大家供大家参考。具体方法如下:需要 * 一个程序,用于监控另一个程序运行状态,一旦
- 目录为什么选择MQTTMQTT, 启动!使用方式Client模式创建工厂类创建工具类Spring Integration总结为什么选择MQT
- 这篇文章主要介绍了Spring框架实现AOP添加日志记录功能过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习