您现在的位置是:首页 > 正文

Anddroid 文本合成语音TTS实现

2024-04-01 05:06:34阅读 4

一、近期有个人脸识别的项目中识别成功以后要有语音播报,但是三方提供的Demo中并没有此功能,于是了解TTS语音合成技术可以实现,要提前安装一个TTS引擎然后调用原生TTS,下面附上源码以及引擎apk,

AndroidManifest.xml 权限

    <!--往sdcard中写入数据的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!--往sdcard中读取数据的权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />



二、上面是这边封装的一个工具类,使用很简单直接调用即可,这边测试正常语速可能会有点快,可以根据情况定义

package com.baidu.idl.main.facesdk.utils;

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 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");
        }
    }
}



三、MainActivity 使用步骤

package com.litrabbit.ttsyuyin;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import com.litrabbit.ttsyuyin.utils.TTSUtils;

public class MainActivity extends AppCompatActivity {

    /**
     * 记得要先安装TTS  apk引擎  不然无效 项目目录下面 kdxf_tts_3.0.apk 为引擎apk
     * @param savedInstanceState
     */

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /**
         * TextView 文本
         */
        TextView textView = findViewById(R.id.text_view);
        /**
        * 播报
        *
        * @param context
        * @param text             文本内容
        * @param rate             语速 1.0为正常
        * @param pitch            语调 1.0为正常
        * @param ignoreIfSpeaking 如果在播报就忽略
        */
        TTSUtils.speak(MainActivity.this,textView.getText().toString(),0.5f,0.5f,true);
    }
}



TTS引擎apk连接 提取码:1234

源码地址
————————————————

原文链接:https://blog.csdn.net/weixin_42996187/article/details/125368225

网站文章

  • NLP 基于kashgari和BERT实现中文命名实体识别(NER)

    准备工作,先准备 python 环境,下载 BERT 语言模型 Python 3.6 环境 需要安装kashgari Backend pypi version desc TensorFlow 2.x pip install ‘kashgari&gt;=2.0.0’ coming soon TensorFlow 1.14+ pip install ‘kashgari&gt;=...

    2024-04-01 05:06:26
  • 集成学习模型(二)——GBDT

    集成学习模型(二)——GBDT

    GBDT 文章目录GBDT一、概述二、回归树三、提升树四、GBDT的原理4.2 GBDT损失函数4.3 GBDT正则化五、GBDT构建与测试六、总结 一、概述   梯度提升(Gradient boos...

    2024-04-01 05:06:19
  • User Access Control 、Program Files 目录 与 Application Data 目录

    今天在debug一个奇怪的问题,一个程序在开发机器上没有任何错误,但是安装在客户机器上之后,只要客户运行它,就立刻停止响应。更加奇怪的是,程序本身没有输出任何日志。开始以为是安装包做的不好,但是几次实...

    2024-04-01 05:06:12
  • rate-based 借贷式拥塞控制算法

    rate-based 借贷式拥塞控制算法

    由 bpd = pacing_rate * rtt,可得一个恒等式 rtt = bdp * (1 / pacing_rate),而不占 buffer 时的 bdp 就是 cwnd 指示,于是可将 bu...

    2024-04-01 05:05:33
  • 北湖深坑题

    北湖深坑题

    北湖深坑题目信息输入输出测试样例解答题目信息十年前,北湖还只是一个深坑,未完成蓄水工作。为了确保蓄水工作的顺利进行,我们需要对北湖的蓄水量进行粗略估计。为了简化运算,我们假设北湖的地面是一维的,每一块...

    2024-04-01 05:05:26
  • linux上安装MySQL

    linux上安装MySQL

    linux上原有mysql卸载,安装mysql过程及遇到的问题和解决方法 一、前期准备 二、安装MySQL 三、遇到的问题

    2024-04-01 05:05:17
  • 安装moviepy库报错

    安装moviepy库报错

    由于已经存在这个库,因此在尝试使用pip进行安装时,会显示&quot;Found existing installation&quot;的信息,而不会重新安装。根据您提供的错误信息,&quot;Inv...

    2024-04-01 05:04:38
  • thymeleaf 添加页面隐藏值

    切记切记这样写是不对的: ...

    2024-04-01 05:04:30
  • 计算机辅助教学时必不可少的,浅谈计算机辅助教学在中学语文教学中的应用

    计算机辅助教学时必不可少的,浅谈计算机辅助教学在中学语文教学中的应用

    论文导读:在有了计算机网络及多媒体设施,情势便发生了很大改变。比如在讲授《再别康桥》这一课时,可以在课件中插入由濮存昕朗诵的《再别康桥》的录音。学生在听录音的时候,远比老师朗诵时要认真、专注许多。而且...

    2024-04-01 05:04:23
  • 【数学基础】线性方程组解情况整理

    【数学基础】线性方程组解情况整理

    一、非齐次线性方程组,无解,多解,唯一解 非齐次线性方程组,就是方程组的等式右边不为0的方程组,系数加上方程等式右边的矩阵,叫做增广矩阵。 【例1】求解下列线性方程组 化简后的有效方程组个数小于未知数个数,有多个解。 第一步,先列出增广矩阵: 第二步,用高斯消元法化简,化简成阶梯矩阵 先把第2行换到第1行 第2行减第1行的2倍,第3行减第1行的3倍,得到 第3行减...

    2024-04-01 05:03:44