使用 SSML 说话时如何跳过部分文本

Posted

技术标签:

【中文标题】使用 SSML 说话时如何跳过部分文本【英文标题】:How to skip some section of text while speaking using SSML 【发布时间】:2010-10-05 06:13:57 【问题描述】:

是否有一些 SSML 标签等,以从说话中删除特定的文本行。是的,我知道我可以使用字符串函数将其删除,然后再将其发送到语音合成器。但我的问题是,有没有办法标记或标记某些文本,使其无法播放。我正在为这个问题寻找一些基于 XML 的解决方案。

【问题讨论】:

【参考方案1】:

方法有很多,你应该弄清楚你想要完成什么。

也许其中之一会对您有所帮助:

   1. standard XML comment <!-- -->
   2. <sub alias=" "> your text </sub>
   3. <audio src='short_silence.wav'> your text </audio>
   4. <prosody volume='silent'> your text </prosody>

【讨论】:

谢谢,我终于通过字符串操作函数完成了,因为删除未使用的文本更加容易和有效。但是您的答案是正确且可接受的解决方案。感谢您的回答,由于赏金已过期,无法标记为已接受。【参考方案2】:

我想知道 XML 注释是否是您想要完成的有效解决方案:

<!-- <say-as interpret-as="telephone" format="39">+39.347.7577577</say-as> -->

或者:

<say-as interpret-as="telephone" format="39"><!-- +39.347.7577577 --></say-as>

希望这会有所帮助。

【讨论】:

不评论,我需要其他方式跳过该部分【参考方案3】:

快速查看SSML Documentation from W3C,我找到了prosody 元素。

您可以通过将音量设置为 0 并将持续时间设置为非常小的值来跳过该部分。

将音量设置为零应该会抑制音频输出,但“阅读”该部分可能需要与大声朗读一样的时间。如果您还设置了持续时间,您应该能够基本上“跳过”该部分(快速默读)。

你必须尝试看看这是否有效。

【讨论】:

总有一个您可以为朗读文本设置的最大速率,也不是所有的声音都会自己处理音量。 是的,但我认为您没有其他选择。如果您可以在 XML 和合成器之间插入预解析器,则可以定义一个 标记,并使用字符串函数剥离这些标记,就像您说的那样。至少文本仍会在源 XML 中,因为这似乎是您的要求。【参考方案4】:

使用元标记可能会提供一些解决方案。

<speak>This is spoken <meta  content="this is not spoken"/> </speak>

【讨论】:

以上是关于使用 SSML 说话时如何跳过部分文本的主要内容,如果未能解决你的问题,请参考以下文章

TTS:如何将文本转换为 SSML?

Google 上的 SSML Actions,更改说话语言

Curl 文本到语音中的 SSML 代码 IBM Watson

Speak Text, Speak SSML

如何将 SSML 合并到 Python 中

如何从 Google Cloud text-to-speech API 获取 SSML <mark> 时间戳