专栏首页Android小菜鸡Android 利用系统的TextToSpeech类实现语音播报

Android 利用系统的TextToSpeech类实现语音播报

  笔者最近因为要实现一个文字转语音直接播报的功能,用到了android.speech.tts.TextToSpeech他可以将我们录入的文字内容转化成语音播报出来。

实现代码:

package com.hjl.artisan.app;

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

import java.util.Locale;

@SuppressLint("NewApi")
public class SystemTTS extends UtteranceProgressListener implements TTS, TextToSpeech.OnUtteranceCompletedListener {
    private Context mContext;
    private static SystemTTS singleton;
    private TextToSpeech textToSpeech; // 系统语音播报类
    private boolean isSuccess = true;

    public static SystemTTS getInstance(Context context) {
        if (singleton == null) {
            synchronized (SystemTTS.class) {
                if (singleton == null) {
                    singleton = new SystemTTS(context);
                }
            }
        }
        return singleton;
    }

    private SystemTTS(Context context) {
        this.mContext = context.getApplicationContext();
        textToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int i) {
                //系统语音初始化成功
                if (i == TextToSpeech.SUCCESS) {
                    int result = textToSpeech.setLanguage(Locale.CHINA);
                    textToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
                    textToSpeech.setSpeechRate(1.0f);
                    textToSpeech.setOnUtteranceProgressListener(SystemTTS.this);
                    textToSpeech.setOnUtteranceCompletedListener(SystemTTS.this);
                    if (result == TextToSpeech.LANG_MISSING_DATA
                            || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                        //系统不支持中文播报
                        isSuccess = false;
                    }
                }

            }
        });
    }

    public void playText(String playText) {
        if (!isSuccess) {
            return;
        }
        if (textToSpeech != null) {
            textToSpeech.speak(playText,
                    TextToSpeech.QUEUE_ADD, null, null);
        }
    }

    public void stopSpeak() {
        if (textToSpeech != null) {
            textToSpeech.stop();
        }
    }


    //播报完成回调
    @Override
    public void onUtteranceCompleted(String utteranceId) {
    }

    @Override
    public void onStart(String utteranceId) {

    }

    @Override
    public void onDone(String utteranceId) {
    }

    @Override
    public void onError(String utteranceId) {

    }
}

使用实例:

SystemTTS.getInstance(context).playText("我能转化成语音")

End

最近整理了自己的Github Blog,希望各位大大提意见,点个star,谢谢 传送门:WusyBlog

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解决H5在IOS的WebView下上拉下拉会带动整个WebView出现空白

    做Web应用,碰到问题,当拖动页面的时候,IOS的整个WebView会被拖动,导致上下方有灰色空白出现,并且影响内部滑动的体验。 在网上找了个神秘代码,大概意...

    饮水思源为名
  • 自定义Androidk全量更新组件

      自动更新功能对于一个APP来说是必备的功能,特别是对于未投放市场下载的APP,每次都让用户删掉原来的,再下载新的版本,肯定是不合适的。

    饮水思源为名
  • Android6.0权限控制

      随着android6.0的更新,最大的变化莫过于新的权限控制规则。以前可以直接通过AndroidManifest配置需要的权限。而更新后,为了保证用户隐私的...

    饮水思源为名
  • 【Java】基础篇-LinkedList

    说到 LinkedList,那么我们大家的第一想法就是 链表,是插入删除快,随机访问慢,今天我们就来一探究竟,究竟内部的它是什么构造导致的问题,我们是否可以在使...

    haoming1100
  • Android开发笔记(二十三)文件对话框FileDialog

    对话框是人机交互的有力工具,Android自带了几个常用的对话框,包括AlertDialog提示对话框、ProgressDialog进度对话框、DatePi...

    用户4464237
  • monit介绍和配置 原

        monit监控和管理进程、程序、文件、目录和Unix系统的文件的工具。可以进行自动维护和修理,在错误的情况下执行有意义的因果关系的行动。比如,某个进程没...

    拓荒者
  • 十个增加 Linux Shell 脚本趣味的小工具

    很多人误以为shell脚本只能在命令行下使用。其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等。你可以控制最终的输出,光标位置还有各种输出效...

    Debian社区
  • 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!

      99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏!!!

    不会飞的小鸟
  • 前端面试题

    3、实现效果,点击容器内的图标,图标边框变成border 1px solid red,点击空白处重置。

    grain先森
  • XMLRequest在请求过程中处理返回的数据

    “ 在前后端分离的项目中,我们前端会请求后端的接口,当请求结束后后将返回的数据展示到界面上,但是在后台的一些数据的批处理中,可能会比较耗时,此时我们可能需要知道...

    每天学Java

扫码关注云+社区

领取腾讯云代金券