gpt4 book ai didi

android - 如何使用话语 ID 实现句子的流畅文本到语音转换

转载 作者:行者123 更新时间:2023-11-29 15:35:49 26 4
gpt4 key购买 nike

我的目标是使用Android Text-to-speech 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 结合使用,但语音非常不稳定,并且不能作为自然句子读回。

有没有办法既获得自然说出的句子,又同时跟踪当前所说的单词?

最佳答案

如果您查看最新的 Android 文档,您会注意到 API 级别 26 中向 UtteranceProgressListener 引入了一个新方法 - 称为 onRangeStart((String utteranceId, int start, int end, int frame)

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)

文档再次指出:

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

因此,遗憾的是,这意味着提供您所需的计时信息的回调取决于实现。

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

为了进行测试,您需要

  • 针对 SDK 级别 26 或更高级别进行构建
  • 实现您自己的 UtteranceProgressListener
  • 通过调用 TextToSpeech.setOnUtteranceProgressListener(listener) 将其设置为 TextToSpeech 引擎;
  • 重写 onRangeStart(String, int, int, int) 方法话语进度监听器。

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

关于android - 如何使用话语 ID 实现句子的流畅文本到语音转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50586929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com