Google Cloud Text-to-speech 单词时间戳

Google Cloud Text-to-speech word timestamps

我正在通过 Google Cloud 的文本转语音 API 生成语音,我想在朗读时突出显示单词。

有没有办法获取口语或句子的时间戳?

这个问题似乎很受欢迎,所以我想我应该分享一下我最后做了什么。此方法可能仅适用于英语或类似语言。

我首先根据任何导致说话中断的标点符号拆分文本。每个 "sentence" 单独转换为语音。生成的音频文件在末尾有看似随机的静音量,需要在加入它们之前将其删除,这可以使用 FFmpeg silencedetect 过滤器来完成。然后,您可以以适当的间隙加入音频文件。可以在句子中线性插入近似的单词时间戳。

您可以使用 SSMLv1beta1 版本的 Google Cloud text-to-speech API: https://cloud.google.com/text-to-speech/docs/reference/rest/v1beta1/text/synthesize#TimepointType

  1. <mark> SSML 标记添加到文本中您想要时间戳的位置(可能在每个句子的末尾)。
  2. 将 TimepointType 设置为 SSML_MARK。如果不设置该字段,则默认不返回时间点。

Google 的文本转语音 API 在撰写本文时的 v1beta1 版本中支持此功能。

在 Python 中(例如)您需要更改导入自:

from google.cloud import texttospeech as tts

至:

from google.cloud import texttospeech_v1beta1 as tts

您必须使用 SSML,而不是纯文本,并在 XML.

中使用 <mark>

综合请求需要设置enable_time_pointing标志。在 Python 中看起来像:

    response = client.synthesize_speech(
        request=tts.SynthesizeSpeechRequest(
            ...
            enable_time_pointing=[
                tts.SynthesizeSpeechRequest.TimepointType.SSML_MARK]
        )
    )

对于可运行的示例,see my answer on this question