我的目标是使用Android文本到语音API播放一个文本句子作为语音,同时跟踪当前的口语单词。
为了获得流畅的自然播放,我使用:
tts.speak("This is the sentence", TextToSpeech.QUEUE_FLUSH, null, null)但这样我就无法追踪目前所说的话。
若要在跟踪当前口语单词的同时播放该句子,请执行以下操作:
val words = "This is the sentence".split(" ")
words.forEachIndexed { index, element ->
tts.speak(element, TextToSpeech.QUEUE_ADD, null, index.toString())
}结合了一个UtteranceProgressListener,但是演讲非常草率,没有把它当作一个自然的句子来读。
有没有一种方法,既可以得到一个自然发言的句子,同时跟踪当前的口语单词?
发布于 2018-05-30 08:14:20
如果您查看最新的Android文档,您将注意到API级别26中引入到UtteranceProgressListener中的一个新方法,名为onRangeStart(String utteranceId,int,int,introduced )。
然而,如文件所述:
只有当引擎通过调用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)的设备上,我没有得到回调。
为了测试你需要
如果您的实现支持时间信息,那么您将进行回调,如果不是,您最好的选择是找到另一个引擎实现,或者实现您自己的TextToSpeechService。
https://stackoverflow.com/questions/50586929
复制相似问题