安卓 O 新的 TextToSpeech onRangeStart() 回调函数

3
TTS UtteranceProgressListener 的新回调函数 onRangeStart() 可以让我们在 TTS 引擎朗读长短语句时,突出显示其中的单词。该回调在 Android API 文档中定义在 https://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html#onRangeStart(java.lang.String, int, int, int)。但我无法找到有关如何在应用程序将短语(例如句子)发送给 TTS 引擎进行语音生成时实际定义短语范围的信息。

这些“范围”究竟是什么?它们如何定义?或者预先定义为“单词”或任何由空格分隔的内容吗?

更多信息: 我在 Android O 模拟器中创建了 onRangeStart() 回调函数,并在我的 TTS 应用中使用不同的 Google TTS 声音来查看是否自动定义了任何范围并调用了回调函数。但没有发现任何效果。也许这些范围必须在 speak() 调用的“params”Bundle 中定义?


1
我也向Google问题跟踪器报告了关于定义单词级别高亮显示范围缺乏文档的问题,请查看我的报告以及他们的回复:https://issuetracker.google.com/issues/62484359 - gregko
目前使用Android 8 Oreo版本时,使用Google TTS产品的英语TTS语音时,每个单词的发音都会在onRangeStart()中得到回调。最终我将能够在我的TTS应用程序中实现口头单词高亮! - gregko
这个支持库适用于 API 26 之前的版本吗? - rraallvv
1
到目前为止,我还没有看到它被添加到任何支持库中。如果您了解更多信息,请分享。也许值得向Google提供反馈,以通过支持库在旧版Android中提供此功能。 - gregko
谢谢提供信息,嗯,我会搜索一下是否有相关功能请求。 - rraallvv
1个回答

1

谷歌仍未对此功能进行文档记录,对于他们跟踪器中提交的问题的最新回复是“我们将其推迟到以后的发布版本中,但现在暂时保持开放状态。”

同时,在我的TTS应用程序中实现onRangeStart()回调并显示调试输出,我发现“ranges”只是单词。我发现这个回调只在使用谷歌TTS的英语语音时才会触发,我尝试过的其他谷歌或其他公司的TTS语音都没有实现这个功能。例如,朗读一个句子:“This is a sentence to read aloud.” 将在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)

如果谷歌的某个人可以正式告诉我们,“范围”只是单纯的词语,至少目前是这样,那将会非常有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接