最近一个web项目中,须要进行语音播报,将动态的文字转换为语音(TTS)存为WAV文件后经过web播放给用户。选择了微软所提供的SAPI (The Microsoft Speech API),只须要几行代码便可实现。主要的问题是选择一个好的中文语音库,让播放的声音更贴近真人。各个中文版操做系统自带的中文语音包以下(经过控制面板的语音属性进行查看):web
Windows 2000/XP/Vista:无api
Windows 7中文版、Windows 2008中文版:Microsoft lili服务器
Windows 8中文版、Windows 2012中文版:Microsoft Huihui Desktopui
另外,还有不少厂商推出了本身的语音包,也有很多中文的,经过对比,发现Win8中文版开始提供的"Microsoft Huihui Desktop”(如下简称桌面版Huihui)效果最好。若是发布的web服务器是win8中文版或者server2012中文版,则能够直接经过代码使用这个语音包,可是对于其余操做系统或者是非中文的操做系统,想要使用这个语音包,就有很多问题了。主要有三个问题:操作系统
1.没有现成的语音包.net
实际上,微软并无提供独立语音库下载安装,也就是说,并无桌面版Huihui的语音包供安装。orm
解决方法:微软在另外一套语音引擎中(Microsoft Speech Platform),也提供了不少语音包,其中一个"Microsoft Server Speech Text to Speech Voice (zh-CN, HuiHui)”(如下简称服务器版Huihui),这其实和桌面版Huihui在发音方面,彻底一致(下载Microsoft Speech Platform - Runtime Languages (Version 11)其中的MSSpeech_TTS_zh-CN_HuiHui.msi安装便可)。可使用这个语音包,来实现桌面版Huihui的播放效果。server
注意:这个安装包执行一下就消失了,没有须要用户交互的操做界面,不用担忧,已经安装好了。htm
2.语音引擎不一致blog
语音播放须要语音引擎的支持。实际上微软的语音引擎系统已经发展了好几代,从SAPI四、SAPI5(最后一版是5.4)发展到目前的Microsoft Speech Platform 11。对于SAPI,Windows XP内置了 TTS 语音引擎SAPI5.1,Vista、Server 2008内置SAPI5.3,Win7内置SAPI5.4,无需安装。而Microsoft Speech Platform 11目前没有内置于操做系统,须要下载Microsoft Speech Platform - Runtime (Version 11)安装来支持语音包,注意里面有x86和x64版,应该根据服务器的操做系统版原本肯定安装。
3.修改注册表
实际上经过上述两个步骤安装语音引擎和语音包,有两个问题:一是没法在控制面板中看到安装好的语音包(32位系统C:\Windows\System32\Speech\SpeechUX\sapi.cpl,64位系统经过C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl才能看到),二是使用SAPI的GetVoices()方法,也获取不到这个语音包,也就没法继续执行转换语音的功能。
这里的主要问题是这个语音包是供Microsoft Speech Platform 11使用的,其语音包的注册信息,和SAPI支持的语音包注册信息不在一个位置(主要是注册表信息),致使了控制面板和SAPI的代码没法获取到它支持的语音。查阅了不少国外的资料,发现能够经过修改注册表或修改服务器版Huihui语音包的安装程序来解决这个问题。
修改注册表法:
若是已经安装了原版服务器版Huihui,进入注册表,将
导出。而后用记事本打开这两个注册表文件,
保存后,导入到注册表,若是提示错误,也不要紧。
注意:32位系统只有第一个注册表位置。64位系统全都须要导出。
修改安装包法:
(1)安装orca软件
这是一个修改安装程序(msi)的软件。下载安装好后打开软件便可。
(2)修改语音包
orca-file-open,打开原版语音包,定位到Tables的Registry,以下图,将全部Speech Server\v11.0修改成Speech,而后File-Save便可。保存后的就是需改的语音包。
我修改好了一个,提供了下载。
总结:
安装语音引擎Microsoft Speech Platform 11。
安装修改好的语音包MSSpeech_TTS_zh-CN_HuiHui.msi/或安装原版语音包而后修改注册表。
本文只介绍若是用SAPI引擎(命名空间System.Speech)来利用最新语音库,实际上,Microsoft Speech Platform 11这个语音引擎(命名空间Microsoft.Speech)具备更增强大的功能,好比支持VoiceXML,详细可参考。
参考: