安卓语音播报封装工具类

2023-11-13

封装类:


import android.annotation.SuppressLint;
import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;

public class TTSUtils {
    private static final TTSUtils INSTANCE = new TTSUtils();
    private TextToSpeech textToSpeak;
    private boolean isSpeaking;


    private void TTS() {
    }

    /**
     * 播报
     *
     * @param context
     * @param text    文本内容
     */
    public static void speak(Context context, String text) {
        speak(context, text, 1.0f, 1.0f, false);
    }

    /**
     * 播报
     *
     * @param context
     * @param text             文本内容
     * @param ignoreIfSpeaking 如果在播报就忽略
     */
    public static void speak(Context context, String text, boolean ignoreIfSpeaking) {
        speak(context, text, 1.0f, 1.0f, ignoreIfSpeaking);
    }

    /**
     * 播报
     *
     * @param context
     * @param text             文本内容
     * @param rate             语速 1.0为正常
     * @param pitch            语调 1.0为正常
     * @param ignoreIfSpeaking 如果在播报就忽略
     */
    public static void speak(Context context, String text, float rate, float pitch, boolean ignoreIfSpeaking) {
        if (ignoreIfSpeaking && INSTANCE.isSpeaking) return;
        INSTANCE.speakNow(context, text, rate, pitch);
    }

    @SuppressLint("NewApi")
    private void speakNow(final Context context, final String text, final float rate, final float pitch) {
        if (textToSpeak == null) {
            textToSpeak = new TextToSpeech(context.getApplicationContext(), new TextToSpeech.OnInitListener() {
                @Override
                public void onInit(int status) {
                    if (status == 0) {
                        speakNow(context.getApplicationContext(), text, rate, pitch);
                    } else {
                        textToSpeak = null;
                    }
                }
            });
            textToSpeak.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                @Override
                public void onStart(String utteranceId) {
                    isSpeaking = true;
                }

                @Override
                public void onDone(String utteranceId) {
                    isSpeaking = false;
                }

                @Override
                public void onError(String utteranceId) {
                    isSpeaking = false;
                }
            });
        } else {
            textToSpeak.setSpeechRate(rate);
            textToSpeak.setPitch(pitch);
            textToSpeak.speak(text, TextToSpeech.QUEUE_FLUSH, null, "tts");
        }
    }
}

其它类调用:

 TTSUtils.speak(this,"请输入商品名称",1.2f,1.0f,false);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安卓语音播报封装工具类 的相关文章

