说实话,这些年来从博客园收获了不少东西。自从当年注册以来就想平时分享点简单的小程序啥的。因为平时比较懒,突然发现近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#程序员干货系列之语音识别相关推荐

  1. 程序员面试系列之Java单例模式的攻击与防御

    我写的程序员面试系列 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java ...

  2. 加拿大程序员趣闻系列 1/N

    第一篇 加拿大的工作机会 1. 自我介绍下 先自我介绍下, 我是一个来到加拿大2年的Android程序员. 之前在国内的几个Top 5的大公司里干过几年, 现在漂到了海外. 在加拿大这2年, 感受还是 ...

  3. 【程序员股民系列】如何用python, pandas, numpy, matplotlib绘制每日个股成交额图

    上次分享了一段代码用于绘制每日行业交易额的图: [程序员股民系列]如何用python, pandas, numpy, matplotlib绘制每日行业成交额图 分析粒度略粗,只到行业这一层,把代码稍微 ...

  4. 【程序员面试系列】手把手教你如何面试,你要的我都有(工作项目篇)

    作者:Dimple Solgan:当你的才华还无法撑起你的野心时候,那应该静下心来好好学习 前面两篇文章的总结,我们学会了面试前简历的准备.技术知识准备和算法题准备.不知道你是否看完了呢,如果没看完的 ...

  5. windows程序员进阶系列:《软件调试》之O--- WinDbg使用介绍

    windows程序员进阶系列:<软件调试>之O--- WinDbg使用介绍 拥有一个顺手的武器是每一个武林高手梦寐以求的.对于windows程序员来说,WinDbg调试器就是我们的武器.熟 ...

  6. 加拿大程序员趣闻系列 2/N : 薪酬福利篇

    第二篇 薪酬福利本篇 先祝大家新快乐. 我们这不放假, 我自己只好请了15号与16号两天,即除夕和初一休息. 好在19号是法定假日family day, 所以我请2天, 变成了休息5天. 除了过新年, ...

  7. 程序员进阶系列:年少不懂爱家家,懂了已是猿中人。

    正式分享之前,先回忆一下作者年少时的一次真实的面试囧途. 经验老道的面试官: 先问个简单的问题,i++ 与 ++i 有啥区别? 年少懵懂的攻城狮: i++ 先把操作数加 1,然后把操作数放入表达式中运 ...

  8. 加拿大程序员趣闻系列 3/N : 生活篇

    第三篇 生活篇 有同学在以前两篇中有留评价:"在国外点次外卖多少钱", 加上很多同学对移民出来有兴趣, 所以介绍下这边的生活成本, 给同学们一个参考. 另外, 得益于加拿大的公司比 ...

  9. 程序员资源系列(不断完善中)

    点击关注微信公众号 wenyuqinghuai 1. 程序员读书资源网址 1)红黑联盟的读书频道 2. PHP资源系列 1)PHP100中文网 2)第一PHP社区 3)[好]资源汇总-好 4)伯乐在线 ...

最新文章

  1. 提高网站有效流量从三个方面出发
  2. Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐[转]
  3. JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
  4. 一个数里有那些约数用c++怎么做_如何从一堆数里找出哪几个数相加等于你要的值?...
  5. jquery找祖先包含_jquery如何获取祖先元素
  6. 全球及中国金属粘合剂行业需求规模及产销前景分析报告2022-2027年
  7. HarmonyOS之深入解析自定义组件与布局的实现
  8. Codeup墓地-问题 D: 继续畅通工程
  9. Bokeh 风格属性设置
  10. 如何编写一个d.ts文件
  11. 【收藏】超全整理知识图谱相关学习资料,提供系统化的知识图谱学习路径
  12. 【bug:鳄梨】【上线前修改其他bug急着提交造成的bug】
  13. excel countblank函数使用方法及其实例
  14. geektool的cal命令格式乱了
  15. BMZCTF:insomniteaser_2019_l33t_hoster
  16. 信息安全系统和安全体系
  17. 如何设计百万人抽奖系统
  18. wheel文件安装以及换源安装
  19. 中英文论文写作指导第二部分(前言)
  20. Unity尝试从零创建一个敌人

热门文章

  1. 生活在地球上:网络摘录
  2. Unity3D笔记 愤怒的小鸟一场景切换
  3. [EffectiveC++]item41:了解隐式接口和编译期多态
  4. 5-5 表格输出 (5分)
  5. vue的Virtual Dom实现- snabbdom解密
  6. js面向对象的封装方法,【案例】
  7. Redhate5.4下Oracle 11g安装
  8. 书Visual C++.NET应用教程(附光盘)——高等学校计算机语言应用教的评论
  9. “HTTP 500 - 内部服务器错误”解决办法
  10. 关于Ajax 错误:'sys'未定义解决方法.