为何无法始终使用文本转语音(TTS)?
作者:互联网
我无法弄清楚为什么TTS无法始终如一地工作.我想了解如何改善当前设置.该应用程序从TTS开始,欢迎用户或提示用户说出语音命令.因此,在onCreate中,我仅具有以下内容:
textToSpeech = new TextToSpeech(TTSActivity.this, this);
我的TTSActivity类实现OnInitListener,所以我也有以下重写方法:
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
// TODO Auto-generated method stub
}
@Override
public void one rror(String utteranceId) {
// TODO Auto-generated method stub
}
@Override
public void onDone(String utteranceId) {
//do some work here
}
});
textToSpeech.setLanguage(Locale.US);
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "UniqueID");
ttsString(0);
} else if (status == TextToSpeech.ERROR){
//try to restart TTS
textToSpeech = new TextToSpeech(TTSActivity.this, this);
ttsString(0);
}
} //end onInit() method
一些解释:存在textToSpeech.setOnUtteranceProgressListener(),以便在TTS引擎停止讲话后就可以激活语音识别. map来自HashMap map = new HashMap()和ttsString是我希望TTS讲话的所有字符串.因此,我的ttsString(id#)方法如下所示.在说TTS之前,我先调用ttsString(id#)设置字符串.
private void ttsString(int id)
{
switch (id)
{
case 0:{
metaString = "Say string one";
speakText(metaString);
break;
}
case 1:{
metaString = "Say string two";
speakText(metaString);
break;
}
case 2:{
metaString = "Say string three";
speakText(metaString);
break;
}
}
}
这就是我让TTS发言的方式:
private void speakText(String text) {
if(textToSpeech.isSpeaking()) {
return;
} else {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, map);
}
}
我没有收到TTS未绑定的错误,所有操作都在某个时间点进行,但并不一致.换句话说,有时程序会说话,有时却不会.你建议我做什么?重组?
解决方法:
一些提示:
在您的if(状态== TextToSpeech.ERROR)中,调用ttsString(0);将始终失败,因为TTS尚未初始化.
您似乎没有调用tts.shutdown().实际上,我会在onStart()中初始化tts,并在onStop()中调用shutdown().
在我的应用程序中,我已将TTS投入使用,因此在配置更改期间重新创建我的活动/片段时,不必理会所有初始化/取消初始化.
查看logcat,应该看到任何错误.据我记得,问题出在使用svox语音时,出现了奇怪的错误,原因是未正确调用shutdown.
标签:text-to-speech,android 来源: https://codeday.me/bug/20191122/2056447.html