• (一)SAPI简述


    SAPI,软件中的语音技术包括两方面的内容,一个是语音识别(speech recognition) 和语音合成(speech synthesis)。这两个技术都需要语音引擎的支持。

    下面我们来了解下基于Windows语音引擎。我以Windows7为例,Windows8及以上版本相同。

    clip_image002

    首先我们从控制面板中找到屏幕讲述人,并打开设置选项。

    clip_image004

    从这里我们可以了解到系统所安装的语音识别引擎和语音合成引擎所使用的语音库。计算机的屏幕讲述人使用的就是语音合成引擎。

    在语音识别选项卡中:

    clip_image005

    如果你安装的简体中文本的操作系统,默认只有一个语音识别引擎为简体中文,那么在程序开发时你也只能用于识别普通话,怎样添加对于其它语言的识别。你需要升级计算机为旗舰版,然后在Windows Update更新中安装其它语言包。语言包中就包括该语言的识别引擎。安装完成后如上图所示就多出其它语音识别引擎。

    对于语音识别引擎的训练也是很有必要的,因为我们的应用程序最终使用的就是系统的识别引擎,那么识别准确率除了我们写代码时候需要处理,更多也要在于平时对于语音识别引擎的训练。据我不完全测试,完成了基本的语音训练后,在自己写的程序中识别率还是很高的。如果普通话标准的话,识别率在95%-98%左右。当然要识别的精准,还需要代码上的优化。

    clip_image007

    在语音合成选项卡中(即文本到语音转换)

    clip_image008

    该选项卡用于配置语音合成引擎所需的语音包。

    Windows7 默认就只有Anna和Lili语音包,下面的Hui和Liang是我安装的第三方的语音包。后面会给出所有第三方语音包的下载地址(包括中文、英文、日文和韩文)。

    之所以用第三方语音包,因为系统自带的语音包声音比较生硬,第三方语音包更接近自然语音。

    上述仅仅是一些开发前的准备工作或者注意事项。下面来介绍SAPI。

    SAPI微软最早以SDK开发包的形式发布,之前用的多的是C++的SDK包。后来就集成到了.NET Framework中,以Framework4.0为例:

    clip_image010

    注意:请使用英文本的文档,中文本后面没有描述信息。

    语音识别和语音合成在System.Speech的命名空间下。

    该命名空间只有5个子命名空间,基本微软帮我们屏蔽了所有的底层实现。我们只需要从应用角度来组织我们的代码就行了。后续文章中会给出详细的应用案例。

    System.Speech.AudioFormat

    该命名空间下定义了音频输出格式。如果我们需要把合成的语音保存为wav音频文件可能需要用到里面的内容。

    System.Speech.Recognition

    System.Speech.Recognition.SrgsGrammar

    这两个命名空间依据名称,我们可以推测是关于语音识别的。

    System.Speech.Recognition:该命名空间下定义了语音识别引擎和和一些初始化参数所用到的信息类。

    System.Speech.Recognition.SrgsGrammar:该命名空间下定义了有关语音识别引擎所用到语法规则的类,也即SRGS。SRGS是指导构建语音识别声学模型的文法。简单来说就是声学建模的一种文法规则,一般我们很少用到,该规则也是由W3C来规范的。包括我们语音合成中的语音库的建模标准都是由W3C来规范的。不过这个和我们开发应用没有太大关系。

    System.Speech.Synthesis

    System.Speech.Synthesis.TtsEngine

    这两个命名空间是关于语音合成。

    语音包下载地址:

    http://yunpan.cn/lk/QT8GktHZwFU8Q

    提取码:7978

    360网盘历经过今年最NB的净网行动总算挺了过来,共享功能已经恢复了,如果不能下载请留言。文件列表如下:

    clip_image011

    压缩包的请解压缩后双击Setup.exe安装。

    每个压缩包中有一个类似:

    clip_image012

    这样压缩文件,这是破解补丁包,因为第三方语音包中不付费的话有一句广告,比较恶心,所有的补丁文件全在压缩包内。解压后得到一个dll文件。

    把dll文件放到安装目录下lib文件下替换同名文件就行了,这样就过滤掉广告了。

    结束语:这是一篇新手教程。有些点讲的可能会比较细,有些点也有可能被忽视,不足的地方请留言。

  • 相关阅读:
    C#分割字符串
    Android中this、super的区别
    Android activity跳转方式
    Android中的各种单位
    Android布局方式_RelativeLayout
    Parallelism , Partitioner
    编译hadoop,spark遇到的问题总结
    scala,spark练习题提高
    元组复杂例子
    sparksql 操作hive
  • 原文地址:https://www.cnblogs.com/UltimateAvalon/p/3780711.html
Copyright © 2020-2023  润新知