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

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

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里面最好的了,大家可以看着使用吧,,,

更多相关文章

  1. Android游戏引擎《Rokon》添加Rokon框架
  2. Android(安卓)开发程序员必备网站
  3. [置顶] 安卓实现序列化之Parcelable接口
  4. normandie为什么不碰videoview
  5. Android(安卓)studio导入Github的项目
  6. Android搭建opencv环境(超详细)
  7. Android(安卓)2D游戏引擎1
  8. Android(安卓)MVP开发模式 google 官方Mvp架构详解(转)
  9. android 静默安装,含获取各种应用信息方法,根据apk获取应用信息

随机推荐

  1. MySQL的最低硬件要求?
  2. Linux下Shell的for循环语句N种写法
  3. MySQL8.0.20 正式发行(GA)
  4. 如何知道你创建的MySQL索引是高效,合理的
  5. 由细嫩双手引起的IT环境生产事故
  6. MySQL如何管理客户端的连接?
  7. 分享两个Mysql在线全备和binlog日志备份
  8. MySQL如何管理客户端连接?线程池篇
  9. 2021-02-28:给定一个整型数组arr,和一个整
  10. MySQL的防火墙功能