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完整的代码为:
基本和我们之前学过的类似,其中不同的地方有:
(1)TTS的初始化回调函数多了一个版本号参数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.tts即eSpeak支持的语言包含中文,使用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-free的TTSService Extended的apk,因此会弹出提示对话框,点击确定开始下载,下载完进行安装,如下图所示。
图3 安装eyes-free的TTS
安装完会在应用程序中看到对应的图标,并且在TTS的设置中也会增加eSpeakTTS一项,如下图所示:
图4 安装了eyes-free的TTS
安装完后就可以再次打开NiHaoTTS程序,这时会有个选择询问使用哪个TTS,选择第二项,然后就可以在输入框中输入中文来朗读了。
图5 选择TTS
不过经过简单测试就知道了,中文朗读的效果基本没法实际使用的。
文章对应的完整代码例子可以在这里下载:
http://download.csdn.net/source/3237373
- Android TTS学习(补充)--我能说中文
- Android TTS学习(补充)--我能说中文
- Android TTS说中文
- android 示例 TtsEngine 我能说中文
- 借助“手说”免费应用软件,实现中文朗读(Android TTS实践)
- Android TTS学习--使用中文语音
- Android中文语音合成(TTS)
- Android 通过手说tts中文语音包实现中文朗读
- speak.vbs 调用TTS,说中文
- .NET 4.0 C# 调用TTS 说中文
- .NET 3.5 C# 调用TTS 说中文
- android 语音播报(通过手说tts 实现中文语音播报)
- 我能说什么
- Android TTS 学习
- Android中文TTS语音合成
- Android中文语音合成(TTS)各家引擎对比
- Android中文语音合成(TTS)各家引擎对比
- Android中文语音合成(TTS)各家引擎对比
- flex AS中TabNavigator子项后报超出索引 commitProperties解决
- 生产者和消费者
- I'm back
- 判断页面及其中的iframe是否加载完毕
- PHP知识积累
- Android TTS学习(补充)--我能说中文
- 主备切换之State模式实现
- POJ 1087:A Plug for UNIX(最大流)
- PHP输出99乘法表
- 使用Recordset对象
- 设计模式 笔记
- [笔记] 用C++通过JavaVM调用jar包
- ssis用法
- 关于加入了拦截器后无法Action无法获得值的问题