Android TTS学习(补充)--我能说中文

来源:互联网 发布:网络电视机顶盒排行榜 编辑:程序博客网 时间:2024/06/08 16:13

 

一.基础知识

Android从1.6版本开始支持TextTo Speech,使用的是Pico语音合成引擎,但是只支持English、French、German、Italian和Spanish五大语言,暂时没有对中文提供支持。因此使用Android默认的TTSEngine是没法朗读中文的。

不过有开源项目eyes-free(http://code.google.com/p/eyes-free/,Android上的TTS功能应该也是基于这个开源项目提供的)除了提供Pico外,还把支持其他更多语言语音合成的另一个TTS引擎eSpeak也移植到了Android平台,其中就支持中文的语音合成。

因此在安装了eyes-free提供的TTS Service Extended的apk后,就可以在程序中使用eyes-free提供的TTSlibrary,并把TTSEngine设置为不是默认的Pico,而是eSpeak,就可以实现朗读中文了。不过经过测试,实际的效果还是很差的,只能说勉强可以朗读而已。

二.实例分析

下面我们就通过一个具体的例子来说明朗读中文的实现过程。

希望实现的效果和之前的类似:

 

图1实现效果图

上面一个输入框,点击“我说”按钮则朗读上面的文字内容。

首先我们要到eyes-free那下载需要的TTSlibrary的jar包(http://code.google.com/p/eyes-free/downloads/detail?name=TTS_library_stub_3.0_market.jar&can=2&q=)。

创建一个Android工程,工程名为NiHaoTTS,并且把下载的jar包放在assets文件夹下。右键点击工程,选择properties,JavaBuild Path,Libraries,AddJARs,往工程中添加进assets下的jar包,如下图所示:

图2 添加TTSlibrary jar包

其中main.xml文件很简单,如下所示:

 

Java文件的编写:

Java文件和之前的类似,只是因为使用了eyes-free的TTSAPI,而不是Android自带的TTSAPI,因此有些许改变。相关的API参考:http://eyes-free.googlecode.com/svn/trunk/documentation/tts/com/google/tts/package-summary.html,其中我们可以看到基本和Android的API()类似,其中一个明显的区别是创建TTS对象这里使用的是TextToSpeechBeta,而之前我们使用的是TextToSpeech


Java完整的代码为:

 

基本和我们之前学过的类似,其中不同的地方有:


1TTS的初始化回调函数多了一个版本号参数version,

publicvoidonInit(intstatus, intversion),

如果返回的版本号version等于-1,则表明还没有安装eyes-free提供的TTS Service Extended,提示进行下载和安装。

//提示安装所需的TTS数据

alertInstallEyesFreeTTSData();


主要就是弹出对话框进行提示,然后链接到eyes-free的网站进行下载对应的apk

//弹出对话框提示安装所需的TTS数据

privatevoidalertInstallEyesFreeTTSData()

{

BuilderalertInstall = newAlertDialog.Builder(this)

.setTitle("缺少需要的语音包")

.setMessage("下载安装缺少的语音包")

.setPositiveButton("确定",newDialogInterface.OnClickListener() {

@Override

publicvoidonClick(DialogInterface dialog, intwhich) {

//TODOAuto-generated method stub

//下载eyes-free的语音数据包

StringttsDataUrl ="http://eyes-free.googlecode.com/files/tts_3.1_market.apk";

UrittsDataUri = Uri.parse(ttsDataUrl);

IntentttsIntent = newIntent(Intent.ACTION_VIEW,ttsDataUri);

startActivity(ttsIntent);

}

})

.setNegativeButton("取消",newDialogInterface.OnClickListener() {

@Override

publicvoidonClick(DialogInterface dialog, intwhich) {

//TODOAuto-generated method stub

finish();

}

});

alertInstall.create().show();

}


下载完进行安装,然后重新启动程序就可以运行。

2)如果已经安装了,则可以进设置TTS引擎和需要合成的语言。

//设置TTS引擎,com.google.ttseSpeak支持的语言包含中文,使用Android系统默认的pico可以设置为com.svox.pico

mTTS.setEngineByPackageNameExtended("com.google.tts");

intresult = mTTS.setLanguage(Locale.CHINA);

//设置发音语言


其中如果设置为com.google.tts则表示使用eSpeak引擎,其包括对中文语音合成的支持。如果设置为com.svox.pico则表示使用Pico引擎,实际效果就是使用Android自带的Pico的效果,不过只支持5中语言,不支持中文。


除了这两块,其他和我们之前的程序基本一样。

然后就可以运行程序。因为模拟器开始时没有安装需要的eyes-freeTTSService Extendedapk,因此会弹出提示对话框,点击确定开始下载,下载完进行安装,如下图所示。

图3 安装eyes-free的TTS

安装完会在应用程序中看到对应的图标,并且在TTS的设置中也会增加eSpeakTTS一项,如下图所示:

图4 安装了eyes-free的TTS

安装完后就可以再次打开NiHaoTTS程序,这时会有个选择询问使用哪个TTS,选择第二项,然后就可以在输入框中输入中文来朗读了。

图5 选择TTS

不过经过简单测试就知道了,中文朗读的效果基本没法实际使用的。

 

文章对应的完整代码例子可以在这里下载:

http://download.csdn.net/source/3237373