C#中的System.Speech命名空间初探

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

关键是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;
        }
    }
}
时间: 2024-08-06 19:05:15

C#中的System.Speech命名空间初探的相关文章

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

C#中的程序集和命名空间 如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式.只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型.<精通.NET核心技术--原理与架构> 程序集和命名空间不存在必然联系,一个程序集可以包含多个命名空间,同一个命名空间也可以分放在几个程序集. 程序集是应用程序的部署单元..NET应用程序包含一个或多个程序集.通常扩展名是EXE或DLL 的.NET可执行程序称为程序集..NET程序集包含元数据,这些元数据描述了程序集中定义的所有

详解System.Data 命名空间

学习了面向对象的设计思想,我们的就应该明白分层的用法.通过机房重构和牛腩的学习我们对数据库已经掌握了一定的技能,System.Data已经是我们的老朋友了,但是我们对他又了解多少呢?下面让我们认真的了解一下System.Data命名空间.System.Data这个命名空间中又有很多的命名空间,我们最常用的就是System.Data.SqlClient,这个命名空间中有很多我们总是遇到的类,比如:SqlCommand.SqlConnection.SqlDataAdapter.SqlDataRead

System.IO 命名空间

System.IO 命名空间的主要目的是为了提供方便访问操作系统的文件和目录类型,另外,也提供写内存和网络流的方法. 这个命名空间提供主要两种方法处理文件和目录,能够使用FileInfo 和 DirectoryInfo 对象获得或修改文件和目录的信息:也能够用File 和 Directory 类实现相同的功能,但是两者都要求传入的文件名为静态成员.通常,如果想要获得文件系统对象的某一项信息,用 File 和 Directory 类:如果想要获得一个文件系统对象的多项信息,用 FileInfo 和

System.Xml 命名空间

XML 已经成为一种流行的数据格式,其原因很多,对于大多数人来说,这是一种很方便表示数据的格式,文件有可读性.程序员的处理文件既有非结构化的,即不遵循一种模式,或者是结构化的,即数据符合 XSD 架构定义的约定:还希望方便地用 XPath 查询数据,即,为了处理一种新的数据格式而编写自定义的解析程序,很少需要,文件可以在不同的 XML 格式之间快速转换,用强大的 XSLT 语言转换数据. System.Xml 命名空间处理 XML 文件的类所有的方法很多,有这里描述的,但不止这些,我们将学习的方

System.Configuration 命名空间

第九章访问数据 设计计算机的目的是处理数据的,因此,很少有程序不需要访问数据,既可以是读很小的配置文件,还可以是访问一个全面的关系数据库管理系统.在这一章,我们将广泛学习在 F# 中的访问数据. 不管什么时候执行用 .NET 语言写的应用程序,.NET 运行时都会自动检查是否存在配置文件.这个文件的名字与可执行文件名相同,再加上扩展名 .config,文件必须放在与可执行文件相同的目录中.比如, MyApp.exe 的配置文件就是MyApp.exe.config.在 ASP.NET 应用程序中,

[语音识别]System.Speech

一个有趣的东西,今后可能用得上. C#语音识别:在命名空间 System.Speech下SpeechSynthesizer可以将文字转换成语音 贴出代码: public partial class Form1 : Form { private SpeechSynthesizer ss; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ss = new S

.net framework类库中必须掌握的命名空间或类

Web开发常用命名空间和类. System.Collections //命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic //命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能.System.Configuration //命名空间包含提供用于处理配置数据的编程模型的类型.System.Data //命名空间提供对表示 ADO.NET 

生成类中常用的引用命名空间

我们无论用哪个版本的VS开发工具,在新建立一个类文件之后,首先看到行就是一系列的Using引用代码.从学习的角度来讲,如果想真正深入理解和掌握DotNet开发框架,那么就应该清楚这些常用命名空间的意思以及他们的作用和意义,对我们以后深入学习有莫大的帮助.本人学习Fromwork4.0,总结如下:     1.命名空间是.NET程序在逻辑上的组织结构,而并非实际的物理结构,是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式.例如,在.NET中很多的基本类型都位于System命名空间,数据

背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 其它 通过 Windows.System.Profile 命名空间下的类获取信息 查找指定类或接口的所在程序集的所有子类和子接口 示例1.演示如何通过 Windows.System.Profile 命名空间下的类获取信息Information/ProfileInfo.xaml <Page x:Class="Windows10.Information.ProfileInfo" xmlns="htt