在Android上使用Text-to-Speech时出现问题isSpeaking()

Mar*_*tój 5 android text-to-speech

我遇到isSpeaking()方法问题.传递QUEUE_FLUSHspeak()方法时,isSpeaking()工作正常.但是,当我对多个话语进行排队时(通过传递QUEUE_ADD),该isSpeaking()方法false在多个话语排队后立即开始返回.

然后我偶然发现TtsService该类的源代码并看到了这段代码:

public boolean isSpeaking() {
  return (mSelf.mIsSpeaking && (mSpeechQueue.size() < 1));
}
Run Code Online (Sandbox Code Playgroud)

有谁有任何想法,为什么这种方法以这种方式实施?

an0*_*00b 8

我也偶然发现了这个.

你提出这个问题已经过去了一年,没有答案就在眼前......

所以我只能猜测编写这段代码的人是故意的

" 只有说出最后一句话 ".

这有意义吗?

唯一的问题是,无论是在模式QUEUE_ADD还是QUEUE_FLUSH模式,经验观察表明存在严重的时间竞争条件:

  1. isSpeaking()如果被调用,将始终返回falseonUtteranceCompleted().
  2. isSpeaking()如果在第一次之后立即调用,则将始终返回true. tts.speak()onUtteranceCompleted()
  3. isSpeaking()如果在最后一个和它自己之间至少有一个s分开之后立即调用,它将始终返回false.tts.speak()tts.speak()onUtteranceCompleted()

在某种程度上,它的行为完全与"预期"相反:

" 只有说出第一个话语 "(在onUtteranceCompleted()之后)

为什么它表现得像这样超出了我,但这至少是LogCat所展示的.

另请注意以下官方文档的补充:

" 请注意,一旦将音频数据发送到音频混音器或写入文件,语音项目就会被视为完整.此点与音频硬件完成播放之间可能存在有限的延迟. "

换句话说,这种方法完全没用.