0.概述
语音合成,是将人类语音用人工的方式所产生。若是将电脑系统用在语音合成上,则称为语音合成器,而语音合成器可以用软/硬件所实现。文字转语音(text-to-speech,TTS)系统则是将一般语言的文字转换为语音。
java speech api(jsapi)提供了2种技术的规范:语音识别(声音到文字)、语音合成(文字到声音)。
[url=http://freetts.sourceforge.net/]freetts[/url]是一个jsapi的实现,但只实现了语音合成功能。
freetts有一些内建语音,比如"kevin16"。
如果需要语音识别功能,可以考虑[url=http://cmusphinx.sourceforge.net/sphinx4/]Sphinx-4[/url]
1.下载安装freetts
去官网下载即可,本文写作时最新版是1.2.2,不过是2009更新的,最近都好久没有更新了。
去下载freetts-1.2.2-bin.zip即可。下载下来lib目录下有许多jar包,都是需要的,把他们加入classpath就能用了。还有一个jsapi.jar需要双击jsapi.exe来获得。
需要jar包如下
cmudict04.jar
cmulex.jar
cmutimelex.jar
cmu_time_awb.jar
cmu_us_kal.jar
en_us.jar
freetts-jsapi10.jar
freetts.jar
jsapi.jar
mbrola.jar
关于speech.properties的安装,我试了但是不行,老报错。不过没关系,我们可以绕过这个问题,直接改用freetts-jsapi10.jar里面的api就可以。
FreeTTSEngineCentral central = new FreeTTSEngineCentral();
EngineList list = central.createEngineList(desc);
详情参考附件里的程序代码。
freetts目前貌似只支持朗读英语,不支持朗读中文。如果要朗读中文的话,貌似可以考虑[url=http://www.eguidedog.net/ekho_cn.php]Ekho(余音)[/url]。
使用freetts朗读一段英语很简单,在初始化完Synthesizer以后,调用下面这个API即可:
Synthesizer.speakPlainText(String, SpeakableListener)
2.报时程序
执行JSAPIClock,可以用英语报出当前时间,效果如图
[img]http://dl2.iteye.com/upload/attachment/0105/1452/6187bba0-4eef-335c-872e-81de28b3b063.png[/img]
类图如下
[img]http://dl2.iteye.com/upload/attachment/0105/1457/b6ad8842-abd5-3bcd-9a4b-7d3d66204783.png[/img]
3.伪人机对话
从[url]http://fivedots.coe.psu.ac.th/~ad/jg/ch105/index.html[/url]下载来的,他的网站上还可下载pdf文件,里面详细介绍了类的设计。
执行ProfBob,你输入一句话或者单词,教授会用英语应答你,效果如图
[img]http://dl2.iteye.com/upload/attachment/0105/1455/a03fa8ed-dd22-3476-9cda-b883906c8c3e.png[/img]
类图如下
[img]http://dl2.iteye.com/upload/attachment/0105/1460/b954976c-0696-39da-b81c-4e1aeeda7a08.png[/img]
4.附件可以下载我整理好的可运行的2个示例程序。
测试通过环境
win7 32bit
jdk 1.7.0_60 32bit