首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈?为什么playEarcon()不生成onUtteranceCompleted()?

哈?为什么playEarcon()不生成onUtteranceCompleted()?
EN

Stack Overflow用户
提问于 2012-04-13 02:51:00
回答 1查看 775关注 0票数 3

我在一本安卓书中指出,使用TextToSpeech.playEarcon()比播放音频文件(使用MediaPlayer)更可取,因为:

我们不需要确定播放可听提示的合适时机,而是依赖回调来获得正确的时间,相反,我们可以在发送给TTS引擎的文本中排队。然后,我们知道,我们的耳塞将在适当的时间播放,我们可以使用相同的途径来获取我们的声音给用户,包括onUtteranceCompleted()回调,让我们知道我们在哪里。

但我对此的简短实验表明,这个不是--情况是这样的:

代码语言:javascript
复制
String utteranceId = String.valueOf(utteranceNum++);
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId);
params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC));
tts.speak("FIRST part of sentence", TextToSpeech.QUEUE_ADD, params);

utteranceId = String.valueOf(utteranceNum++);
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId);
params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC));
tts.playEarcon("[fancyring]", TextToSpeech.QUEUE_ADD, params);

utteranceId = String.valueOf(utteranceNum++);
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId);
params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC));
tts.speak("SECOND part of sentence", TextToSpeech.QUEUE_ADD, params);

当我检查来自onUtteranceCompleted()的日志时,我只看到了tts.speak()播放的日志的utteranceIds,而没有看到tts.playEarcon()播放的日志。

为什么会有这种差异呢?有办法解决这个问题吗?

P.S.冒着声明显而易见的风险:所有三个话语都表现得很好,顺序也很正确。只有onUtteranceCompleted()才不会因为tts.playEarcon()的某些原因而被调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-13 16:48:10

回答我自己。关于TextToSpeech.OnUtteranceCompletedListener的冗长而详细的文档读起来令人难以置信(重点是我的):

当一个话语被合成时调用

耳石从来不是合成的结果,因此,onUtteranceCompleted()当然不会被调用。这是故意的。

这让我们回到了一个新的问题:如果使用.mp3文件(使用MediaPlayer)没有好处,那么为什么要使用耳罩呢?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10134646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档