首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用语句ids实现句子的流畅语篇对词性

如何用语句ids实现句子的流畅语篇对词性
EN

Stack Overflow用户
提问于 2018-05-29 14:29:19
回答 1查看 1.6K关注 0票数 1

我的目标是使用Android文本到语音API播放一个文本句子作为语音,同时跟踪当前的口语单词。

为了获得流畅的自然播放,我使用:

代码语言:javascript
运行
复制
tts.speak("This is the sentence", TextToSpeech.QUEUE_FLUSH, null, null)

但这样我就无法追踪目前所说的话。

若要在跟踪当前口语单词的同时播放该句子,请执行以下操作:

代码语言:javascript
运行
复制
val words = "This is the sentence".split(" ")
words.forEachIndexed { index, element ->
    tts.speak(element, TextToSpeech.QUEUE_ADD, null, index.toString())
}

结合了一个UtteranceProgressListener,但是演讲非常草率,没有把它当作一个自然的句子来读。

有没有一种方法,既可以得到一个自然发言的句子,同时跟踪当前的口语单词?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-30 08:14:20

如果您查看最新的Android文档,您将注意到API级别26中引入到UtteranceProgressListener中的一个新方法,名为onRangeStart(String utteranceId,int,int,introduced )。

https://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html#onRangeStart(java.lang.String,%20int,%20int,%20int)

然而,如文件所述:

只有当引擎通过调用rangeStart(int、int、int)来提供定时信息时,才调用

这是在SynthesisCallback:https://developer.android.com/reference/android/speech/tts/SynthesisCallback.html#rangeStart(int,%20int,%20int)中实现的

文件再次指出:

“服务可以调用此方法来提供有关口语文本的计时信息。”

因此,遗憾的是,这意味着提供所需时间信息的回调依赖于实现。

在运行Android8.0.0并使用默认tts引擎(com.google.android.tts)的设备上,我没有得到回调。

为了测试你需要

  • 使用SDK第26级或更高级别进行构建
  • 实现您自己的UtteranceProgressListener
  • 通过调用TextToSpeech.setOnUtteranceProgressListener(listener);将其设置为TextToSpeech引擎
  • 重写onRangeStart(String,int,int,int)方法在您的UtteranceProgressListener中。

如果您的实现支持时间信息,那么您将进行回调,如果不是,您最好的选择是找到另一个引擎实现,或者实现您自己的TextToSpeechService。

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

https://stackoverflow.com/questions/50586929

复制
相关文章

相似问题

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