使用最新的“huihui中文语音库”实现文本转语音功能
最近一个web项目中,需要进行语音播报,将动态的文字转换为语音(TTS)存为WAV文件后通过web播放给用户。选择了微软所提供的SAPI (The Microsoft Speech API),只需要几行代码即可实现。主要的问题是选择一个好的中文语音库,让播放的声音更贴近真人。各个中文版操作系统自带的中文语音包如下(通过控制面板的语音属性进行查看):
Windows 2000/XP/Vista:无
Windows 7中文版、Windows 2008中文版:Microsoft lili
Windows 8中文版、Windows 2012中文版:Microsoft Huihui Desktop
另外,还有很多厂商推出了自己的语音包,也有不少中文的,通过对比,发现Win8中文版开始提供的"Microsoft Huihui Desktop”(以下简称桌面版Huihui)效果最好。如果发布的web服务器是win8中文版或者server2012中文版,则可以直接通过代码使用这个语音包,但是对于其他操作系统或者是非中文的操作系统,想要使用这个语音包,就有不少问题了。主要有三个问题:
1.没有现成的语音包
实际上,微软并没有提供独立语音库下载安装,也就是说,并没有桌面版Huihui的语音包供安装。
解决方法:微软在另一套语音引擎中(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的播放效果。
注意:这个安装包执行一下就消失了,没有需要用户交互的操作界面,不用担心,已经安装好了。
2.语音引擎不一致
语音播放需要语音引擎的支持。实际上微软的语音引擎系统已经发展了好几代,从SAPI4、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,进入注册表,将
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server
- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech Server
导出。然后用记事本打开这两个注册表文件,
- 将全部“Speech Server\v11.0”替换为“Speech”
- 将全部“Speech Server\\v11.0”替换为“Speech”
保存后,导入到注册表,如果提示错误,也没关系。
注意: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,详细可参考。
参考:
TTS正确使用Microsoft Speech Platform 11发音朗读的方法
http://www.xqbase.com/xqwizard/help_tts.htm
使用最新的“huihui中文语音库”实现文本转语音功能的更多相关文章
- py库:文本转为语音(pywin32、pyttsx)
http://blog.csdn.net/marksinoberg/article/details/52137547 Python 文本转语音 文本转为语音(使用Speech API) 需要安装 py ...
- 主攻ASP.NET.4.5.1 MVC5.0之重生:Web项目语音朗读网页文本,简单语音提示浏览状态
第一步 添加SpeechLib.dll 下载SpeechLib.dll: 在项目中并且引用DLL using SpeechLib; using System.Threading; 第二步 调用并使用 ...
- TIMIT语音库
TIMIT语音库有着准确的音素标注,因此可以应用于语音分割性能评价,同时该数据库又含有几百个说话人语音,所以也是评价说话人识别常用的权威语音库,但该语音库的商业用途是要花钱买的.下面的资源来自与MIT ...
- 【VC++技术杂谈004】使用微软TTS语音引擎实现文本朗读
本文主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件. 1.语音引擎及语音库的安装 TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把文本转化为语 ...
- c#文本转语音以及语音阅读小实例
c#实现语音阅读以及文本转语音文件是基于c#的一个类库(SpeechSynthesizer )实现的,使用该类必须要添加引用using System.Speech.Synthesis;直接是无法添加引 ...
- C#中的文本到语音
本演示说明了如何使用c#.net Windows Forms应用程序中的system.speech库将文本转换为语音.Microsoft .NET框架提供System.Speech.Synthesis ...
- 微信小程序:将中文语音直接转化成英文语音
作者:瘟小驹 文章来源<微信小程序个人开发全过程> 准备工作: 准备工具:Eclipse.FileZilla.微信开发者工具.一个配置好SSL证书(https)的有域名的服务器 所需 ...
- 对linux安装中文字体库
问题描述: linux提供的web服务,能在网页展示中文,下载pdf出现中文无法读取!,甚是迷瞪,经分析展示是本地浏览器的解析,下载pdf是服务器端的响应,因此要在服务端安装对应的字体库就可以解决此问 ...
- python3 使用语音库pyttsx3
python3 使用语音库pyttsx3 环境linux+python3.6 sudo pip install pyttsx3 sudo apt-get install espeak 代码实例 imp ...
随机推荐
- 对MySql查询缓存及SQL Server过程缓存的理解及总结
一.MySql的Query Cache 1.Query Cache MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集.MySql在实现Query Cache的 ...
- Lingo 做线性规划 - Revenue Management
Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...
- 我的fckeditor实践
一开始我不懂这个ConnectorServlet是何用处,后来发现是专门用于文件上传的,因为fckeditor默认是不支持这个功能的. ConnectorServlet: /* * FCKeditor ...
- html中的图片直接使用字符串代替
最近来了一个网页,里面有图片,但是却没有引用外部的图片资源,很好奇.查看代码后发现,里面的图片是使用base64编码后的字符串代替了,这个叫做Data URI scheme. Data URI sch ...
- cookie入门与学习
据我对cookie诞生背景的了解,cookie是由网景公司创建的,目的就是将用户的数据储存在客户端上.伴随的HTML5的出现,现在又有另外一个解决数据离线储存的方案,就是HTML5中的Web stor ...
- 简单理解ECMAScript2015中的Promise
ECMAScript6中新增了Promise对象, 所谓Promise对象,即代表着一个还未完成,但将来某时会完成的操作(通常是异步操作).使用Promise对象,我们就可以避免陷入函数层层嵌套的‘回 ...
- iframe父子页面调用小结
子页面调用父页面 $('#Id', window.parent.document); //调用父页面元素 window.parent.func1(); //调用父页面方法 (子页面同理,需将js方 ...
- MySQL安全性语言
文章为作者原创,未经许可,禁止转载. -Sun Yat-sen University 冯兴伟 实验2:安全性语言 安全性实验包含两个实验项目,其中1个为必修,1个为选修.自主存取控制实验为设计型 ...
- 如何在servlet取得spring beans (autowired)(转)
在应用中一般普通的JavaPojo都是由Spring来管理的,所以使用autowire注解来进行注入不会产生问题,但是有两个东西是例外的,一个是 Filter,一个是Servlet,这两样东西都是由S ...
- docker使用GPU
1.物理机安装显卡驱动 2.安装nvidia-docker wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download ...