Java文本语音转换组件JTTS发布(eSpeak封装)

               

下载地址:http://greenvm.googlecode.com/files/JTTSEngine.7z(含示例与源码,目前仅提供dll封装)

众所周知,所谓TTS即Text To Speech的英文缩写,也就是“从文本转换到语音”。

TTS技术的主要作用在于利用计算机合成人语,并将文字信息转化为语音信息进行播放。简单点说,TTS技术赋予了计算机“开口说人话”的能力。

作为一项历史悠久的计算机技术,TTS的应用领域可谓非常之广阔。不但可以用来阅读电子邮件,进行IVR系统(Interactive Voice Response)的语音提示,也可以很方便的嵌入到游戏或者其它类型的应用程序当中,增强用户体验。尤其重要的是,在某些无法够获得详细文字咨询的场合(譬如声讯台或者盲人服务),TTS技术具有其它技术无法替代的关键作用。

针对于TTS需求所要实现的功能,主要包含如下几个部分:

1、文本分析:对输入文本进行语言学分析,逐句进行词汇的、语法的和语义的分析,以确定句子的低层结构和每个字的音素的组成,包括文本的断句、字词切分、多音字的处理、数字的处理、缩略语的处理等。

2、语音合成:把处理好的文本所对应的单字或短语从语音合成库中提取,把语言学描述转化成言语波形。

3、韵律处理:用以控制语音合成系统所输出的语音的质量,一般可从清晰度、自然度和连贯性等方面进行主观评价。

但是,即便上述所讲从纯技术角度来说并不很难,开发TTS引擎仍然是件非常让人头痛的事情。

因为除去核心架构的开发之外,TTS应用还存在有大量针对具体文字、词组、固定语句的采样、归类、矫正的工作要做,否则就无法满足其“拟人”的最基本需求。从某种意义上讲,这些非常耗时的重复性工作,其本质似乎更贴近体力劳动,而非严格意义上的技术领域。因此,对于TTS引擎的制造者而言,所需付出的体力劳动强度,将远远超出脑力劳动所应付出的代价(如果不是这样,那些收费TTS引擎的开发商都要饿死了……)。

万幸的是,我们生活在一个越来越倾向开源的国际大环境下,即使你一字不动,一笔不写,也有数之不尽的现成轮子可供驱策,并不一定要花钱购买昂贵的商业引擎,也不必皓首穷经的自己从头写起。

比如本次发布的Java版TTS组件JTTS,就是基于著名开源TTS组件eSpeak封装而来。(吾辈并没狂妄(有瘾)到想要(能够)独立开发TTS引擎的境界,所以效法Google对eSpeak进行jni封装……)

关于eSpeak(eSpeak项目地址如下:http://espeak.sourceforge.net):

eSpeak是一款紧凑的开放源码软件的语音合成器,允许自行编辑与修改词库,算得上是一个性价比合理的开源TTS解决方案。它支持包括中文(含粤语)在内的多种语言(可惜标准中文词库与扩展词库都不全,发音也不太好听,想实用自己慢慢改吧,反正是开源的……),能够跨平台运行于Linux和Windows之上(需要分别编译)。值得一提的是,Google Android中所使用的TTS引擎,也是eSpeak。在如下地址:http://eyes-free.googlecode.com,可以下载到Android版的eSpeak封装项目。

关于jtts:

事实上,jtts只是将eSpeak进行简单封装后的“马甲引擎”(很奇怪,此前为什么没人发java版的封装,连php,python,ruby版的都有……),使用方法基本与eSpeak相同,不过具体实现却更为简单,也更方便对于C/C++不太熟悉的朋友们使用。

目前已封装eSpeak接口如下(未来有时间的话(目前业余以开发LGame为主),我会陆续添加更多的接口到jtts中,并逐渐扩展应用):

    static native int initialize(String path);    static native void synth(String text);    static native void setVoice(int gender, int age);    static native void setRate(int value);    static native int setWordgap(int value);    static native int setCapitals(int value);    static native void setVolume(int value);    static native void setPitch(int value);    static native String[] listVoiceNames();    static native void setVoiceByName(String voiceName);    static native void cancel();    static native boolean isPlaying();    static native void synchronize();    static native void terminate();    static native String info(); 

jtts基本使用示例如下:

JTTS jtts = Engine.getTTS();     jtts.setLanguage("zh");     jtts.speak("吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮。");     jtts.synchronize();     jtts.speak("我是未婚男青年,别管我要压岁钱。");

下面是一个基于jtts的示例截图:

00



下载地址:http://greenvm.googlecode.com/files/JTTSEngine.7z含示例与源码,目前仅提供dll封装

————————————

好吧,吾辈承认是想给看小说不能坚持看完全文的家伙们写个朗读工具……现在只是开端……

           

猜你喜欢

转载自blog.csdn.net/qq_44934536/article/details/89474773