语音合成,是将人类语音用人工的方式所产生。若是将电脑系统用在语音合成上,则称为语音合成器,而语音合成器可以用软/硬件所实现。文字转语音(text-to-speech,TTS)系统则是将一般语言的文字转换为语音。
java speech api(jsapi)提供了2种技术的规范:语音识别(声音到文字)、语音合成(文字到声音)。
freetts是一个jsapi的实现,但只实现了语音合成功能。
freetts有一些内建语音,比如"kevin16"。
如果需要语音识别功能,可以考虑 Sphinx-4
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目前貌似只支持朗读英语,不支持朗读中文。如果要朗读中文的话,貌似可以考虑 Ekho(余音)。
使用freetts朗读一段英语很简单,在初始化完Synthesizer以后,调用下面这个API即可:
Synthesizer.speakPlainText(String, SpeakableListener)
2.报时程序
执行JSAPIClock,可以用英语报出当前时间,效果如图

类图如下

3.伪人机对话
从 http://fivedots.coe.psu.ac.th/~ad/jg/ch105/index.html下载来的,他的网站上还可下载pdf文件,里面详细介绍了类的设计。
执行ProfBob,你输入一句话或者单词,教授会用英语应答你,效果如图

类图如下

4.附件可以下载我整理好的可运行的2个示例程序。
测试通过环境
win7 32bit
jdk 1.7.0_60 32bit