用TextToSpeech说长文本的正确方法

时间:2018-04-15 11:00:00

标签: android text-to-speech

我创建了一个使用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刚停止发言。

0 个答案:

没有答案