我有时使用 TextToSpeech
播放一些长文本,我注意到自 Android 4.1.2
起,如果文本超过 4000 个字符,它不会播放。
我没有收到任何错误,但不会播放文本。到目前为止,我只能在 Android 4.1.2
(Samsung Galaxy Nexus、Nexus7)上重现它。
这是 4.1.2
中的错误还是正常现象(虽然我没有找到任何关于此行为的文档)?
我还发现了一个帖子:onUtteranceCompleted() lost if TTS received is too long,它指出了长度超过 4000 个字符的文本的不同问题。
编辑:我尝试将我的字符串拆分为 4k 长度的 block ,并使用 QUEUE_ADD
将其发送到 TTS
,我遇到了另一个 bug : QUEUE_ADD
不起作用,而是刷新现有队列,只播放最后一个 block 。
EDIT2 :这是我对 TTS
mTTS.speak(longText, TextToSpeech.QUEUE_FLUSH, null);
最佳答案
TtsService.java 中的 MAX_SPEECH_ITEM_CHAR_LENGTH = 4000,在 4.1 上我在代码中看到警告:
@Override
public boolean isValid() {
if (mText == null) {
Log.wtf(TAG, "Got null text");
return false;
}
if (mText.length() >= MAX_SPEECH_ITEM_CHAR_LENGTH) {
Log.w(TAG, "Text too long: " + mText.length() + " chars");
return false;
}
return true;
}
看起来 2.3 会拆分文本,所以从理论上讲,您的代码应该在 android < 4.1 上运行,而不是在更新的版本上运行(我不知道拆分何时被删除),相反,您有相反的情况 :) 这有点奇怪
关于超过 4k 个字符的 Android TTS 文本无法播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440251/