【问题标题】:Google Cloud Text-to-speech word timestampsGoogle Cloud 文字转语音单词时间戳
【发布时间】:2019-03-24 04:50:03
【问题描述】:

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

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

【问题讨论】:

  • 我不认为你可以用谷歌云做到这一点,但如果你使用安卓设备和谷歌 TextToSpeech 引擎,你可以这样做:stackoverflow.com/questions/59488998/…
  • 您可以将句子分解为单词作为标记,并通过您自己的代码创建或突出显示单词。您还必须正确配置设置,并且可能必须使用线程同时发送多个单词。可以分享一下代码吗?

标签: text-to-speech speech-synthesis google-text-to-speech


【解决方案1】:

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

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

【讨论】:

  • 我想知道,如果想提供单词突出显示,这会起作用吗?每个字都打分实用吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    在撰写本文时,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

    【讨论】:

    • 这个需要强调一下,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多