博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android应用开发提高篇(2)-----文本朗读TTS(TextToSpeech)
阅读量:4649 次
发布时间:2019-06-09

本文共 5235 字,大约阅读时间需要 17 分钟。

链接地址:

一、概述

      TextToSpeech,就是将文本内容转换成语音,在其他的一些应用中经常可以看到。这个功能还是挺强大的,但是用户利用它来编写应用却很简单。

 

二、要求

     能够将文本内容转换成语音并朗读出来;可以一次全部朗读出来,也可以边写边读;可以将文本保存为语音文件。

 

三、实现

     新建工程MySpeak,修改/res/layout/main.xml文件,在里面添加一个EditText,两个Button和一个CheckBox,完整的main.xml文件如下:

1 
2
6 7
12 13
19 20
26 27
34 35 36

修改MySpeakActivity.java文件,设置两个Button按钮的监听和EditText的内容变化监听,完整的MySpeakActivity.java内容如下:

 

1 package com.nan.speak;   2   3 import java.util.Locale;   4   5 import android.app.Activity;   6 import android.os.Bundle;   7 import android.speech.tts.TextToSpeech;   8 import android.text.Editable;   9 import android.text.TextWatcher;  10 import android.view.View;  11 import android.widget.Button;  12 import android.widget.CheckBox;  13 import android.widget.EditText;  14 import android.widget.Toast;  15  16  17 public class MySpeakActivity extends Activity  18 {
19 private EditText mEditText = null; 20 private Button readButton = null; 21 private Button saveButton = null; 22 private CheckBox mCheckBox = null; 23 private TextToSpeech mTextToSpeech = null; 24 25 /** Called when the activity is first created. */ 26 @Override 27 public void onCreate(Bundle savedInstanceState) 28 {
29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.main); 31 32 mEditText = (EditText)this.findViewById(R.id.edittext); 33 readButton = (Button)this.findViewById(R.id.rbutton); 34 saveButton = (Button)this.findViewById(R.id.sbutton); 35 mCheckBox = (CheckBox)this.findViewById(R.id.checkbox); 36 //实例并初始化TTS对象 37 mTextToSpeech = new TextToSpeech(this,new TextToSpeech.OnInitListener() 38 {
39 40 @Override 41 public void onInit(int status) 42 {
43 // TODO Auto-generated method stub 44 if(status == TextToSpeech.SUCCESS) 45 {
46 //设置朗读语言 47 int supported = mTextToSpeech.setLanguage(Locale.US); 48 if((supported != TextToSpeech.LANG_AVAILABLE)&&(supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) 49 {
50 displayToast("不支持当前语言!"); 51 } 52 } 53 } 54 55 }); 56 //朗读按钮监听 57 readButton.setOnClickListener(new View.OnClickListener() 58 {
59 60 @Override 61 public void onClick(View v) 62 {
63 // TODO Auto-generated method stub 64 //朗读EditText里的内容 65 mTextToSpeech.speak(mEditText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 66 } 67 }); 68 //保存按钮监听 69 saveButton.setOnClickListener(new View.OnClickListener() 70 {
71 72 @Override 73 public void onClick(View v) 74 {
75 // TODO Auto-generated method stub 76 77 //将EditText里的内容保存为语音文件 78 int r = mTextToSpeech.synthesizeToFile(mEditText.getText().toString(), null, "/mnt/sdcard/speak.wav"); 79 if(r == TextToSpeech.SUCCESS) 80 displayToast("保存成功!"); 81 } 82 }); 83 //EditText内容变化监听 84 mEditText.addTextChangedListener(mTextWatcher); 85 86 } 87 88 89 private TextWatcher mTextWatcher = new TextWatcher() 90 {
91 92 @Override 93 public void afterTextChanged(Editable s) 94 {
95 // TODO Auto-generated method stub 96 //如果是边写边读 97 if(mCheckBox.isChecked()&&(s.length()!=0)) 98 {
99 //获得EditText的所有内容 100 String t = s.toString(); 101 mTextToSpeech.speak(t.substring(s.length()-1), TextToSpeech.QUEUE_FLUSH, null); 102 } 103 } 104 105 @Override 106 public void beforeTextChanged(CharSequence s, int start, int count, 107 int after) 108 {
109 // TODO Auto-generated method stub 110 111 } 112 113 @Override 114 public void onTextChanged(CharSequence s, int start, int before, 115 int count) 116 {
117 // TODO Auto-generated method stub 118 119 } 120 }; 121 122 //显示Toast函数 123 private void displayToast(String s) 124 {
125 Toast.makeText(MySpeakActivity.this, s, Toast.LENGTH_SHORT).show(); 126 } 127 128 129 @Override 130 public void onDestroy() 131 {
132 super.onDestroy(); 133 134 if(mTextToSpeech != null) 135 mTextToSpeech.shutdown();//关闭TTS 136 } 137 138 }

最后,在AndroidManifest.xml文件中加入权限:

 

1 

好了,运行该程序:

 

输入“123456789”,可以听到输入完一个字就马上被朗读出来,

说明:

    不知道为什么,在我的一台真机上测试时不能朗读出来,提示说语言不支持,在另一台上可以。

转载于:https://www.cnblogs.com/wvqusrtg/p/5179035.html

你可能感兴趣的文章
单调队列以及单调队列优化DP
查看>>
爬虫大作业
查看>>
java多线程详解(8)-volatile,Atomic比较
查看>>
硬质合金销售真的有那么难么?
查看>>
Struts2(十二)使用验证框架验证数据较验
查看>>
Greenplum-概念篇
查看>>
Thrift 个人实战--Thrift 网络服务模型
查看>>
Day24-Ajax文件上传
查看>>
第五天、LAMP架构
查看>>
【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
查看>>
【bzoj5110】[CodePlus2017]Yazid 的新生舞会 Treap
查看>>
[archlinux] linux boot process/order/stage
查看>>
[LeetCode]Power
查看>>
ARM处理器详解(2)-Cortex R系列
查看>>
单KEY业务,数据库水平切分架构实践
查看>>
绩效考核如何快速评分
查看>>
ssm项目启动,加载数据库连接池时卡住
查看>>
CGRect包含交错,边缘,中心的检测
查看>>
respondsToSelector的相关使用
查看>>
zabbix 自定义监控项 获取nginx监控状态
查看>>