随机推荐

  • 一张图把DCDC电源拓扑“融会贯通”

    1 基本拓扑的由来 我们把一个电源电路抽象成一个黑盒电路模型 一个电源输入 一个电源输出 一个接地端口 对于非隔离电源 输入输出电路是共 地 的 所以非隔离电源的这个模型可以简化为图4 1 所示的模型 在所有的拓扑中 电感的一端需要连接到三
  • 使用docker部署golang编译环境

    前言 不想在windows上安装环境 打算docker部署 一拉一运行很方便 要注意的就是 官方的镜像跑起来后要改些参数再导成镜像 否则重启后改动消失 所以多一步 1 拉取镜像 运行镜像 docker pull golang docker
  • SpringBoot使用Swagger报NullPointerException

    第一次使用Swagger时报NullPointerException 在pom文件中引入Swagger 在启动项中加入注解 接口注解 运行出现NullPointerException 解决运行空指针问题 在pom文件中引入Swagger
  • Ini文件读取类,采用C++ STL实现

    背景 编程过程中经常会遇到读取Ini文件的场合 封装一个方便的类 能否避免重复编写 以后可复用 ini文件的格式很简单 并且不像xml之类的配置文件严谨 通常用于配置简单的键值对 本类测试文件如下
  • vuex的使用场景

    vuex的使用场景 首先 我们先来探讨一下 什么情况下vuex才是必须要到的呢 需要数据共享和行为进行拆分 复杂的异步逻辑 需要综合多个模块进行状态演进 需要用到第三方插件 需要综合考虑多个组件的生命周期 先后顺序 特定逻辑等等 vuex使
  • 如何在前端传递一个String 的变量和一个obj对象到后端,然后被Java后端接收

    首先我们通过post向后端发送请求 本篇博客仅纪录一下 在实际开发中需要从前端传递多值到后端 并且不存放到一个对象中进行传值处理 简单的一个案例展示该怎么做罢了 创建一个包含字符串和对象的数据 const postData stringVa
  • centos yum安装mysql出现的错误与解决办法

    1 InnoDB Error ib logfile0 of different size 错误的解决方法 查看Mysqld var log mysqld log 日志 发现以下错误 InnoDB Error log file usr loc
  • 冒泡排序--java(详解)

    对于一个数组 4 6 3 9 而言 首先进行第一轮 第一次比较 4 lt 6 所以不用交换两元素 数组不变为 4 6 3 9 第二次比较 6 gt 3 所以交换两元素 得到一个新数组为 4 3 6 9 第三次比较 6 lt 9 所以不用交换
  • 计算机维修培训教材,计算机芯片级维中心(芯片级维修培训教材)b.doc

    计算机芯片级维中心 芯片级维修培训教材 b 一 芯片的功能 作用及性能 具体内容 芯片组 南桥 北桥 BIOS芯片 时钟发生器IC RTC实时时钟 I O芯片 串口芯片75232 缓冲器244 245 门电路74系列 电阻R 电容C 二极管
  • Java笔记1:IntelliJ IDEA详细安装步骤

    安装IntelliJ IDEA 一 安装JDK 1 下载最新的jdk 这里下的是jdk 8u66 2 将jdk安装到默认的路径C Program Files Java目录下 二 安装IntelliJ IDEA 1 运行IntelliJ ID
  • Redis中SAVE和BGSAVE的区别

    Redis的这两个命令都是用于创建当前数据库的备份 因为Redis持久化选择RDB快照模式 所以Redis并不是实时的进行数据持久化 而是有一定的时间间隔 这个时候如果我们想要手动进行一次持久化 可以使用save或者bgsave命令 SAV
  • 如何使用sharemouse共享鼠标

    如何使用sharemouse共享鼠标 文章目录 如何使用sharemouse共享鼠标 1 Step 1 查看server IP 2 Step 2 配置Server的TCP UDP端口 设置密码 3 Step 3 client连接server
  • #ifndef/#define/#endif使用详解

    问题 想必很多人都看过 头文件中的 ifndef define endif 防止该头文件被重复引用 但是是否能理解 被重复引用 是什么意思 是不能在不同的两个文件中使用include来包含这个头文件吗 如果头文件被重复引用了 会产生什么后果
  • Linux系统安全——NAT(SNAT、DNAT)

    目录 NAT SNAT SNAT实际操作 DNAT DNAT实际操作 NAT NAT network address translation 支持PREROUTING INPUT OUTPUT POSTROUTING四个链 请求报文 修改源
  • magma测试与安装,使用(含docker配置)

    作者Ubuntu 18 04 Docker的配置与安装 Docker更改镜像源 docker下载ubuntu docker运行进入容器 通过Dockfile更改docker中ubuntu的apt源 docker容器中的ubuntu的配置 下
  • Macbook(M2 Air) 使用笔记/经验分享

    文章目录 如何选择配置 如何看待溢价 目前体验感受 目前玩过游戏 目前续航体验 如何选择配置 教育优惠时只看到了8 256版本 在开了下列软件时遇到了内存压力瓶颈 若您有生产力需求请16 512起步 IDEA 社区版用于Java Sprin
  • Java菜鸟教程 面向对象初步(一)

    最近 笔者初步接触了java中 面向对象 的概念 在此做一下简单的分享 简单的介绍 一开始的编程软件如c语言 是属于 面向过程 的编程软件 当事件比较简单 可以利用线性的思维解决的时候 面向过程 的语言和 面向对象 的语言都可以解决这些问题
  • linux socket的阻塞和非阻塞设置方法

    非阻塞IO 和阻塞IO 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念 这里对于这两种socket 先做一下说明 基本概念 阻塞IO socket 的阻塞模式意味着必须要做完IO 操作 包括错误 才会 返回 非阻塞IO 非
  • 用c语言打印*图案

    打印出以下图案 include
  • 安卓语音播报封装工具类

    封装类 import android annotation SuppressLint import android content Context import android speech tts TextToSpeech import