当前位置: 首页 > 工具软件 > TextToSpeech > 使用案例 >

Android原生TTS(TextToSpeech)无效问题

阮选
2023-12-01

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();

        }
    }


}
 类似资料: