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