最近在做一个有关于语音播报的功能,在安卓原生TextToSpeech 中可以支持文字转语音的语音播报功能,对于英文的文字,应该都会支持转成语音,但是对于中文的文字,你手机中不一定有中文语言包,所以不一定可以转成中文语音。据研究现在的大部分机型都支持中文,如华为,小米之类的手机中的TTS都是“科大讯飞”或者“度秘”的TTS,这类的TTS是可以支持中文的,具体可以到设置中搜索TTS查看,我就不多说这方面的东西了。
1.下面先介绍一下setOnUtteranceCompletedListener的用法吧,这个方法就是监听语音播报完成之后的回调,很多人用了也设置了这个监听,但是没有回调,这是为什么呢?因为我们在设置播放语音的时候,习惯性的把最后一个参数设置为null,事实上要使用setOnUtteranceCompletedListener方法是要用到最后一个参数的。
tts.setPitch(1.0f);
// 设置语速
tts.setSpeechRate(1.0f);
final HashMap ttsOptions = new HashMap<>();
ttsOptions.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utterance");//utterance,这个参数随便写,用于监听播报完成的回调中
tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener(){
int i=0;
@Override
public void onUtteranceCompleted(String s) { //这个s就是上面写的utterance,
if (i<3){//简单的做了个播报三次的功能
tts.speak("这是一条语音播报", TextToSpeech.QUEUE_FLUSH, ttsOptions);
i++;
}
}
});
tts.speak("这是一条语音播报", TextToSpeech.QUEUE_FLUSH, ttsOptions);
这样setOnUtteranceCompletedListener就生效了。
2.事实上我们在写这段代码的时候可以看到上述写法setOnUtteranceCompletedListener已经过期了,代替方法成了setOnUtteranceProgressListener,这个方法是比较好用,多了两个功能具体的用法就不多说了。
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
int i=0;
@Override
public void onStart(String s) {//开始播放
}
@Override
public void onDone(String s) {//完成之后
if (i<3){
tts.speak("这是一条语音播报", TextToSpeech.QUEUE_FLUSH, ttsOptions);
i++;
}
}
@Override
public void onError(String s) {//播放错误的处理
}
});