超过 4k 个字符的 Android TTS 文本无法播放

标签 android text-to-speech android-4.2-jelly-bean

我有时使用 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/

相关文章:

安卓,文本转语音

android - 有没有办法在用户展开通知时更改通知标题?

android - 三星平板电脑中 android 通知 (4.1 +) 中的 BigContentView

java - 在 url 处使用特殊字符进行改造

java - 在 Android 中阅读谷歌图书

android - 文字转语音停止问题

java - 类型必须实现继承的抽象方法 TextToSpeech.OnInitListener.onInit(int)

android - 每行的标题在 android 4.1 收件箱样式通知中应该看起来不同吗?

android - 创建资源 ID 的整数数组

java - 从 Google Play 获取 versionCode 和 VersionName