这篇主要介绍下flite和在windows下的cygwin中编译,以及选择espeak的原因。
从flite的介绍中可以看到,它是festival-lite,即festival的精简版,相对于Festival结构过冗余,速度太慢,它是一款短小精悍,快速实时的TTS引擎。Flite设计中兼容Festival的voiees和models,Flite使用HRGS(heterogeneous relation graphs)作为它的基本的发音代表结构。而且合成器的大部分内容是数据,比如字典,单元数据库等(lexicons,unitdatabaseetc),实际的代码量相当的小。对于festival,大部分数据存在在外部文件中,依需要而下载,而对于Flite来说,因为它是非常小的一个引擎,所以允许核心数据在ROM中。从架构上看,Flite包括两个部分,核心库和声音,Flite库包含核心合成代码。Flite声音,这包含三个子部分(1)语一言模型:字串处理,韵律模型 textprocessing, prosodymodelsete(2)字典不fJ字符到声音规则 Lexieonandxette:tosoundrules(3)单元库和声音定义 unitdat汕 aseandvoicedefinition。
Flite是墓于diphone原理合成的,Diphone合成中所使用的是一种简约语音库,它包括一种语言中出现的所有diphone(汉语中叫做双因素),diphone的数量是基于这种语音的因素的数目,比如:西班牙语有大约800个diphone,德语有2500左右。在diphone合成中,每个dihone只有一个例子是包含在语音库里。在运行时,句子的韵律处理是基于这些最小单位的叠加,通过数字信号处理技术手段,诸如LPC、PSOLA或MBROA。由此而致的合成效果比单元必须系统的差一些,但是比共振峰好一点(espeak采用的方法)。由此的文本到语音的基本过程是,文字的预处理,从输入的文本到获得一个个的单词,界定出的标点符号等需停顿处,再由单词和diphone库词典,转换成相对应的diphone代表,该库由CMU语素库而来,支持超过175000个单词。再由录制好的diphone数据库对应的波形、韵律等属性,配合音高、音长等调节,最后采用PLOSA算法(基音同步叠加技术)拼接,确保平滑过渡。(来自参考【1】)
说了些基本的原理,对于大部分使用的人来说足够了。(一)中已经提到过其在Linux的编译使用了,只是在Windows下以为会比较顺利,结果出了些问题:首先是官方文档中提示VC6无法编译通过,但是源码中给的VS下的工程文件在VS2008和VS2010下都是没办法编译的,可能配置有问题,在网上找到VS2005下编译成功的,且提供了编译出静态库的方法(flite的版本是1.4的),地址是http://geoffair.net/projects/flite.htm,我没有环境,因此没有进一步测试。我的做法是在cygwin下,类似Linux的方法直接./configure make编译,然后想单独拿出来使用,需要cygwin.dll库,只要从cygwin中拷贝出来放到同一个文件夹中即可。至于使用mingw32的方法还不会。
没有进一步编程测试flite,其官方文档里面有测试的例子及API说明。决定后期还是使用espeak分析,简单来说其还在一直更新中,而且支持的语言种类多,合成简单,代码也比较少。问题是flite的语音库支持好,而espeak的语音自然流畅没有多大的提升空间了,只能说是优化了。想做成高端产品的话,科大讯飞、中科院的都是不错的选择。最后补充一点的是Android上的移植之类也是比较方便的,参考文献里面可以看看。
转载注明出处:http://blog.csdn.net/w7849516230/article/details/8307808 一起讨论:w.7849516230@163.com
参考
【1】基于嵌入式平台的语音合成技术的研究与实现
【2】中文文本转语音开源引擎EKHO http://my.oschina.net/hgneng/blog/68357