Android原生TTS(TextToSpeech)无效问题

Android原生TTS(TextToSpeech)无效问题

在使用安卓原生语音文字转语音时发现系统自带的语音合成引擎不支持中文语音,查找资料有一下几款语音引擎
com.svox.pico 系统自带不支持中文语音
com.svox.classic 搜svox搜到的,和上面类似不支持中文
com.google.android.tts 谷歌文字转语音引擎,不支持5.0以下系统
com.iflytek.speechcloud 科大讯飞语音引擎3.0,支持4.0以上系统
com.iflytek.speechsuite 新版科大讯飞语音引擎,2018年开始新版手机一般会内置,如oppo、vivo、华为
com.baidu.duersdk.opensdk 度秘语音引擎3.0 不支持5.0以下系统
com.iflytek.tts 科大讯飞语音合成,较老,不支持7.0以上系统

经过测试发现科大讯飞语音引擎3.0比较好用,从网上下载引擎(讯飞语音合成3.0引擎)安装,进入手机设置>系统>语音和输入法>高级>文字转语音(TTS)输出,首选引擎科大讯飞语音引擎,重启编写的应用。

下面贴出安卓TextToSpeech原生帮助类

import android.content.Context;
import android.speech.tts.TextToSpeech;

import java.util.Locale;
import java.util.UUID;

public class SpeechUtils {
    private Context context;


    private static final String TAG = "SpeechUtils";
    private static SpeechUtils singleton;

    private TextToSpeech textToSpeech; // TTS对象

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

    public SpeechUtils(Context context) {
        this.context = context;
        textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int i) {
                if (i == TextToSpeech.SUCCESS) {
                    //textToSpeech.setLanguage(Locale.US);
                    textToSpeech.setLanguage(Locale.CHINA);
                    textToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
                    textToSpeech.setSpeechRate(1.0f);

                }
//                else {
//                    ToastUtils.toast(context,"播报引擎加载失败");
//                }
            }
        });
    }

    public void speakText(String text) {
        if (textToSpeech != null) {
            textToSpeech.speak(text,
                    TextToSpeech.QUEUE_FLUSH, null);
        }

    }


    public void speakText(String text, int queueMode) {
        if (textToSpeech != null) {
            textToSpeech.speak(text, queueMode, null, UUID.randomUUID().toString());
        }

    }


    public void close() {
        if (textToSpeech != null) {
            textToSpeech.stop();
            textToSpeech.shutdown();
            textToSpeech=null;
            singleton=null;
        }
    }

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

        }
    }


}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值