最近需要做一些文本转语音的东西,然后自己查找了 各种方法 。然后自己整理了下。TTS文字转语音,Google原生的不支持中文,如果我们需要他支持中文,那么需要添加相关语音引擎。安装好了之后,在手机设置里面设置使用即可。一般使用的都是科大讯飞的语音引擎。
在init方法里面初始化TTP:
/** * 初始化语音播放 */ textToSpeech=new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status==TextToSpeech.SUCCESS){ //设置音调,1.0是常规 textToSpeech.setPitch(1.0f); //设定语速,默认1.0正常语速 textToSpeech.setSpeechRate(1.0f); int result=textToSpeech.setLanguage(Locale.CHINESE); if (result==TextToSpeech.LANG_MISSING_DATA || result==TextToSpeech.LANG_NOT_SUPPORTED){ Log.e("tiwolf", "onInit: 数据丢失或者不支持"); } } } });
textToSpeech.setOnUtteranceProgressListener(new TtsProgress());
使用:
private void speakOut(){
if (textToSpeech!=null && !textToSpeech.isSpeaking()){
textToSpeech.speak(editText.getText().toString(),TextToSpeech.QUEUE_FLUSH,null,"");
}
}
使用UtteranceProgressListener来检测这句话是否已经说完
private class TtsProgress extends UtteranceProgressListener{ @Override public void onStart(String s) { // Log.e(TAG, "======onStart: 开始" ); runOnUiThread(new Runnable() { @Override public void run() { //在主界面操作 } }); } @Override public void onDone(String s) { // Log.e(TAG, "======onDone: 结束" ); runOnUiThread(new Runnable() { @Override public void run() { //在主界面操作 } }); } @Override public void onError(String s) { // Log.e(TAG, "======onError: 错误" ); } }