TTS UtteranceProgressListener的新回调函数onRangeStart()将允许我们使用突出显示较长短语的单个单词,就像TTS引擎所说的那样。回调是在https://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html#onRangeStart(java.lang.String,int,int,int)的Android API参考中定义的,但是当应用程序发送短语时,我找不到关于如何在短语中实际定义范围的信息(例如句子) )到TTS引擎进行语音生成。
这些“范围”究竟是什么以及如何定义?或者它们是预先定义为“单词”还是用空格分隔的任何东西?
更多信息:我在我的TTS应用中使用了Android O模拟器并创建了onRangeStart()回调,使用来自Google TTS设置的不同声音来查看是否自动定义了任何范围并且回调将是调用。没有。也许必须在speak()调用的“params”Bundle中以某种方式定义范围???
答案 0 :(得分:0)
Google仍然没有记录此功能,对issue filed in their tracker的最新回复是“我们已将此推迟到将来的版本中,但暂时保持此功能。”
同时通过在我的TTS应用程序中实现onRangeStart()回调并使其显示调试输出,我发现“范围”只是单词。当我使用谷歌TTS的英语语音时,我看到这个回调受到了打击,到目前为止,谷歌或其他公司没有其他TTS声音,实现了这一点。例如,大声朗读一句话:“这是一个大声朗读的句子。”在onRangeStart()中生成以下输出:
onRangeStart(avar-1) start=0, end=4, frame=275 (This) onRangeStart(avar-1) start=5, end=7, frame=3575 (is) onRangeStart(avar-1) start=8, end=9, frame=6270 (a) onRangeStart(avar-1) start=10, end=18, frame=7810 (sentence) onRangeStart(avar-1) start=19, end=21, frame=18535 (to) onRangeStart(avar-1) start=22, end=26, frame=21285 (read) onRangeStart(avar-1) start=27, end=32, frame=25795 (aloud)
如果谷歌的某位官员正式告诉我们“范围”只是单词,至少目前是有用的话会很有帮助。