C#程序员干货系列之语音识别
说实话,这些年来从博客园收获了不少东西。自从当年注册以来就想平时分享点简单的小程序啥的。因为平时比较懒,突然发现近2年没更新了。准备陆续分享些小程序,这些也算是本猿手头上的一些自制小工具吧。
以后会陆续分享些WPF的自制按钮控件。
语音识别小程序,调用了windows的识别组件。精简了一些代码,算是比较简单易懂的一个语音识别类。
开发测试环境win7,VS2008。如果有其它环境中的,欢迎补充。
SRecognition.cs
1 using System; 2 using System.Speech.Recognition; 3 using System.Globalization; 4 using System.Windows.Forms; 5 6 namespace NingTao 7 { 8 public class SRecognition 9 { 10 public SpeechRecognitionEngine recognizer = null;//语音识别引擎 11 public DictationGrammar dictationGrammar = null; //自然语法 12 public System.Windows.Forms.Control cDisplay; //显示控件 13 14 public SRecognition(string[] fg) //创建关键词语列表 15 { 16 CultureInfo myCIintl = new CultureInfo("zh-CN"); 17 foreach (RecognizerInfo config in SpeechRecognitionEngine.InstalledRecognizers())//获取所有语音引擎 18 { 19 if (config.Culture.Equals(myCIintl) && config.Id == "MS-2052-80-DESK") 20 { 21 recognizer = new SpeechRecognitionEngine(config); 22 break; 23 }//选择识别引擎 24 } 25 if (recognizer != null) 26 { 27 InitializeSpeechRecognitionEngine(fg);//初始化语音识别引擎 28 dictationGrammar = new DictationGrammar(); 29 } 30 else 31 { 32 MessageBox.Show("创建语音识别失败"); 33 } 34 } 35 private void InitializeSpeechRecognitionEngine(string[] fg) 36 { 37 recognizer.SetInputToDefaultAudioDevice();//选择默认的音频输入设备 38 Grammar customGrammar = CreateCustomGrammar(fg); 39 //根据关键字数组建立语法 40 recognizer.UnloadAllGrammars(); 41 recognizer.LoadGrammar(customGrammar); 42 //加载语法 43 recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized); 44 //recognizer.SpeechHypothesized += new EventHandler <SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized); 45 } 46 public void BeginRec(Control tbResult)//关联窗口控件 47 { 48 TurnSpeechRecognitionOn(); 49 TurnDictationOn(); 50 cDisplay = tbResult; 51 } 52 public void over()//停止语音识别引擎 53 { 54 TurnSpeechRecognitionOff(); 55 } 56 public virtual Grammar CreateCustomGrammar(string[] fg) //创造自定义语法 57 { 58 GrammarBuilder grammarBuilder = new GrammarBuilder(); 59 grammarBuilder.Append(new Choices(fg)); 60 return new Grammar(grammarBuilder); 61 } 62 private void TurnSpeechRecognitionOn()//启动语音识别函数 63 { 64 if (recognizer != null) 65 { 66 recognizer.RecognizeAsync(RecognizeMode.Multiple); 67 //识别模式为连续识别 68 } 69 else 70 { 71 MessageBox.Show("创建语音识别失败"); 72 } 73 } 74 private void TurnSpeechRecognitionOff()//关闭语音识别函数 75 { 76 if (recognizer != null) 77 { 78 recognizer.RecognizeAsyncStop(); 79 TurnDictationOff(); 80 } 81 else 82 { 83 MessageBox.Show("创建语音识别失败"); 84 } 85 } 86 private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 87 { 88 //识别出结果完成的动作,通常把识别结果传给某一个控件 89 string text = e.Result.Text; 90 cDisplay.Text += text; 91 } 92 private void TurnDictationOn() 93 { 94 if (recognizer != null) 95 { 96 recognizer.LoadGrammar(dictationGrammar); 97 //加载自然语法 98 } 99 else 100 { 101 MessageBox.Show("创建语音识别失败"); 102 } 103 } 104 private void TurnDictationOff() 105 { 106 if (dictationGrammar != null) 107 { 108 recognizer.UnloadGrammar(dictationGrammar); 109 //卸载自然语法 110 } 111 else 112 { 113 MessageBox.Show("创建语音识别失败"); 114 } 115 } 116 } 117 }
form调用,其中2个按钮(开始,停止),1个文本框(识别结果)
using System; using System.Windows.Forms;namespace NingTao {public partial class Form1 : Form{private SRecognition sr;public Form1(){InitializeComponent();string[] fg = { "东方", "西方", "南方", "北方" };sr = new SRecognition(fg);button2.Enabled = false;}private void button1_Click(object sender, EventArgs e){sr.BeginRec(textBox1);button1.Enabled = false;button2.Enabled = true;}private void button2_Click(object sender, EventArgs e){sr.over();button1.Enabled = true;button2.Enabled = false;}} }
然后就可以测试语音识别了。
下载地址
转载于:https://www.cnblogs.com/slowhand/archive/2013/05/07/3065209.html
C#程序员干货系列之语音识别相关推荐
- 程序员面试系列之Java单例模式的攻击与防御
我写的程序员面试系列 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java ...
- 加拿大程序员趣闻系列 1/N
第一篇 加拿大的工作机会 1. 自我介绍下 先自我介绍下, 我是一个来到加拿大2年的Android程序员. 之前在国内的几个Top 5的大公司里干过几年, 现在漂到了海外. 在加拿大这2年, 感受还是 ...
- 【程序员股民系列】如何用python, pandas, numpy, matplotlib绘制每日个股成交额图
上次分享了一段代码用于绘制每日行业交易额的图: [程序员股民系列]如何用python, pandas, numpy, matplotlib绘制每日行业成交额图 分析粒度略粗,只到行业这一层,把代码稍微 ...
- 【程序员面试系列】手把手教你如何面试,你要的我都有(工作项目篇)
作者:Dimple Solgan:当你的才华还无法撑起你的野心时候,那应该静下心来好好学习 前面两篇文章的总结,我们学会了面试前简历的准备.技术知识准备和算法题准备.不知道你是否看完了呢,如果没看完的 ...
- windows程序员进阶系列:《软件调试》之O--- WinDbg使用介绍
windows程序员进阶系列:<软件调试>之O--- WinDbg使用介绍 拥有一个顺手的武器是每一个武林高手梦寐以求的.对于windows程序员来说,WinDbg调试器就是我们的武器.熟 ...
- 加拿大程序员趣闻系列 2/N : 薪酬福利篇
第二篇 薪酬福利本篇 先祝大家新快乐. 我们这不放假, 我自己只好请了15号与16号两天,即除夕和初一休息. 好在19号是法定假日family day, 所以我请2天, 变成了休息5天. 除了过新年, ...
- 程序员进阶系列:年少不懂爱家家,懂了已是猿中人。
正式分享之前,先回忆一下作者年少时的一次真实的面试囧途. 经验老道的面试官: 先问个简单的问题,i++ 与 ++i 有啥区别? 年少懵懂的攻城狮: i++ 先把操作数加 1,然后把操作数放入表达式中运 ...
- 加拿大程序员趣闻系列 3/N : 生活篇
第三篇 生活篇 有同学在以前两篇中有留评价:"在国外点次外卖多少钱", 加上很多同学对移民出来有兴趣, 所以介绍下这边的生活成本, 给同学们一个参考. 另外, 得益于加拿大的公司比 ...
- 程序员资源系列(不断完善中)
点击关注微信公众号 wenyuqinghuai 1. 程序员读书资源网址 1)红黑联盟的读书频道 2. PHP资源系列 1)PHP100中文网 2)第一PHP社区 3)[好]资源汇总-好 4)伯乐在线 ...
最新文章
- 提高网站有效流量从三个方面出发
- Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐[转]
- JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
- 一个数里有那些约数用c++怎么做_如何从一堆数里找出哪几个数相加等于你要的值?...
- jquery找祖先包含_jquery如何获取祖先元素
- 全球及中国金属粘合剂行业需求规模及产销前景分析报告2022-2027年
- HarmonyOS之深入解析自定义组件与布局的实现
- Codeup墓地-问题 D: 继续畅通工程
- Bokeh 风格属性设置
- 如何编写一个d.ts文件
- 【收藏】超全整理知识图谱相关学习资料,提供系统化的知识图谱学习路径
- 【bug:鳄梨】【上线前修改其他bug急着提交造成的bug】
- excel countblank函数使用方法及其实例
- geektool的cal命令格式乱了
- BMZCTF:insomniteaser_2019_l33t_hoster
- 信息安全系统和安全体系
- 如何设计百万人抽奖系统
- wheel文件安装以及换源安装
- 中英文论文写作指导第二部分(前言)
- Unity尝试从零创建一个敌人
热门文章
- 生活在地球上:网络摘录
- Unity3D笔记 愤怒的小鸟一场景切换
- [EffectiveC++]item41:了解隐式接口和编译期多态
- 5-5 表格输出 (5分)
- vue的Virtual Dom实现- snabbdom解密
- js面向对象的封装方法,【案例】
- Redhate5.4下Oracle 11g安装
- 书Visual C++.NET应用教程(附光盘)——高等学校计算机语言应用教的评论
- “HTTP 500 - 内部服务器错误”解决办法
- 关于Ajax 错误:'sys'未定义解决方法.