【问题标题】:onUtteranceCompleted() lost if TTS received is too long如果收到的 TTS 太长,则 onUtteranceCompleted() 丢失
【发布时间】:2011-10-15 08:10:54
【问题描述】:

我刚刚在 Android 的 TTS 引擎中观察到一个“未记录的异常”:如果要说的文本太长(大于 4K 字符),那么针对该特定话语的 onUtteranceCompleted() 将永远不会到达...

还有其他人遇到过这个吗?

这是一个已知的错误或限制吗?

可以做些什么来解决这个问题?

【问题讨论】:

标签: android text-to-speech onutterancecompleted


【解决方案1】:

我不知道限制,因为我更喜欢较小的语音块(在暂停或活动暂停时很有用)。

当您调用 speak 时,您可以使用 queueMode 将新的话语添加到队列的末尾: TextToSpeech.QUEUE_ADD

测试以确保句子听起来没有什么不同,但我认为在截止长度后自动解析下一个句子(或单词,如果需要)会起作用。

【讨论】:

  • +1 是唯一一个接受挑战的人。事实上,通过将长文本分成小块来“伪造”长文本是我现在能想到的唯一解决方法。如果 Google 记录了这一限制,那就太好了。
【解决方案2】:

我不确定这对您的情况是否有帮助,但在类似的情况下,我使用了一个匿名广播接收器和一个 IntentFilter 用于 TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED,如下所示

  filter = new IntentFilter(TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED);
receiver = new BroadcastReceiver(){

        public void onReceive(Context p1, Intent p2)
        {
            if (p2.getAction().equals(TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED) && tts != null)
            {
            //
                //code here
            }
        }
    };
context.registerReceiver(receiver, filter);
    tts = new TextToSpeech(context, this);

希望这可以在某个时候对某人有所帮助

【讨论】:

  • 谢谢,事实证明,这是唯一可以肯定地猜测 TTS 长度的方法。剩下的方法是保存到 mp3。
  • 我们如何知道 mp3 或 Wav 是完全创建的..?需要帮助@djdance
猜你喜欢
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多