我创建了一个使用TextToSpeech
来讲长文本(例如书籍)的应用程序。然而,由于tts不能说长于TextToSpeech.getMaxSpeechInputLength()
的文本,我决定将其分成句子。我使用UtteranceProgressListener
来检测我可以让tts说下一句话的时间点。
TextToSpeech tts...
...
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
...
}
@Override
public void onDone(String utteranceId) {
HashMap<String, String> alarm = new HashMap<>();
alarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "SOME MESSAGE");
// segment holds current sentence
tts.speak(segment, TextToSpeech.QUEUE_FLUSH, alarm);
}
@Override
public void onError(String utteranceId) {
Log.e("TTS", utteranceId);
}
});
它有效,但仅限前15-20分钟。之后tts突然停止。它可能发生在一个单词的中间。可能是什么原因?应用程序没有崩溃,所以我认为没有堆栈溢出。我的应用程序中有一个播放按钮。所以每次这样的失败之后我按它继续播放。找出原因可以做些什么?
问题发生时,不会抛出任何异常,也不会调用onError()
。
我还尝试评估speak()
的返回值,但它是SUCCESS
。 TTS刚停止发言。