了解 SSML
语音合成标记语言 (SSML) 是一种基于 XML 的标记语言,为语音合成应用程序提供文本注释。 根据 VoiceXML 2.0 规范,W3C 语音浏览器工作组建议将 SSML 用作语音合成的标准标记语言。 SSML 为语音应用程序的开发者提供了一种标准方法,通过支持开发者利用标记来指定发音、音量、音高、语速和其他属性,从而控制合成过程的各个方面。 您可以使用 SSML 控制所有支持语言的文本合成。
IBM Watson® Text to Speech 服务基于 W3C 于 2010 年 9 月 7 建议的 SSML 版本 1.1。 有关W3CSSML 建议的更多信息,请参阅 W3C语音合成标记语言(SSML)1.1版。
SSML 简介
SSML 的运作方式是通过一组预定义的元素或标记来扩充传递到合成器的纯文本。 XML 解析器首先将纯输入文本与标记规范分离。 这些规范随后就会作为一组指令,以合成器可理解并能生成所需效果的格式进行处理和发送。 为了使 XML 解析器能执行此作业,需要正确设置标记的格式;例如,元素必须有结束标记,并且多个元素必须正确嵌套。 有关 XML 基本概念的介绍,请参见 w3schools.com/xml/xml_whatis.asp。
SSML 元素是包含在开始标记及其匹配的结束标记内的任何内容(包括开始和结束标记)。 如以下示例中所示,元素可以包含其他元素(标记可以嵌套)和文本的组合。 此外,元素可以要求或可选择接受设置为特定值的属性。
<tag1>
<tag2 attributeName="attributeValue">
... some text ...
</tag2>
</tag1>
完整合法的 SSML 文档由 XML 序言(包含编码和验证 SSML 文档所依据的模式等信息)和根元素 <speak>
组成。 在 <speak>
元素的跨度内,您可以指定要合成的文本,并用其他元素加以补充。
<?xml version="1.0" encoding="UTF-8"?>
<speak version="1.1">
... the body that contains text to be synthesized plus markup ...
</speak>
传递到服务的文本不需要 XML 序言。 该服务支持 SSML 片段,即不包含完整 XML 头且不需要包含其父元素的 SSML 元素。 例如,对于您发送以进行合成的 SSML,<?xml>
和 <speak>
元素始终是可选的。
SSML 支持
有关在服务中使用 SSML 和相关功能的更多信息,请参阅以下内容:
- 该服务实现了大部分 W3C 规范并支持 SSML 片段。
- 该服务支持增强神经和表达神经声音的其他合成功能:
- 该服务支持用于表达神经声音的其他合成功能:
- 该服务支持合成功能,使您能够控制如何为德语声音拼写字母数字字符串。 有关更多信息,请参阅 指定字符串拼写方式。
- 该服务支持将 SSML
<mark>
元素与 WebSocket 接口配合使用,以获取生成的音频的词的计时信息。 WebSocket 接口还允许您请求输入文本的所有字符串的信息。 有关更多信息,请参阅 - 该服务的定制界面支持使用 SSML
<phoneme>
元素来指定用于发音的拼音。 音标拼法表示一个单词的读音、如何将这些读音分成音节以及哪些音节受重音。
SSML 验证
服务会验证您在任何内容中作为用于合成的输入文本或者作为用于定制的词转换项的定义而提交的所有 SSML 元素。 服务无法提前确定提交用于合成的文本是否包含 SSML 元素。 因此,它会对所有输入文本执行相同的验证,而不管其中是否包含 SSML。
验证元素和属性
该服务对 SSML 元素和属性执行以下验证:
-
所有 SSML 输入必须正确且格式无误。
-
服务以静默方式忽略不支持的 SSML 元素。 服务合成包含在不受支持元素的标记中的文本; 仅忽略该元素。
-
服务针对无效 SSML 元素或属性返回 HTTP 400 错误代码。 指定需要属性的 SSML 元素时:
- 必须指定必需属性。
- 必须为必需属性指定有效值。
- 如果包含其他无效属性或值,那么将忽略这些属性或值。
如果请求失败,那么错误响应包含描述性消息。 例如,假设您指定以下输入文本,其中包含
<say-as>
元素:"text": "The price is <say-as interpret-as=\"currency\">$2,500.00</say-as>."
在此示例中,需要并指定
interpret-as
属性,但其值无效。 属性的有效值为vxml:currency
,而不是currency
。 错误响应包含以下消息:The connection to the Watson Text to Speech service closed with the following error: Tag <say-as> has invalid attribute interpret-as=currency
SSML 错误摘要
表 1 描述了许多常见 SSML 验证错误。 在每种情况下,请求都会失败,并且服务会返回 400 错误代码。
验证错误 | 问题描述 |
---|---|
SSML 元素无效 | 例如,您未正确指定标记,省略了必需属性,或者包含开始标记,但未包含匹配的结束标记。 |
未转义的 XML 控制字符 | The input text itself contains a " , ' , & , < , > , or / character instead of its equivalent escape string or character encoding. 有关更多信息,请参阅对 XML 控制字符转义。 |
音节重音无效 | IBM的 ph 元素的 <phoneme> 属性包含无效的音节重音。SPR 包含无效音节重音。 有关指示音节和音节压力的更多信息,请参阅 指定音节。 |
无效音标符号 | <phoneme> 元素的 ph 属性包含指定语言不支持的 IPA 或 SPR 符号。 |
无元音 | <phoneme> 元素的 ph 属性指定不含元音的单词发音。 |
在无效地点的法国联络员 | 在 <phoneme> 元素的 ph 属性中,联络字符不在辅音之后,或者出现在单词发音的中间。 |
日语 : 符号不在元音之前 |
在日语中 <phoneme> 元素的 ph 属性中,: 字符不会出现在元音之前(中间可能有其他符号,如音节边界)。 |
SSML <prosody> 元素使用无效 |
不能在任何语音中使用 <prosody> 元素的 contour 、duration 、range 和 volume 属性。 |
SSML <express-as> 元素使用无效 |
只能将 <express-as> 元素用于表达神经声音。 |