本程序是口算两位数乘法,随机生成两个两位数,用语音读出来。然后开启语音识别,接受用户输入,知道答案正确关闭语音识别。用户说答案时,可以说“再说一遍”重复题目。

关键是GrammarBuilder和Choices的用法。

首先来看看如何获得已安装的语音识别引擎

void showInstalled(){Console.WriteLine("installed recognizers");foreach (var i in SpeechRecognitionEngine.InstalledRecognizers()){Console.WriteLine(String.Format("{0}\t{1}\t{2}\t{3}\n", i.Id, i.Name, i.Culture, i.Description));}}

下面是主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Speech;
using System.Speech.Recognition;
using System.Globalization;
using System.Windows.Forms;
using System.Speech.Synthesis;
public class Haha
{static void Main(){new Haha();}SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();int x, y, z;SpeechSynthesizer cout = null;Haha(){recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);recognizer.SetInputToDefaultAudioDevice();String s = "0";for (int i = 1; i <= 9; i++) s += " " + i;GrammarBuilder num = new GrammarBuilder(new Choices(s.Split(new char[] { ' ' })));num = new GrammarBuilder(num, 1, 4);Choices all = new Choices();all.Add(num);all.Add("再说一遍");recognizer.LoadGrammarAsync(new Grammar(all));run();}void run(){cout = new SpeechSynthesizer();Random random = new Random();while (true){x = random.Next(11, 99);y = random.Next(11, 99);z = -1;cout.Speak(x + "成以" + y);recognizer.RecognizeAsync(RecognizeMode.Multiple);while (true){if (z != -1){if (z == x * y){cout.Speak("正确,真聪明");break;}else{cout.Speak(String.Format("不是{0},再算!",z));z = -1;}}}recognizer.RecognizeAsyncStop();}}void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e){string text = e.Result.Text;Console.WriteLine(text);if (text == "再说一遍"){cout.Speak(x + "成以" + y);return;}try{z = int.Parse(text);}catch{z = -1;}}
}

转载于:https://www.cnblogs.com/weiyinfu/p/5191945.html

C#中的System.Speech命名空间初探相关推荐

  1. C#中的System.Net.Sockets内部实现原理

    2019独角兽企业重金招聘Python工程师标准>>> 实现 Berkeley 套接字接口. MSDN注解: Socket 类为网络通信提供了一套丰富的方法和属性.Socket 类允 ...

  2. 如何理解 C# 中的 System.Void 类型?

    咨询区 ordag 我知道方法声明成 void 表示不返回什么东西,但我发现在 C# 中 void 不仅仅是一个关键词,而且还是一个真实的类型. void 是 System.Void 的别名,就像 i ...

  3. .NET 6 中的隐式命名空间引用

    .NET 6 中的隐式命名空间引用 Intro 之前写过一篇隐式命名空间引用的大概介绍,在一些小的测试项目中也有在用,一直没作为示例给大家分享,主要原因在于之前看到了一个关于隐式命名空间引用的 Git ...

  4. C#中的程序集和命名空间

    作为一个.NET程序员有必要对命名空间和程序集有明确的认识,下文很好解释了这两者的关系,感谢作者! 本文转自:http://www.cnblogs.com/netlyf/archive/2009/09 ...

  5. C#使用System.Speech制作语音提示功能

    转载自:C#语音提示 c#实现语音阅读以及文本转语音文件是基于c#的一个类库(SpeechSynthesizer )实现的,使用该类必须要添加引用using System.Speech.Synthes ...

  6. System.Globalization 命名空间

    System.Globalization 命名空间包含定义区域性相关信息的类,这些信息包括语言.国家/地区.使用的日历.日期.货币和数字的格式模式以及字符串的排序顺序.我们可以使用这些类编写全球化(国 ...

  7. using System.Linq命名空间无法引用!的解决方案

    Visual Studio 2008中当建立新文件时,遇到这样的问题: "using System.Linq命名空间无法引用!!!" 解决方法:在解决方案上点击右键--添加引用-- ...

  8. C# 特性 System.ComponentModel 命名空间属性方法大全,System.ComponentModel 命名空间的特性...

    目录: System.ComponentModel 特性命名空间与常用类 System.ComponentModel.DataAnnotations ComponentModel - Classes ...

  9. 在同一个文件中定义多个命名空间

    (PHP 5 >= 5.3.0, PHP 7) 也可以在同一个文件中定义多个命名空间.在同一个文件中定义多个命名空间有两种语法形式. Example #1 定义多个命名空间,简单组合语法 < ...

最新文章

  1. LotusScript类的继承
  2. VC实现HTTP协议的GET和POST方法
  3. 今天是我开通博客的第一天
  4. Ansible 学习总结(1)—— Ansible 入门详解
  5. linux 脚本 格式化,Shell脚本批量格式化文件名
  6. Kafka AKHQ 安装部署
  7. android日历的使用技巧,android日历控件的使用
  8. 超级鹰平台识别boss验证码
  9. 几款好用的敏捷开发工具
  10. Win10访问Linux分区
  11. Linux系统u盘win7没驱动程序,u盘安装win7找不到设备驱动程序,教您解决u盘安装win7找不到设备驱动程序...
  12. 论文快报-2021-10-Multi-task optimization and evolutionary multitasking
  13. 走楼梯2<每日一题>
  14. Android 实现自动抢微信红包
  15. 数据结构上机实验6.29
  16. 原生js获取document_常见的原生javascript DOM操作
  17. 配置linux网络的坑之IPADDR 等出现Command not found
  18. 脱 PECompact 2.x - Jeremy Collake 壳
  19. 量化投资常用技能——指标篇1:详解 MACD指标绘制、及其计算过程和作用
  20. 如何利用python实现TURF分析?

热门文章

  1. SmallMQ实现发布
  2. python实时处理log文件脚本
  3. 7.1 XHTML的规范化
  4. shell实战之日志脱敏
  5. Android Broadcast 和 BroadcastReceiver的权限限制
  6. 高项近5套选择题知识点思维导图
  7. 信息系统项目管理06——项目进度管理
  8. python爬虫使用selenium模拟登陆人人网
  9. jq使用教程05_ 新手也能用的安装版本,30秒点选即可安装完成,不需配置Python环境
  10. nasa和linux的关系,跟美国NASA毅力号登陆火星的Linux是一个无图形的纯命令行系统...