使用 SSML 进行自定义#

语音合成标记语言 SSML 规范是一种标记语言,用于指导虚拟扬声器的性能。Riva 支持 SSML 的部分功能,允许您调整生成的音频的音调、速率和发音。

本节提供了一些关于如何通过以下 SSML 标签自定义 Riva TTS 的示例

  • prosody 标签支持 rate、pitch 和 volume 属性,通过这些属性我们可以控制生成的音频的速率、音调和音量。

  • phoneme 标签允许我们控制生成的音频的发音。

  • sub 标签允许我们用不同的词或短语替换指定词或短语的发音。

注意

所有 SSML 输入必须是有效的 XML 文档并使用根标签。所有无效的 XML 以及所有使用不同根标签的有效 XML 都将被视为原始输入文本。

速率属性#

Riva 支持速率的百分比相对变化。速率属性的范围为 [25%, 250%]。超出此范围的值会导致记录错误且不返回音频。Riva 还支持 SSML 规范中定义的以下标签:x-lowlowmediumhighx-highdefault

速率属性以以下格式表示

  • rate=”35%”

  • rate=”+200%”

  • rate=”low”

音调属性#

Riva 支持音调的附加相对变化。音调属性的范围为 [-3, 3][-150, 150] Hz。超出此范围的值会导致记录错误且不返回音频。

当使用不以 Hz 结尾的绝对值时,音调会根据该值乘以模型配置中定义的说话者音调标准偏差进行偏移。对于在 LJSpeech 上训练的预训练检查点,标准偏差为 52.185。例如,音调偏移 1.25 会导致 1.25*52.185=~65.23 Hz 的音调向上偏移。

Riva 还支持 SSML 规范中定义的以下标签:x-lowlowmediumhighx-highdefault

音调属性以以下格式表示

  • pitch=”1”

  • pitch=”95hZ”

  • pitch=”+1.8”

  • pitch=”-0.65”

  • pitch=”+75Hz”

  • pitch=”-84.5Hz”

  • pitch=”high”

对于预训练的 Female-1 检查点,标准偏差为 53.33 Hz。对于预训练的 Male-1 检查点,标准偏差为 47.15 Hz。

注意

音调属性不支持 st 和 % 变化。

音量属性#

Riva 支持 SSML 规范中描述的音量属性。音量属性支持 [-13, 8]dB 的范围。超出此范围的值会导致记录错误且不返回音频。支持的标签有 silentx-softsoftmediumloudx-louddefault

音量属性以以下格式表示

  • volume=”+1dB”

  • volume=”-5.7dB”

  • volume=”x-loud”

示例#

使用 prosody 标签自定义速率、音调和音量

python3 python-clients/scripts/tts/talk.py --server 0.0.0.0:50051 \
    --text "<speak><prosody pitch='2.5'>Today is a sunny day</prosody>. <prosody rate='high' volume='+1dB'>But it might rain tomorrow.</prosody></speak>" --language-code en-US

使用 phoneme 标签自定义发音

python3 python-clients/scripts/tts/talk.py --server 0.0.0.0:50051 --text "<speak>You say <phoneme alphabet='ipa' ph='təˈmeɪˌtoʊ'>tomato</phoneme>, I say <phoneme alphabet='ipa' ph='təˈmɑˌtoʊ'>tomato</phoneme>.</speak>" --language-code en-US

使用 sub 标签替换发音

python3 python-clients/scripts/tts/talk.py --server 0.0.0.0:50051 --text "<speak><sub alias='World Wide Web'>WWW</sub> is known as the web.</speak>" --language-code en-US

合成的音频文件 output.wav 将包含应用了 SSML 属性的结果语音。