• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

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

互联网 diligentman 2周前 (06-10) 10次浏览

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 文字转语音,中文需第三方插件
喜欢 (0)