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();}@Overridepublic 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时才会打印* * 作者: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);}}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
