语音播报功能
TTS开发过程
在本次设计所做的语音播报就是文字转为语音(TTS)。因为智能卡识别程序部分是用Java创建项目,所以准备继续采用Java作为TTS的开发语言。在网上查找了一些实现案例,最后得出的结果是:
第一,开源的代码特别少,并且许多是需要收取费用的。因为开发者是需要使用他们的SDK和API接口的。提供的的案例也存在残缺,对于初学者来说需要大量时间,开发周期具有不确定性,暂做备选项。
第二,Linux版本支持的TTS大多是些语音工具,且采用C语言框架较多。例如Espeak,Festival等,基于Java开发的程序太稀有了。。。
第三,在查找资料过程中,我发现了一个jar文件——Jacob,能够实现在本地平台运行。可当用Remote运行时,Linux出现了致命性的问题——Jacob不支持Lunix系统(Jacob调用win的COM接口)。只能够暂时放弃了,也作为备选项。如果时间来得及,为树莓派安装win10系统,重新给读卡器重新配置驱动,或许是另一个不错的尝试。
吸取前面的经验后,接着在网上查询同时满足以下几个条件:开源,Java开发,支持跨平台的第三方Jar文件。最终发现这几个条件单独出来都很好找,全部满足的几乎在网上绝迹。再做最后的尝试——在国内外开源网站进行搜索,寻找适合的开源项目。否则选用科大讯飞提供的技术文档开发TTS。
最终在开源网站发现了一个开源项目基于Ekho(余音)开发。研究了几个jar文件的全部class文件后,确定了我可能用到的方法,进行实体化并创建了实体。编译运行文件却显示路径错误。余音软件的实现流程可能需要了解一下,接着我把Ekho官网浏览了一遍,大致实现过程是:
1.获取输入
2.从Ekho的dict字典找到对应的每个字符的语音符号
3.用Sndfile(用于读写各种音频格式的库)从wav语音data文件中根据语音符号获取PCM音频数据
4.连接所有字符的PCM数据
5.用声触觉改变音高、速度
6.用脉冲音频播放音频数据,或者用Sndfile保存到WAV,用LAME(一个MP3库)播放MP3,用Vorbis(处理OGG文件格式的库)播放ogg
下面是开发者指南网址:www.eguidedog.net/doc/doc_dev…
最后在增加了数据文件(单音语音、字典)并调用了其中几个简单的方法实现了语音播报的功能。