Android TTS 文字转语音,中文需第三方插件

Posted mjsoftking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android TTS 文字转语音,中文需第三方插件相关的知识,希望对你有一定的参考价值。

TextToSpeech 默认不支持中文,需要第三方应用,这里推荐 “讯飞语记” 安装后,将应用的录音权限设置为允许,然后在系统的TTS设置下选择 “讯飞语记” ,重启使用TTS的应用即可。

一、使用TextToSpeech完成语音播放

public class TTSTextToSpeech implements TextToSpeech.OnInitListener {

    private final static String TAG = TTSTextToSpeech.class.getSimpleName();

    private static TTSTextToSpeech TTS_TEXT_TO_SPEECH;
    private final TextToSpeech mTTS;

    TTSTextToSpeech() {
    	//Utils.getApp() 是全局的application的变量
        mTTS = new TextToSpeech(Utils.getApp(), this);
    }

    public static synchronized TTSTextToSpeech getInstance() {
        if (null == TTS_TEXT_TO_SPEECH) {
            TTS_TEXT_TO_SPEECH = new TTSTextToSpeech();
        }
        return TTS_TEXT_TO_SPEECH;
    }

    /**
     * 播放,队列式,依次播放
     */
    public boolean speak(String text) {
        // 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
//        mTTS.setPitch(1.0f);
//        // 设置语速
//        mTTS.setSpeechRate(1.0f);

        //播放语音
        return TextToSpeech.SUCCESS ==
                mTTS.speak(text,
                        TextToSpeech.QUEUE_ADD,
                        null,
                        UUID.randomUUID().toString());
    }

    /**
     * 停止,并移除所有后续队列
     */
    public boolean stop() {
        return TextToSpeech.SUCCESS == mTTS.stop();
    }

    @Override
    public void onInit(int status) {
        //todo 系统不支持时使用 讯飞语记
        // 判断是否转化成功
        if (status == TextToSpeech.SUCCESS) {
            //默认设定语言为中文,原生的android貌似不支持中文。
            int result = mTTS.isLanguageAvailable(Locale.CHINA);
            if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                LogUtils.w(TAG, "不支持中文..." + String.valueOf(result));
                mTTS.setLanguage(Locale.US);
            } else {
                LogUtils.w(TAG, "支持中文..." + String.valueOf(result));
                mTTS.setLanguage(Locale.CHINA);
            }
        }
    }
}

二、log打印类

/**
 * 用途:log打印,debug时才会打印
 * <p>
 * 作者:mjSoftKing
 * 时间:2021/02/02
 */
public class LogUtils {

    private final static boolean DEBUG = BuildConfig.DEBUG;

    public static void e(Object tag, String msg) {
        e(tag.getClass().getSimpleName(), msg);
    }

    public static void e(Object tag, String msg, Throwable tr) {
        e(tag.getClass().getSimpleName(), msg, tr);
    }

    public static void w(Object tag, String msg) {
        w(tag.getClass().getSimpleName(), msg);
    }

    public static void w(Object tag, String msg, Throwable tr) {
        w(tag.getClass().getSimpleName(), msg, tr);
    }

    public static void d(Object tag, String msg) {
        d(tag.getClass().getSimpleName(), msg);
    }

    public static void d(Object tag, String msg, Throwable tr) {
        d(tag.getClass().getSimpleName(), msg, tr);
    }

    public static void i(Object tag, String msg) {
        i(tag.getClass().getSimpleName(), msg);
    }

    public static void i(Object tag, String msg, Throwable tr) {
        i(tag.getClass().getSimpleName(), msg, tr);
    }


    public static void e(String tag, String msg) {
        if (DEBUG) {
            Log.e(tag, msg);
        }
    }

    public static void e(String tag, String msg, Throwable tr) {
        if (DEBUG) {
            Log.e(tag, msg, tr);
        }
    }

    public static void w(String tag, String msg) {
        if (DEBUG) {
            Log.w(tag, msg);
        }
    }

    public static void w(String tag, String msg, Throwable tr) {
        if (DEBUG) {
            Log.w(tag, msg, tr);
        }
    }

    public static void d(String tag, String msg) {
        if (DEBUG) {
            Log.d(tag, msg);
        }
    }

    public static void d(String tag, String msg, Throwable tr) {
        if (DEBUG) {
            Log.d(tag, msg, tr);
        }
    }

    public static void i(String tag, String msg) {
        if (DEBUG) {
            Log.i(tag, msg);
        }
    }

    public static void i(String tag, String msg, Throwable tr) {
        if (DEBUG) {
            Log.i(tag, msg, tr);
        }
    }

}

以上是关于Android TTS 文字转语音,中文需第三方插件的主要内容,如果未能解决你的问题,请参考以下文章

Android实现TTS文字转语音功能

Android实现TTS文字转语音功能

Android实现TTS文字转语音功能

文字转语音(TTS)-Android

Android文字转语音引擎(TTS)使用

Android TextToSpeech TTS中文文本转语音(语音合成)