Android 调用TTS语音引擎过程及问题记录

这篇具有很好参考价值的文章主要介绍了Android 调用TTS语音引擎过程及问题记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android 调用TTS引擎过程及问题记录

前言

  背景是需要在华为平板上部署一个能够进行相关中文语音提示的APP,华为系统为鸿蒙3.0,对应Android API 12.

Android 调用TTS引擎

  调用TTS引擎之前,首先要确认自己的设备中是否安装了相关的文本转语音引擎以及是否支持中文,查看方法为“设置->辅助功能->无障碍->文本转语音”,鸿蒙系统是这个路径,或者可以直接在设置中直接搜索文本转语音项,如下图所示,点击信息按钮即可对引擎进行语言选择等配置,我这里是因为语音播报没成功,一直怀疑是华为的引擎不行,然后安装了Google的引擎,后来问题解决后发现华为的语音引擎也是可以的,错怪了错怪了。如果没有可支持的语音引擎的话,还可以安装其他国产语音引擎,不过不知道要不要收费。
android朗读引擎,Android,android,音频
  具体的调用代码比较简单,如下:
重写onInit方法:

mTextToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status == SUCCESS) {
                    if (mTextToSpeech.getEngines().size() <= 0) {
                        Toast.makeText(MainActivity.this, "Please install the voice engine", Toast.LENGTH_SHORT).show();
                        Log.i("tts_engine", "未安装TTS引擎");
                        return;
                    }

                    //The default language is Chinese
                    int result = mTextToSpeech.setLanguage(Locale.CHINA);
                    if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                        Toast.makeText(MainActivity.this, "Chinese is not supported", Toast.LENGTH_SHORT).show();
                        //Set to English when Chinese is not supported
                        mTextToSpeech.setLanguage(Locale.US);
                    }
                    else {
                        ttsInitFlag = 1;
//                        mTextToSpeech.speak(SPEED_LIMIT_MSG, TextToSpeech.QUEUE_FLUSH, null, null);
                    }
                } else {
                    Log.e(TAG, "onInit: TextToSpeech initialization failed");
                }
            }
        });

调用speak:

mTextToSpeech.setPitch(1.0f);//方法用来控制音调
mTextToSpeech.setSpeechRate(0.8f);//用来控制语速
// 播放语音提示
if (ttsInitFlag == 1){
    int code = mTextToSpeech.speak(SPEED_LIMIT_MSG, TextToSpeech.QUEUE_ADD, null, null);
    Log.i("tts_speak", "Speak Result" + code);
}

onDestory里添加TTS的销毁:

if (null != mTextToSpeech){
    mTextToSpeech.stop();
    mTextToSpeech.shutdown();
    mTextToSpeech = null;
}

  就可以了,具体关于TTS的相关函数说明,大家可以自行查找API进行查看。

问题记录

  如果发现语音播报失败,还是那句话,一定要学会看日志,找到问题所在,不然直接搜语音播报失败,病急乱投医,浪费时间(我之前就是这么做的,切记切记)。通过在AS的LogCat中搜索TextToSpeech相关的日志,我发现在调用Speak方法时会提示“speak failed: not bound to TTS engine”或“speak failed: TTS engine connection not fully set up”,这个问题通常是因为TextToSpeech服务未能成功启动或者初始化未完成导致的,所以我们要在TTS服务完全启动之后再调用Speak方法,看到网上好多人说要在OnInit方法中调用speak函数,治标不治本,谁会APP初始化的时候调用语音播报,肯定都是在OnInit外部调用,之所以都说要在OnInit中调用,是因为TTS服务初始化完成的一个标志就是,setLanguage()后返回非LANG_MISSING_DATA或LANG_NOT_SUPPORTED,所以在setLanguage后加个判断即可,在调用语音播报时,再判断下当前TTS服务是否初始化即可,我上面的代码中便体现了这一点,某种意义上来说,这确实不算个bug,就是调用时序的问题,除非APP刚运行时就要播报语音(当然我测试语音播报功能时就是这样测试的,所以一直没出声。。)
  看网上还有一个额外要注意的地方,需要在AndroidManifest.xml中添加:

<manifest
	...
    <queries>
        <intent>
            <action android:name="android.intent.action.TTS_SERVICE" />
        </intent>
    </queries>
    ...
</manifest>

  好像适用于Android API 11,我的是API 12,没用到这个,也记录一下。文章来源地址https://www.toymoban.com/news/detail-601717.html

到了这里,关于Android 调用TTS语音引擎过程及问题记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python调用edge-tts实现在线文字转语音

    edge-tts是一个 Python 模块,允许通过Python代码或命令的方式使用 Microsoft Edge 的在线文本转语音服务。 GitHub - rany2/edge-tts: Use Microsoft Edge\\\'s online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key Use Microsoft Edge\\\'s online text-to-speech service from Python WITHOUT needing Micro

    2024年03月27日
    浏览(54)
  • Android 标准语音识别框架:SpeechRecognizer 的封装和调用

    此前,笔者梳理了 语音 相关的两篇文章: 如何打造车载语音交互:Google Voice Interaction 给你答案:介绍的是 3rd Party App 如何通过 Voice Interaction API 快速调用系统的语音交互服务快速完成确认、选择的基础 语音对话 直面原理:5 张图彻底了解 Android TextToSpeech 机制:侧重于阐述

    2024年02月03日
    浏览(40)
  • Android---Class 对象在执行引擎中的初始化过程

    一个 class 文件被加载到内存中的步骤如下图所示: 装载  装载是指 Java 虚拟机查找 .class 文件并生成 字节流 ,然后根据字节流创建 java.lang.Class 对象的过程。 1. ClassLoader 通过一个类的 全限定名 ( 包名+类名 )来查找 .class 文件,并生成二进制字节流。其中 class 字节码文件

    2024年02月07日
    浏览(50)
  • BpBinder与PPBinder调用过程——Android开发Binder IPC通信技术

    在Android系统中,进程间通信(IPC)是一个非常重要的话题。Android系统通过Binder IPC机制实现进程间通信,而Binder IPC通信技术则是Android系统中最为重要的进程间通信技术之一。本文将介绍Binder IPC通信技术的原理,并详细解析BpBinder与PPBinder调用过程的使用以及注意事项。 Bind

    2024年02月13日
    浏览(36)
  • uniapp开发WebRTC语音直播间支持app(android+IOS)和H5,并记录了所有踩得坑

    1. 创建自己的语音直播间 2. 查询所有直播间列表 3.加入房间 4.申请上位 5.麦克风控制 6.声音控制 7.赠送礼物(特效 + 批量移动动画) 8.退出房间 1.uniapp 实现客户端H5、安卓、苹果 2.webRTC实现语音直播间(具体原理网上有很多文章我就不讲了,贴个图) 3.使用node.js搭建信令服

    2024年02月19日
    浏览(42)
  • Android问题记录

    一 Android编程怎样用ICC校准颜色? 在Android编程中,ICC颜色校准通常是通过使用Color Management API进行的。以下是使用ICC校准颜色的步骤: 首先,确保你的设备支持色彩管理。你可以通过调用 ColorManagement.isColorManagementSupported() 来检查。 获取ICC配置文件。你可以从设备的显示器、

    2024年01月20日
    浏览(34)
  • android gradle编译问题记录

    有时候即便配置了国内镜像下载gradle也是慢的一批,可以手动下载gradle文件配置到项目中,比如我下载了一个新项目,它的gradle版本是gradle-4.1-all,进入项目时它会开始下载gradle,此时gradle目录中会创建gradle-4.1-all目录,我的完整路径是 里面有一个像乱码一样的文件夹,下载的

    2024年01月16日
    浏览(49)
  • Android系统源码如何导入android studio中使用以及导入过程中遇到的问题

    一、在源码根目录中编译出android.ipr和android.iml android.ipr:整个系统源码的工程项目,android studio上直接打开即可查看源码 android.iml:工程中的具体配置信息 二、安装android studio,打开工程项目android.ipr 三、配置sdk 废话不多说,直接开始 进入源码根目录 之后选择要编译的项目

    2024年02月12日
    浏览(42)
  • 【flutter电子木鱼】flutter 打包 android apk,记录配置签名的过程/调试的过程及flutter build apk放到手机上用。

    目标通过这篇blog记录一下flutter打包android apk的过程,项目是参考以下链接的git仓库,然后自己重新创建了一个project。安卓应用市场的木鱼充斥着广告和付费体验极差,自己做一个还可以根据喜好做适应性调整,不用担心被偷后台也不用烦广告和一些奇怪的布局,干净清爽,

    2024年02月10日
    浏览(50)
  • UE 虚幻引擎 打包android 遇到的一些相关问题,包含插件,git

    1,UE5 name.project requires a temporary target.cs to be generated (Water plugin is enabled) 这个报错是因为启用了,ue内置的一些插件,譬如water  weather system ,如果不是特别需要可以去掉,如果必须要用,那可以参考后面的方式 2,如果继续用插件,那么就会报 这个问题是因为,很多插件代码

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包