Android TTS说中文
2016-03-12 10:38
453 查看
昨天在家看一本有关物联网开发的Android书籍时,看到了用TTS说中文的小例子,觉得蛮好的,就写篇学习记录吧! Android虽然很早版本就开始支持TTS(Text To Speech) ,English 、 French 、 German 、 Italian 和 Spanish 五大语言, 居然没有几千年历史的汉语。好在开源框架http://code.google.com/p/eyes-free/提供了中文TTS功能,所以我们用它来实现中文朗读。
//http://code.google.com/p/eyes-free/ //开始之前记录在项目中添加相关jar包:TTS_library_stub_3.0_market.jar,我也是在网上下载的。 public class MainActivity extends Activity implements OnInitListener { private EditText edt; private Button speak; private TextToSpeechBeta mTts; private static final int CODE = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); checkTTS(); initViewsAndEvents(); } /** * 初始化控件及监听事件 */ private void initViewsAndEvents() { edt = (EditText) findViewById(R.id.edt); speak = (Button) findViewById(R.id.speak); speak.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String edtStr = edt.getText().toString().trim(); if (!TextUtils.isEmpty(edtStr)) { // 朗读我们输入的文字 mTts.speak(edtStr, TextToSpeechBeta.QUEUE_ADD, null); } } }); } /** * 检查TTS是否可以使用 */ private void checkTTS() { Intent in = new Intent(); in.setAction(TextToSpeechBeta.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(in, CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CODE) { switch (resultCode) { case TextToSpeechBeta.Engine.CHECK_VOICE_DATA_PASS: Toast.makeText(this, "恭喜您,TTS可用", Toast.LENGTH_SHORT).show(); mTts = new TextToSpeechBeta(this, this); break; case TextToSpeechBeta.Engine.CHECK_VOICE_DATA_BAD_DATA:// 发音数据已经损坏 case TextToSpeechBeta.Engine.CHECK_VOICE_DATA_MISSING_DATA: // 需要的语音数据已丢失 case TextToSpeechBeta.Engine.CHECK_VOICE_DATA_MISSING_VOLUME: // 发音数据丢失 // 下载TTS对应的资源 Intent dataIntent = new Intent( TextToSpeechBeta.Engine.ACTION_INSTALL_TTS_DATA); startActivity(dataIntent); break; case TextToSpeechBeta.Engine.CHECK_VOICE_DATA_FAIL: // 发音失败 break; } } } @Override public void onInit(int arg0, int arg1) { if (arg1 == -1) { // 提示安装所需要的数据 installTTS(); } else { // 完成TTS的初始化 if (arg0 == TextToSpeechBeta.SUCCESS) { // 设置TTS引擎,com.google.tts即eSpeak支持的语言包含中文 mTts.setEngineByPackageNameExtended("com.google.tts"); // 设置发音语言Locale.CHINA int result = mTts.setLanguage(Locale.CHINA); // 检查语言是否可用 if (result == TextToSpeechBeta.LANG_MISSING_DATA || result == TextToSpeechBeta.LANG_NOT_SUPPORTED) { speak.setEnabled(false); Toast.makeText(this, "语言功能不可用", Toast.LENGTH_SHORT).show(); } else { speak.setEnabled(true); } } else { Toast.makeText(this, "TTS初始化失败", Toast.LENGTH_SHORT).show(); } } } /** * 安装语音相关资源包 */ private void installTTS() { Builder alertInstall = new AlertDialog.Builder(this) .setTitle("缺少语音包") .setMessage("下载语音包") .setPositiveButton("去下载", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 下载eyes-free的语音数据包 String ttsDataUrl = "http://eyes-free.googlecode.com/files/tts_3.1_market.apk"; Uri ttsDataUri = Uri.parse(ttsDataUrl); Intent ttsIntent = new Intent( Intent.ACTION_VIEW, ttsDataUri); startActivity(ttsIntent); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); alertInstall.create().show(); } }
//布局文件很简单 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/edt" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:gravity="left|center" android:hint="请输入您想说的话!" android:textSize="15sp" /> <Button android:id="@+id/speak" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:hint="开始讲话" android:textSize="16sp" /> </LinearLayout>
相关文章推荐
- 我的Android进阶之旅------>Android自定义View实现带数字的进度条
- 安卓虚拟机启动后报错: 类似 SDK Manager] Error: Error parsing .....devices.xml 解决方案
- android: PendingIntent的使用
- Android按钮单击事件的四种常用写法总结
- android生命周期理解
- AndroidStudio添加assets目录并获取其路径
- Android Studio - 使用第三方库
- qt for Android 环境搭建 win10
- Android 热修复使用Gradle Plugin1.5改造Nuwa插件
- android ListView 中CheckBox选中后,状态混乱的解决方案
- 理解Android自定义的属性
- Fragment向activity传值的接口回调方法
- 【开源-Android】基于蓝牙备份联系人
- 百度Android SDK历史版本开发包
- 实现android"转盘抽奖"小项目后感想
- android的照相图片压缩
- 【Android 2d游戏开发日记(0)】——写在前面
- android studio更新到1.5后遇到的问题
- android 定时任务 隔一段时间执行 开启 关闭
- Android学习之 启动模式