Mar*_*tój 5 android text-to-speech
我遇到isSpeaking()方法问题.传递QUEUE_FLUSH给speak()方法时,isSpeaking()工作正常.但是,当我对多个话语进行排队时(通过传递QUEUE_ADD),该isSpeaking()方法false在多个话语排队后立即开始返回.
然后我偶然发现了TtsService该类的源代码并看到了这段代码:
public boolean isSpeaking() {
return (mSelf.mIsSpeaking && (mSpeechQueue.size() < 1));
}
Run Code Online (Sandbox Code Playgroud)
有谁有任何想法,为什么这种方法以这种方式实施?
我也偶然发现了这个.
你提出这个问题已经过去了一年,没有答案就在眼前......
所以我只能猜测编写这段代码的人是故意的
" 只有说出最后一句话 ".
这有意义吗?
唯一的问题是,无论是在模式QUEUE_ADD还是QUEUE_FLUSH模式,经验观察表明存在严重的时间竞争条件:
isSpeaking()如果被调用,将始终返回falseonUtteranceCompleted().isSpeaking()如果在第一次之后立即调用,则将始终返回true. tts.speak()onUtteranceCompleted()isSpeaking()如果在最后一个和它自己之间至少有一个s分开之后立即调用,它将始终返回false.tts.speak()tts.speak()onUtteranceCompleted()在某种程度上,它的行为完全与"预期"相反:
" 只有说出第一个话语 "(在onUtteranceCompleted()之后)
为什么它表现得像这样超出了我,但这至少是LogCat所展示的.
另请注意以下官方文档的补充:
" 请注意,一旦将音频数据发送到音频混音器或写入文件,语音项目就会被视为完整.此点与音频硬件完成播放之间可能存在有限的延迟. "
换句话说,这种方法完全没用.
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |