文章目录
前言
Android文字转语音播报可以通过Android自带TTS和第三方语音框架实现。
一、实现方式
1.Android系统自带TTS
2.第三方语音框架:云知声离线语音(32位:armeabi-v7a)、…
二、Android系统自带TTS
1.集成工具类TextToSpeechUtils
代码如下(示例):
public class TextToSpeechUtils {
private static TextToSpeechUtils textToSpeechUtils;
private TextToSpeech mTextToSpeech; // TTS对象
public static TextToSpeechUtils getInstance() {
if (textToSpeechUtils == null) {
textToSpeechUtils = new TextToSpeechUtils();
}
return textToSpeechUtils;
}
private TextToSpeechUtils() {
}
public void initTextToSpeech(Context context) {
mTextToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
/*
使用的是小米手机进行测试,打开设置,在系统和设备列表项中找到更多设置,
点击进入更多设置,在点击进入语言和输入法,见语言项列表,点击文字转语音(TTS)输出,
首选引擎项有三项为Pico TTs,科大讯飞语音引擎3.0,度秘语音引擎3.0。其中Pico TTS不支持
中文语言状态。其他两项支持中文。选择科大讯飞语音引擎3.0。进行测试。
如果自己的测试机里面没有可以读取中文的引擎,
那么不要紧,我在该Module包中放了一个科大讯飞语音引擎3.0.apk,将该引擎进行安装后,进入到
系统设置中,找到文字转语音(TTS)输出,将引擎修改为科大讯飞语音引擎3.0即可。重新启动测试
Demo即可体验到文字转中文语言。
*/
// setLanguage设置语言
int result = mTextToSpeech.setLanguage(Locale.CHINA);
// TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失
// TextToSpeech.LANG_NOT_SUPPORTED:不支持
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(context, "数据丢失或不支持", Toast.LENGTH_SHORT).show();
}
}
}
});
// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
mTextToSpeech.setPitch(1.0f);
// 设置语速
mTextToSpeech.setSpeechRate(1.0f);
}
public void close(){
if (mTextToSpeech != null) {
mTextToSpeech.stop(); // 不管是否正在朗读TTS都被打断
mTextToSpeech.shutdown(); // 关闭,释放资源
mTextToSpeech = null;
}
}
public void speak(String speakStr){
if (mTextToSpeech != null && !mTextToSpeech.isSpeaking()) {
mTextToSpeech.speak(speakStr, TextToSpeech.QUEUE_ADD, null);
}
}
}
2.初始化和调用
代码如下(示例):
//初始化
textToSpeechUtils = TextToSpeechUtils.getInstance();
textToSpeechUtils.initTextToSpeech(mContext);
//关闭
textToSpeechUtils.close();
//播放
textToSpeechUtils.speak("开始虹膜注册");
3.需要的支持中文语音引擎
1.包名、应用名:
com.svox.pico 系统自带不支持中文语音
com.baidu.duersdk.opensdk 度秘语音引擎3.0 不支持5.0以下系统,大小11.95M
com.google.android.tts 谷歌文字转语音引擎,不支持5.0以下系统,大小17.98M
com.iflytek.speechcloud 科大讯飞语音引擎3.0,支持4.0以上系统,大小27.27M,科大讯飞引擎3.0安装后的名字叫:语音设置
com.iflytek.tts 科大讯飞语音合成,较老,不支持7.0以上系统,大小9M
博客及下载地址:https://blog.csdn.net/yingchengyou/article/details/79591954
2.切换发音人
设置 —— 辅助功能 —— 无障碍 ——TTS文本转语音 —— 切换引擎(如果有多个引擎的话)
引擎右边设置可点击进入选择发音人(如果有的话)
科大讯飞语音引擎3.0支持多个人物的语音切换,可以自行下载这个引擎。
博客:https://blog.csdn.net/qq_35584878/article/details/100535133
3.Android11 初始化失败问题处理
博客:https://blog.csdn.net/Jason_996/article/details/121704510
三、第三方语音框架(云知声离线语音)
1.Dos窗口查看是Android主板支持SO库架构(64位、32位)
C:\Users\CWY>adb shell
rk3399_all:/ $ getprop
2.集成使用
1.添加jar包:
api files('libs/usc.jar') //语音
2.build文件defaultConfig下添加so文件:
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi-v7a'// 'arm64-v8a'//'armeabi'
}
3.添加工具类SpeechUtilOffline:
4.初始化和调用:
初始化:
speechUtilOffline = SpeechUtilOffline.getInstance();
if(speechUtilOffline!=null){
speechUtilOffline.init(MainActivity.this);
}
关闭:
if (speechUtilOffline!=null){
speechUtilOffline.release();
}
播放:
speechUtilOffline.play("云知声离线语音");
四、注意点
1.喇叭问题
调试Android主板时喇叭确保装上、喇叭声音大小与其功率有关。(调试Android主板rk3399时遇到)