当前位置: 首页 > news >正文

Android原生的TextToSpeech,文字合成语音并播放

1、在 AndroidManifest.xml 添加配置项 ,和 Application 标签平级。


<queries><intent><action android:name="android.intent.action.TTS_SERVICE" />  必不可少</intent></queries>

2、检查TTS数据是否已经安装并且可用

Intent checkIntent = new Intent();checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);

3、在onActivityResult 中处理返回的结果

@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQ_TTS_STATUS_CHECK) {switch (resultCode) {case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS://这个返回结果表明TTSEngine可以用
//                    mTts = new TextToSpeech(this, this);LogUtils.log("TTS Engine is installed!");break;case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA: //需要的语音数据已损坏case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:  //缺少需要语言的语音数据case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:  //缺少需要语言的发音数据//这三种情况都表明数据有错,重新下载安装需要的数据LogUtils.log("数据有错,重新下载安装需要的数据");Intent dataIntent = new Intent();dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);startActivity(dataIntent);break;case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL://检查失败LogUtils.log("检查失败");default:LogUtils.log("Got a failure. TTS apparently not available");break;}} else {LogUtils.log("其他错误----");}}

3、初始化,并设置语音播放速度,音色,语言等等;

 TextToSpeech mTts = new TextToSpeech(VoiceTestActivity.this, this);mTts.setLanguage(Locale.CHINESE);mTts.setPitch(1.2f);mTts.setSpeechRate(1.2f);

4、实现TextToSpeech.OnInitListener 接口,在回调方法onInit方法中获取 TTS 初始化状态

  @Overridepublic void onInit(int status) {//TTS Engine初始化完成if (status == TextToSpeech.SUCCESS) {int result = mTts.setLanguage(Locale.CHINESE);//设置发音语言if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {//判断语言是否可用LogUtils.log("语言不可用");}} else {LogUtils.log("onInit: fail:  status: " + status);}}

:这里如果出现 status:-1 的情况,可能漏掉了第一步的配置

5、文字合成语音并播放

    public void speak(String text) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null, null);  // 使用QUEUE_FLUSH清空之前的队列,重新播放新的文本} else {HashMap<String, String> params = new HashMap<>();params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "123");  // 对于旧版本Android,需要使用此参数来避免重复播放问题mTts.speak(text, TextToSpeech.QUEUE_FLUSH, params);  // 使用QUEUE_FLUSH清空之前的队列,重新播放新的文本}}

6、暂停播放,销毁TTS,获取语音播放状态。Activity活动窗口销毁时,及时销毁TTS

 mTts.setOnUtteranceProgressListener(new UtteranceProgressListener() {@Overridepublic void onStart(String utteranceId) {// 开始播放LogUtils.log("onStart  开始播放");}@Overridepublic void onDone(String utteranceId) {// 播放完成LogUtils.log("播放完成");}@Overridepublic void onError(String utteranceId) {// 发生错误LogUtils.log("播放,发生错误");}});@Overrideprotected void onStop() {super.onStop();if (mTts != null) {mTts.stop();mTts.shutdown();}}@Overrideprotected void onDestroy() {super.onDestroy();if (mTts != null) {mTts = null;}}

该文章仅适用于简单的文字转换成语音,并播放,android原生的TextToSpeech  ;

不涉及语音识别,唤醒等等


文章转载自:

http://pEAzlHjL.qrhng.cn
http://FZawxs6H.qrhng.cn
http://ED6jyU3w.qrhng.cn
http://MC4u8JMx.qrhng.cn
http://la6SOIF9.qrhng.cn
http://Nmf13xTj.qrhng.cn
http://CV89gMWY.qrhng.cn
http://ccuNiKUk.qrhng.cn
http://CXI7IHRM.qrhng.cn
http://j0t5zuVV.qrhng.cn
http://JiuoJBYF.qrhng.cn
http://TfwRpRQi.qrhng.cn
http://8oTJjFGT.qrhng.cn
http://dk9cYgOG.qrhng.cn
http://kDu3ooYG.qrhng.cn
http://dMbmNVfo.qrhng.cn
http://VVngeqZt.qrhng.cn
http://yXenJvJw.qrhng.cn
http://fBihgW9E.qrhng.cn
http://vYQ1yM7I.qrhng.cn
http://ZxQz2O25.qrhng.cn
http://qG7D6FeX.qrhng.cn
http://fbBAmNRg.qrhng.cn
http://evzXzsQt.qrhng.cn
http://YHDDEgry.qrhng.cn
http://XeoRHbkG.qrhng.cn
http://Mb24FF5I.qrhng.cn
http://IhWrr5Dp.qrhng.cn
http://soMnYFnS.qrhng.cn
http://iu7hWP9R.qrhng.cn
http://www.dtcms.com/a/385292.html

相关文章:

  • 【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
  • 高德api使用
  • 工程造价指数指标分析:从数据采集到决策支撑的工程经济实践
  • 中控平台数据监控大屏
  • Vue 与 React 的区别?
  • 元图CAD:智能工程图纸解决方案的商业模型创新
  • MySQL 全量备份迁移步骤指南
  • 有关gitlab14.x版本在内网环境下无法添加webhooks的解决方法
  • O3.4 opencv摄像头跟踪
  • 数智管理学(五十二)
  • 121、【OS】【Nuttx】【周边】效果呈现方案解析:find 命令格式(上)
  • Python 3入门指南
  • I.MX6UL:EPIT
  • 企业数字化转型的 4A 架构指南:从概念解读到 TOGAF 阶段对应
  • Linux基础之部署mysql数据库
  • 【文献分享】空间互近邻关系在空间转录组学数据中的应用
  • 高精度、高带宽的磁角度传感器——MA600A
  • HarmonyOS服务卡片开发:动态卡片与数据绑定实战指南
  • HarmonyOS迷宫游戏鸿蒙应用开发实战:从零构建随机迷宫游戏(初版)
  • 拥抱依赖注入的优雅与灵活:深入解析 Spring ObjectProvider
  • HarmonyOS数据持久化:Preferences轻量级存储实战
  • 机器学习势函数(MLPF)入门:用DeePMD-kit加速亿级原子模拟
  • X电容与Y电容的区别:电路安全设计的黄金组合
  • MySQL学习笔记02-表结构创建 数据类型
  • etcd压测造成数据目录过大恢复
  • 信息系统运维管理
  • 回溯算法经典题目+详细讲解+图示理解
  • 全网首发! Nvidia Jetson Thor 128GB DK 刷机与测评(四)常用功能测评 - 目标跟踪 Object Tracking 系列
  • [代码规范篇]Java代码规范
  • C++:string模拟实现中的赋值拷贝函数现代写法诡异地崩掉了......