mag*_*ber 1 android text-to-speech kotlin
我的目标是使用Android Text-to-speech API将一段文本作为语音播放,同时跟踪当前所说的单词。
为了获得流畅的自然播放,我使用:
tts.speak("This is the sentence", TextToSpeech.QUEUE_FLUSH, null, null)
Run Code Online (Sandbox Code Playgroud)
但后来我无法跟踪当前所说的话。
要在跟踪当前说出的单词的同时播放句子,我使用:
val words = "This is the sentence".split(" ")
words.forEachIndexed { index, element ->
tts.speak(element, TextToSpeech.QUEUE_ADD, null, index.toString())
}
Run Code Online (Sandbox Code Playgroud)
与 UtteranceProgressListener 结合使用,但随后语音非常生涩,不能作为自然句子读回。
有没有办法让自然说出的句子同时跟踪当前说出的单词?
小智 5
如果您查看最新的 Android 文档,您会注意到 API 级别 26 中的 UtteranceProgressListener 引入了一个新方法 - 称为 onRangeStart((String utteranceId, int start, int end, int frame)
但是,正如文档所述:
“仅当引擎通过调用 rangeStart(int, int, int) 提供计时信息时才调用”
这是在 SynthesisCallback 中实现的:https : //developer.android.com/reference/android/speech/tts/SynthesisCallback.html#rangeStart(int,%20int,%20int)
再次文档指出:
“服务可能会调用此方法来提供有关语音文本的时间信息。”
因此,遗憾的是,这意味着提供您需要的计时信息的回调取决于实现。
在运行 Android 8.0.0 并使用默认 tts 引擎 (com.google.android.tts) 的设备上,我没有收到回调。
为了进行测试,您需要
如果您的实现支持时间信息,您将进行回调,如果不支持,那么您最好的选择是找到另一个引擎实现或实现您自己的 TextToSpeechService。
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |