Android中文语音合成(TTS)各家引擎对比

Android系统从1.6版本开始就支持TTS(Text-To-Speech),也就是我们所说的语音合成,不过遗憾的是系统默认的TTS引擎:Pico TTS,并不支持中文。

由此对于广大的炎黄子孙不得不安装我们自己的TTS引擎跟语言包,由此而拉开本文的篇章。

随着IPhone4S Siri的推出,让语音识别与语音合成TTS火了一把,同时也给国内的两家公司:科大讯飞和捷声华通,带来了很大的关注。这两家都是做中文语音识别与语音合成的。在这里只是讨论一下中文语音合成,至于中文语音识别,应该这两家也是提供了网络识别的类库的,就不在本篇讨论的范围了。

中文语音合成(TTS),可以分为两大类吧,一类是跟系统接口吻合的,一类是不与系统接口吻合的。

如果是跟系统接口吻合的都是把TTS引擎跟语言包数据分开。像系统默认的Pico TTS, SVOX, 科大讯飞等就是这样。它的好处应该是可以通过系统提供的接口去使用TTS功能,也便于做多国语言的拓展。但是这样的话,估计也会存在一些不便,例如,设置语音朗读的角色跟设置语速的快慢就得通过系统的接口去设置。

另外一类就是不跟系统吻合的,这种大部分都是会把引擎和语言包打包成一个apk包,然后安装完之后,通过指定的接口去调用其所提供的中文语音合成功能。

除了这两类方法之外,还有一些是直接把TTS功能做成共享库so文件,然后通过NDK去调用TTS的功能。这一种就比较好,因为不需要额外的再安装TTS引擎跟语言包,并且可以直接在应用里面设置朗读人是男声还是女声,语速等。像旧版本的科大讯飞就是以这种形式出现的,比较有代表的应用是“听书”或者“vBook”,大家可以找到这两个应该学习一下,因为NDK的接口不是很复杂,但是有可能会时不时蹦出“科大讯飞XXXX”的广告来,啊哈~~

这两类TTS引擎,各有所长吧,大家可以根据自己的需要去使用相应的TTS,不过各家TTS质量可是有很大的差别的哦~~~

下面来讨论一下菜单上有名的中文语音合成TTS,以及各自的差异。

先说第一类,跟系统接口吻合的。

一,讯飞语音TTS1.0

这个原来讯飞是没有这个与系统接口吻合的TTS的,原来是以动态库的形式的,最近才以这种apk的形式华丽登场,合成的效果清晰流畅,不生硬,英文也读得挺好的,听起来很舒服,,,

谁有需要可以去酷安网下载试用一下,记得下载语言包哦~. http://www.coolapk.com/apk-4526-com.iflytek.tts/

二,SVOX

开始没有讯飞的时候,用了一下SVOX,这个也做得很强大,N多的语言支持,中文不仅支持普通话,还支持广东话!不过有一些感觉吐字不是很清晰,听感不是很好,不过还好,因为大部分是可以听得懂的,下载地址:http://www.coolapk.com/apk-4192-com.svox.classic.langpack.cmn_chn_fem/


三,三星TTS

三星TTS,支持韩文,中文跟英文,每一字吐字还比较清晰,但是连起来的时候,不是很顺畅,大家可以自己感受一下。

安装apk,然后把SMT文件夹整个拷贝到SD卡的根目录

下载地址是:http://115.com/file/e7z2iliv


第二类是以独立的apk形式存在的主要在下面的两种

一,捷通华声

捷通华声也是中文语音做得比较好的,跟科大讯飞有得一拼。它的调用方法是使用java的反射机制来使用已经安装的TTS类。需要学习一下“捷通华声听书”才能大概知道怎么使用该TTS,不过也还好,因为通常学习过来不会太长,,,

里面可爱宝宝的声音比较好玩,但是好像用宝宝声音读英语会出问题

捷通华声TTS语音包下载地址:http://www.yingyong.so/app/3/1917.htm

捷通华声听书下载地址:http://www.yingyong.so/app/3/1916.htm (要使用捷通华声TTS,这个是必要的学习工具哦~~)


二,手说TTS

手说也是独立安装的一个TTS引擎,目前好像只支持中文语言。它接口公开,语音质量还行,呵呵,它的使用方法在例程里面有很详细的介绍,大家有兴趣可以看一下,

手说的主页:http://shoushuo.com/index.html


对于第一种作为切合系统接口的TTS中文引擎,安装之后,需要安装语言包,然后还得简单的设置一下才可以使用,方法如下:

设置-》语音输入与输出-》文字转语音设置,把对应的TTS引擎后面的勾,勾上,再在“默认引擎”里面设置你所需要的TTS,然后就可以聆听示例了。

而对于第二种,一般都会带有一个activity可以聆听示例的。


如果已经设置好系统默认的TTS引擎跟语言,调用系统TTS接口极其简单,就下面几句话:

初始化TTS引擎

TextToSpeech mTTS = new TextToSpeech(this, initListener);

文字到语音

mTTS.speak("中文TTS", TextToSpeech.QUEUE_FLUSH, null);

回收

mTTS.shutdown();

当然要写好还得考虑没有安装TTS引擎或语言包的情况,上面只是一个小小的示例。。。


最后,个人感觉科大讯飞的中文TTS,跟捷通华声的音色都比较自然,应该是目前所有的中文TTS里面最好的了,大家可以看着使用吧,,,


Yao.GUET 2012-02-03,转载请注明出处:http://blog.csdn.net/yao_guet/article/details/7231489


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