zouxy09@qq.com
http://blog.csdn.net/zouxy09
一、 ( 对输入文本进行语言学分析(主要模拟人对自然语言的理解过程),逐句进行词汇的、语法的和语义的分析,以确定句子的低层结构和每个字的音素的组成,包括文本的断句、字词切分、多音字的处理、数字的处理、缩略语的处理等。使计算机对输入的文本能完全理解,并给出后两部分所需要的各种发音提示。
( 为合成语音规划出音段特征,如音高、音长和音强等,使合成语音能正确表达语意,听起来更加自然。
( 根据韵律建模的结果,把处理好的文本所对应的单字或短语的语音基元从语音合成库中提取,利用特定的语音合成技术对语音基元进行韵律特性的调整和修改,最终合成出符合要求的语音。
例如:你输入了:“今天吃饭了没有啊想让电脑读出来。那么我们会怎么做呢span>
(1)最简单的TTS:
就是电脑把每一个字分开,对于“我”字,就通过查询把“我”字对应的语音基元读出来,这样同样方式处理剩余的字,那么这句话就读出来了。但是很明显,这样读出来的语音肯定不够自然。
另外,每个字对应的语音基元哪里来呢苦力活,就是请人把每个汉字读出来,然后录下来。你会问,岂不要录制6千多个汉字的语音的是,汉语的音节很少,很多同音字。所以我们最多只是需要录制: 声母数×韵母数×4,(其实不是每个读音都有4声),这样算来,最多只需要录制几百个语音就可以了。当然,也有非人工的方法,如eSpeak使用共振峰合成方法,这可以使提供的语言文件非常小,但是缺点是不如采用基于人录音的语料库的声音平滑自然。另外,在合成的时候需要一张汉字对应拼音的对照表(实际上就是字典),汉字拼音输入法也依赖这张表。
上面单字朗读做出来的TTS效果也还可以,特别是朗读一些没有特别含义的如姓名,家庭住址,股票代码等汉语句子,听起来足够清晰。这要归功于我们伟大的母语通常都是单音节,从古代的时候开始,每个汉字就有一个词,表达一个意思。而且汉字不同于英语,英语里面很多连读,音调节奏变化很大,汉字就简单多了。
当然,你仍然要处理一些细节,比如多音字,把“银行”读成“yin xing”就不对了;再比如,标点符 的处理,数字、字母的处理。
(2)稍微复杂点的TTS:
如果要把TTS的效果弄好一点,再来点力气活,把基本的词录制成语音,如常见的两字词,四字成语等,再做个词库和语音库的对照表,每次需要合成时到词库里面找。这样以词为单位,比以字为单位,效果自然是好多了。当然,这就涉及到分词的技术,要把复杂的句子断成合理的词序列。另外,为了追求更好的效果,还有进化到以常用句子为单位来录音了。当然,这就得需要更大的工作量了,因为你需要读单字、词、成语、句子等等。而且语音数据也会庞大起来。
再来说说文本的标识,对于复杂文本,某些内容程序没有办法处理,需要标识出来。比如,单纯的数字“128”,是应该念成“一百二十八”还是“一二八”办法通常是加入XML标注,如微软的TTS:”
二、 目前,TTS还是比较多的,有商业的,也有开源的,当然,前者的性能肯定要好一些,但对于业余非专业应用来说,开源的就足够了。下面就介绍下如何在ubuntu 12.04下安装和编程Ekho这个TTS。
http://www.eguidedog.net/ekho.php
静态库等多种方式调用,原生支持
http://www.eguidedog.net/ekho.php 解压后看到, ( ( ( ( ( ( ( ( 然后就是
#apt-get install libsndfile1-dev libpulse-dev libncurses5-dev libgtk2.0-dev libvorbis-dev libmp3lame-dev
如果需要阅读英语,则需要配置编译 $ ./configure
$ make
$ sudo make install
安装后,
# ekho ‘123’
成功的话,系统会把“一百二十三”读出来。
编程需在源代码目录下,也就是 编程代码: /* ekhotest.cpp */
#include “config.h” // this file is generated when building Ekho
#include “ekho.h”
using namespace ekho;
int main(int argc, char **argv)
{
Ekho wong(“Mandarin”);
你好,欢迎! return 0;
}
编译的话,因为依赖的库比较多,所以最好在该目录下写个 g++ ekhotest.cpp libekho.a lib/libSoundTouch.a lib/libFestival.a lib/libestools.a lib/libeststring.a lib/libestbase.a -I. -Iutfcpp/source -Isonic -lpthread -lvorbisenc -lvorbis -lm -logg -lmp3lame -lsndfile -lncurses `pkg-config –libs libpulse-simple` `pkg-config –cflags libpulse-simple`
更改运行属性:
#chmod 777 complize.sh
然后:
#./complize.sh
就生成运行
个人感觉上面的编译过程有点乱,为了让 先新建一个文件夹 自己的编程文件 CXX=g++
CFLAGS=-Iinclude -Iinclude/sonic -Iinclude/speech_tools -Iinclude/soundtouch -Iinclude/festival -Iinclude/utf8 `pkg-config –cflags libpulse-simple`
LIBS=-lpthread -lvorbisenc -lvorbis -lm -logg -lmp3lame -lsndfile -lncurses `pkg-config –libs libpulse-simple`
SLIBS=lib/libekho.a lib/libSoundTouch.a lib/libFestival.a lib/libestools.a lib/libeststring.a lib/libestbase.a
OBJECTS=ekhotest.o
TARGETS=testekho
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!