微软SAPI:让你的软件能说会道
微软SAPI:让你的软件能说会道
【IT168专稿】“没声音,再好的戏也出不来。”这虽然是一句广告,但是也说出了一个道理,我们所开发的软件,特别是一些多媒体软件,要是能够发出声音,能说会道,将为我们的软件增添不少光彩。同时,我们面临的是一个老龄化的社会,将会有越来越多的视力不太好的老年人成为我们的用户,开始使用我们的软件,如果我们的软件能说会道,可以用语音的方式提示用户进行操作,这将大大增加软件的可用性,从而获得用户的喜爱。
那么如何才能让我们的软件能说会道呢?别着急,微软有解决办法,用微软提供的SAPI就可以让我们的软件能说会道。
什么是SAPI?
软件中的语音技术主要包括两方面的内容,一个是语音识别(speech recognition) ,另外一个是语音合成(speech synthesis),也即是文本语音转换系统(TTS)。TTS系统使用合成语音合成文本字符串和文件到声音音频流。而语音识别系统则是转换人类的声音语音流到可读的文本字符串或者文件。这两个工作,都是通过各种语音引擎来完成的。微软所提供的SAPI (全称The Microsoft Speech API),正是在应用程序和语音引擎之间提供一个高级别的接口,它实现了所有必需的对各种语音引擎的实时的控制和管理等低级别的细节。语音引擎通过DDI层(设备驱动接口)和SAPI进行交互,应用程序通过API层和SAPI通信。通过使用这些API,我们可以快速开发在语音识别或语音合成方面应用程序。SAPI 应用程序编程接口(API)明显的减少了构建一个使用语音识别和文本语音转换的应用程序所需要的高层代码,使语音技术更加容易使用并且更加扩大了应用的范围。虽然现在SAPI不是业界标准,但是应用非常广泛。
SAPI包括以下组件对象(接口):
(1)Voice Commands API。对应用程序进行控制,一般用于语音识别系统中。识别某个命令后,会调用相关接口是应用程序完成对应的功能。如果程序想实现语音控制,必须使用此组对象。
(2)Voice Dictation API。听写输入,即语音识别接口。
(3)Voice Text API。完成从文字到语音的转换,即语音合成。
(4)Voice Telephone API。语音识别和语音合成综合运用到电话系统之上,利用此接口可以建立一个电话应答系统,甚至可以通过电话控制计算机。
(5)Audio Objects API。封装了计算机发音系统。
其中Voice Text API,就是微软TTS引擎的接口,通过它我们可以很容易地建立功能强大的文本语音程序,金山词霸的单词朗读功能就用到了这些API,而目前几乎所有的文本朗读工具都是用SAPI开发的。在这里,我们使用的主要就是Voice Text API。
安装SAPI SDK
要使用SAPI让我们的软件能说会道,我们首先需要下载并安装SAPI SDK。首先从微软的网站上下载开发包: http://www.microsoft.com/speech/download/sdk51
下载完毕后,首先安装SpeechSDK51.exe,然后安装中文语言补丁包SpeechSDK51LangPack,If 如果我们想将SAPI作为我们软件的一部分,随着我们的软件重新发布,我们还需要安装SpeechSDK51MSM.exe。
安装好SAPI SDK后,即可开始在VS2010中使用SAPI让我们的软件能说会道了。
创建项目,添加SAPI的引用
这里,我们将创建一个普通的WinForm程序,它可以利用TTS朗读文本,也可以将文本文件通过TTS转换为声音文件,真正是一个“能说会道”的软件。首先,我们在VS2010中创建一个WinForm程序,并且将窗体设计如下:
中的Text Box用于显示我们要阅读的文本,而Combo Box控件用于显示系统中已经安装的所有语音,用户可以从中选择当前TTS使用的语音。
要在我们的项目中使用SAPI,我们还需要给项目添加SAPI的引用。用VS2010提供的添加引用功能,在添加引用对话框的COM标签页面中找到Microsoft Speech Object Library,将其添加到项目中。
SAPI所提供的各个类都在名字空间SpeechLib之下,所以在代码中我们还需要使用using SpeechLib,表示我们将使用这个名字空间。这样我们就可以使用SAPI所提供的各种类来实现语音合成或者是语音识别了。
创建SpVoice对象,初始化SAPI
SAPI的TTS都是通过SpVoice对象来完成的。SpVoice类是支持语音合成(TTS)的核心类。通过SpVoice对象调用TTS引擎,从而实现朗读功能。 SpVoice类有以下主要属性:
• Voice:表示发音类型,相当于进行朗读的人,通常我们可以通过安装相应的语音引擎来增加相应的语音。
• Rate:语音朗读速度,取值范围为-10到+10。数值越大,速度越快。
• Volume:音量,取值范围为0到100。数值越大,音量越大。
SpVoice有以下主要方法:
• Speak():完成将文本信息转换为语音并按照指定的参数进行朗读,该方法有Text和Flags两个参数,分别指定要朗读的文本和朗读方式(同步或异步等)。
• GetVoices():获取系统中的语音,用于指定SpVoice的Voice属性。
• Pause():暂停使用该对象的所有朗读进程。该方法没有参数。
• Resume():恢复该对象所对应的被暂停的朗读进程。该方法没有参数。
所以我们在窗体的构造函数中,首先需要完成SpVoice对象的创建,然后才能使用这个对象来朗读文本。 因为系统中可能有多个语音可供选择,所以我们在创建窗体的时候,同时需要用一个Combo Box控件列举出系统中所有的语音,并且选中默认的第一个语音。当窗体创建后,用户可以在这个Combo Box选择自己喜欢的语音来朗读文本。
微软SAPI:让你的软件能说会道相关推荐
- speech开源框架_微软SAPI(The Microsoft Speech API):让你的软件能说会道
"没声音,再好的戏也出不来."这虽然是一句广告,但是也说出了一个道理,我们所开发的软件,特别是一些多媒体软件,要是能够发出声音,能说会道,将为我们的软件增添不少光彩.同时,我们面临 ...
- 基于微软 SAPI 的 TTS 程序实现
背景描述 前几年因工作的需要,想在网上找一款 TTS(Text To Speech) 软件,用于将文字转换为特定格式(ALaw.8000Hz.8bit)的语音文件,但实在找不到合适的.最后想着,干脆自 ...
- 关于在微软学生资源中心下载软件
在微软学生资源中心下载软件时,由于软件包太大,好多时候一时半会下不完,可是默认方式一旦下不完,则前面下的就作废了.想用迅雷下,可就是不行.后来在http://sez.jdjy.cn/ReadNews. ...
- 如何微软的CRM数据导入软件可以改善你的企业
如何微软的CRM数据导入软件可以改善你的企业 随着微软的CRM软件,您无需重新输入您已存储在其他应用程序的数据,例如一组存储在MS Office Outlook电子邮件MS Excel电子表格或MS ...
- 微软欢迎所有热爱开源软件的朋友们来投稿![征稿开放时间:2015年8月17日]
Azure是微软的云平台,不仅支持Windows服务器,也深爱着开源世界.通过与开源社区之间的合作, Azure支持了大量的开源软件和框架,涵盖了包括Linux 服务器,Docker, chef, M ...
- 微软将推出桌面虚拟化软件
微软上周五表示,既然收购Kidaro已成定局,它将利用Kidaro的虚拟化软件升级其广受欢迎的桌面优化包(Desktop Optimization Pack). Kidaro软件允许用户可以同时运行多 ...
- java库net2.0下载_visual j 2.0 下载-Visual J# 2.0(vjredist.exe)下载微软官方版-西西软件下载...
visual j 2.0 下载vjredist.exe是Microsoft Visual J# 2.0的可再发行组件包和简体语言包,并非用于运行使用其他 Java 语言开发工具编写的应用程序,micr ...
- 微软今发免费安全软件套装 开放下载
北京时间9月29日早间消息,据国外媒体报道,微软今天(9月29日)证实,该公司将于北京时间今天下午发布免费安全软件套装Security Essentials.Security Essentials开发 ...
- 微软下载历史windows版本软件
微软下载历史版本软件 以微软照片为例 先登录微软商店(英文版):https://www.microsoft.com/en-us/ 找到要下载的软件 的ProductId 如下图: 登录https:// ...
最新文章
- java中什么是空指针异常_java中空指针异常的问题,是怎么回事?请看代码
- CVPR 2022 | 阿里达摩院新技术,美体塑形一键就成
- Nginx的安装与部署
- 办公软件Office 2010下载安装介绍
- 计算机语言mod(m n),关于一段地址对齐的位运算代码的解释
- struts2.1.8,hibernate3.3.2,spring2.5 整合需要哪些jar包
- 引领三消新模式 《梦幻花园》商业化分析
- Spring Boot中的@SpringBootConfiguration注释
- c# uri.host_C#| Uri.HostNameType属性与示例
- 双层循环嵌套打印矩形 java
- 【体系结构】LGWR进程触发机制的理解
- 微软原版win10系统启动盘的制作
- java如何动态添加数组数据_Java动态数组添加数据的方法与应用示例
- windows电脑桌面透明便签待办分类怎么添加
- 【云原生】什么是 CI/CD ?| 软件交付中常见的问题
- 性别符号php,树也分男女?给6万棵杨树画上性别符号,原来是因为…
- 三点确定一个圆(输出圆心、弧长、圆心角、方向)
- 网易云linux字体太小,网易云音乐客户端和百度网盘在Deepin下字体显示太小的解决...
- 电机控制(1)直流电机的控制
- IDEA代码提示快捷键Ctrl+Space不生效问题
热门文章
- C#学习系列之未经处理的异常1——System.IO.FileNotFoundException
- CSS:纯css样式实现左右两侧文字中间填充点或线(仿账单报表样式),自适应
- 百度7天GNN学习-实战1(基于空手道俱乐部的两层GCN节点分类问题)
- python datetime 常用时间处理
- 2021年- 精心整理的 SpringBoot 常见面试题-【附详细答案】
- zed_wrapper
- Screen常见用法 Linux手动编译安装Screen
- java字符对比_Java 字符串比较
- Scrapy框架爬取中国裁判文书网案件数据
- 企业注销,为什么那么难?