简单到不可想象:
文字转化为语音Android中TextToSpeech类的简单使用
学习使用,请勿传播
写在前面:
TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。
它是同时运用语言学和心理学的杰出之作,在内置芯片的支持之下,通过神经网络的设计,把文字智能地转化为自然语音流。TTS技术对文本文件进行实时转换,转换时间之短可以秒计算。在其特有智能语音控制器作用下,文本输出的语音音律流畅,使得听者在听取信息时感觉自然,毫无机器语音输出的冷漠与生涩感。TTS语音合成技术 即将覆盖国标一、二级汉字,具有英文接口,自动识别中、英文,支持中英文混读。所有声音采用真人普通话为标准发音,实现了120-150个汉字/分钟的快速语音合成,朗读速度达3-4个汉字/秒,使用户可以听到清晰悦耳的音质和连贯流畅的语调。现在有少部分MP3随身听具有了TTS功能。
TTS是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。TTS不仅能帮助有视觉障碍的人阅读计算机上的信息,更能增加文本文档的可读性。现在的TTS应用包括语音驱动的邮件以及声音敏感系统,并常与声音识别程序一起使用。
1、必须知道的部分
TextToSpeech的功能:将文字快速转化为语音进行播放或者保存为音频文件
- android也可以实现把输入的文字朗读出来,使用到的是TextToSpeech,将一段文字转换为成语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。
- 目前只支持5种语言:English、 French 、 German 、 Italian 和 Spanish。
- TextToSpeech必须被实例化之后才能使用.实现TextToSpeech.OnInitListener方法来获取实例化结果的监听。当你已经使用完TextToSpeech实例之后, 应该调用shutdown()方法来释放TextToSpeech所使用的本地资源。
使用前需先安装第三方插件,例如本次使用了
`2019竞赛资料\任务2\18_讯飞中文语音工具\讯飞中文引擎支持.apk`
构造方法
- //使用默认的引擎
TextToSpeech(Context context, TextToSpeech.OnInitListener listener) - //使用指定的引擎
TextToSpeech(Context context, TextToSpeech.OnInitListener listener, String engine)
- //使用默认的引擎
2、TTS初始化常用方法
- setLanguage设置语言,帮助文档里面写了有22种
- TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失。
- TextToSpeech.LANG_NOT_SUPPORTED:不支持
// 参数Context,TextToSpeech.OnInitListener
mTextToSpeech = new TextToSpeech(this, this);
// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
mTextToSpeech.setPitch(1.0f);
// 设置语速
mTextToSpeech.setSpeechRate(0.5f);
// setLanguage设置语言
int result = mTextToSpeech.setLanguage(Locale.CHINA);
// 常用初始化方法
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(this, "数据丢失或不支持",
Toast.LENGTH_SHORT).show();
}
3、初步实例
初始化(init)
private void Speak() { mTextToSpeech=new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status==TextToSpeech.SUCCESS) { //设置朗读语言 int supported=mTextToSpeech.setLanguage(Locale.CHINA); if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) { Toast.makeText(RFID_Reader.this, "不支持当前语言!", Toast.LENGTH_SHORT).show(); } } } }); }
朗读
mTextToSpeech.speak("本次消费"+tmp+"元", TextToSpeech.QUEUE_FLUSH, null);
写在中间:
做题时需配合Handler来进行逐步朗读,自己设定相关算法进行不重复朗读。
4、经研究发现
经研究发现,根本不用这么麻烦,本次用两行代码搞定
// 初始化
TextToSpeech speak = new TextToSpeech(this,null);
// 使用
speak.speak("欢迎光临",TextToSpeech.QUEUE_FLUSH,null);
5、敷衍了事
这是一行废话。。
6、简单案例分享
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!\nThis is Suk!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.a4_4_voicedemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextToSpeech textToSpeech;
private TextToSpeech speak;
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
speak = new TextToSpeech(this,null);
txt = findViewById(R.id.test);
txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
speak.speak(txt.getText().toString()+",这里是TTS输出!",TextToSpeech.QUEUE_FLUSH,null);
}
});
}
}
写在最后:
这是一行凑字数的废话!引用请注明出处!
最后一次更新于2021-12-26
0 条评论