IBM Cloud Docs
SSML 元素

SSML 元素

通过IBM Watson® Text to Speech服务,您可以使用大多数语音合成标记语言(SSML)元素和属性来控制文本的合成。

支持的元素和属性

表 1 概述了该服务对 SSML 元素和属性的支持:

  • 完全表示服务完全支持通过其 HTTP 和 WebSocket 接口使用该元素或属性。
  • 部分 表示服务对元素或属性的支持受到以下某种方式的限制:
    • 该服务仅支持元素或属性的某些方面。
    • 服务仅支持具有部分声音的元素或属性。
    • 服务仅支持其接口 (HTTP 或 WebSocket) 之一的元素或属性。
  • 表示服务不支持该元素或属性。

以下部分提供了每个元素或属性的描述,包括示例,限制以及服务的支持是否与标准 SSML 不同。 对某些属性和值的支持与 SSML 规范略有不同。 更多信息,请参阅 W3C语音合成标记语言(SSML)1.1版

SSML 元素和属性
元素或属性 支持 元素或属性 支持
<audio> 元素 <prosody> 元素 部分
<break> 元素 完全 -轮廓属性
<desc> 元素 -duration 属性
<emphasis> 元素 部分 完全
<express-as> 元素 部分 -range 属性
<lexicon> 元素 完全
<mark> 元素 部分 -卷属性
<meta> 元素 <say-as> 元素 部分
<metadata> 元素 部分
<paragraph> 元素 完全 <sentence> 元素 完全
<phoneme> 元素 完全 <speak> 元素 完全
<sub> 元素 完全
<voice> 元素

<audio> 元素

这个 "<audio> 元素将录音元素插入服务生成的音频中。 不支持此元素。

<break> 元素

<break> 元素在口语文本中插入一个停顿。 此元素具有以下可选属性:

  • strength 指定各种不同强度值的停顿长度:
    • none 禁止在处理期间可能生成的停顿。
    • x-weakweakmediumstrongx-strong 会插入强度依次递增的停顿。
  • time 指定停顿的长度(以秒或毫秒为单位)。 有效值的格式为 {integer}s(表示秒)或 {integer}ms(表示毫秒)。
Break size <break strength="none"/> no pause
Break size <break strength="x-weak"/> x-weak pause
Break size <break strength="weak"/> weak pause
Break size <break strength="medium"/> medium pause
Break size <break strength="strong"/> strong pause
Break size <break strength="x-strong"/> x-strong pause
Break size <break time="1s"/> one-second pause
Break size <break time="1500ms"/> 1500-millisecond pause

<desc> 元素

<desc> 元素只能出现在 "<audio> 元素中。 因为不支持“<audio> 元素,所以也不支持”<desc> 元素。

<emphasis> 元素

支持 <emphasis> 元素仅用于表达神经声音。

通过表达神经声音,您可以使用 <emphasis> 元素来强调或取消强调输入文本的一个或多个词。 该元素支持接受下列其中一个值的可选 level 属性:

  • none-阻止服务强调可能被强调的文本。
  • moderate-提供明显的文本强调。 如果省略 level 属性,那么此级别是缺省值。
  • strong-提供比中等级别提供的更重要的文本强调。
  • reduced-通过倾向于降低文本在音频中的显着性来取消强调文本。 这个层次与强调文本是相反的。

以下示例将 moderate 级别应用于单词 give:

I am going to <emphasis level="moderate">give</emphasis> her the book.

有关更多信息,请参阅 强调单词

<express-as> 元素

<express-as> 元素是特定于 Text to Speech 服务的 SSML 扩展。 它仅支持与表现性神经声音配合使用。

通过表达神经声音,您可以使用 <express-as> 元素来应用说话样式,以增强服务对所有或部分输入文本的特定特征的强调。 该元素支持接受以下某种语言样式的必需 style 属性:

  • cheerful-表示快乐和好消息。
  • empathetic-表示同情和同情。
  • neutral-表示客观性和均衡性。
  • uncertain-表示混淆和不确定。

以下示例将 cheerful 样式应用于整个输入文本:

<express-as style="cheerful">Oh, that's good news! I'm glad that we could help.</express-as>

有关更多信息,请参阅 使用讲话样式

<lexicon> 元素

这个 "<lexicon> 元素为给定的 SSML 文档引入了发音词典。 不支持此元素。

可以使用服务的定制接口来定义在语音合成期间使用的定制条目(词/转换项对)字典。 有关更多信息,请参阅了解定制

<mark> 元素

<mark> 元素仅受服务的WebSocket接口支持,而不受其 HTTP 接口支持,后者会忽略该元素。 有关更多信息,请参阅指定 SSML 标记

<mark> 元素是一个空元素,用于在要合成的文本中放置标记。 当 "<mark> 元素前面的所有文本都已合成时,客户端会收到通知。 此元素接受单个 name 属性,用于指定唯一标识 mark 的字符串;名称必须以字母数字字符开头。 名称会与在合成音频中遇到 mark 的时间一起返回。

Hello <mark name="here"/> world.

<meta><metadata> 元素

<meta> 和 "<metadata> 元素是放置文档信息的容器。 不支持这两个元素。

<paragraph><sentence> 元素

<paragraph>(或 "<p>)和 "<sentence>(或 "<s>)元素是可选元素,可用于提示文本结构。 如果“<paragraph> 或”<sentence> 元素所包含的文本没有以句末标点符号(如句号)结束,该服务就会在合成音频中添加比正常时间更长的停顿。

其中任一元素的唯一有效属性是 xml:lang,此属性允许切换语言。 不支持此属性。

<paragraph>
  <sentence>Text within a sentence element.</sentence>
  <s>More text in another sentence.</s>
</paragraph>

<phoneme> 元素

<phoneme> 元素提供了所附文本的拼音发音。 音标拼读表示词的发音、对发音划分音节的方式以及哪些音节重读。 此元素具有两个属性:

  • alphabet 是可选属性,用于指定要使用的音位。 支持的 alphabet 包括:

    • 标准国际音标 (IPA): alphabet="ipa".
      • IBM。符号语音表示(SPR):* alphabet="ibm".

    如果未指定任何 alphabet,那么缺省情况下,服务会使用 IBM SPR。 有关更多信息,请参阅 了解音标符号

  • ph 是必需属性,用于以所指示的 alphabet 提供发音。 以下示例显示了词 tomato 的这两种格式的发音:

    • IPA 格式:

      <phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ">tomato</phoneme>
      
    • 具有 Unicode 符号的 IPA 格式:

      <phoneme alphabet="ipa" ph="t&#x0259;&#x02C8;me&#x026A;.&#x027E;o&#x028A;">tomato</phoneme>
      
    • IBM SPR 格式:

      <phoneme alphabet="ibm" ph=".0tx.1me.0Fo">tomato</phoneme>
      

有关在 "<phoneme> 元素中使用 SPR 和 IPA 符号的更多信息,请参阅 了解音标

<prosody> 元素

<prosody> 元素控制文字的音调和语速。 所有属性都是可选的,但如果未对元素指定至少一个属性,那么会发生错误。

该服务支持 SSML 规范的以下两个属性:

SSML 规范还提供了服务不支持的四个属性:

  • contour 属性
  • range 属性
  • duration 属性
  • volume 属性

该服务还支持查询参数,这些参数允许您调整语音合成请求的所有文本的速率和间距。 有关参数及其与 <prosody> 元素的 pitchrate 属性的交互的更多信息,请参阅

与 SSML V 1.1 规范的差异

Text to Speech 服务将其 SSML 支持基于 W3C 语音合成标记语言(SSML)V 1.1。 但是,自服务首次发布以来,SSML 规范已发生了演变。 为了保持用户的向后兼容性,服务继续支持 <prosody> 元素的某些不同于最新 SSML 规范的功能。

  • 对于 pitch 属性, 服务支持以下附加功能:

    • 由带符号或无符号数字指示的百分比相对变化,后跟 % (百分号)。 语音的缺省间距相当于传递值 0%
    • 由有符号或无符号数字指示并后跟字符串 st 的半符号的相对更改。
  • 对于 rate 属性, 服务支持以下附加功能:

    • 由带符号或无符号数字指示的百分比相对变化,后跟 % (百分号)。 语音的缺省话语率相当于传递值 0%
    • 没有单位指定的数字指定每分钟的字数。 该数字是绝对的; 不能指定每分钟字数的相对增加或减少。
  • 对于表现力神经声音, pitchrate 属性仅支持百分比值。

    • 对于 pitch 属性,请勿使用 Hertz,semitones 或关键字。
    • 对于 rate 属性,请勿使用每分钟的词或关键字。

有关 SSML V 1.1支持的功能的更多信息,请参阅 SSML 规范的 3.2.4 prosody Element 部分。

pitch 属性

pitch 属性可修改元素内文本的基线音高或音调。 接受的值如下:

  • *一个数字,后跟 "Hz(赫兹)符号:*基线音高被移调(向上或向下)到指定值。 例如,150Hz
  • *以百分比表示的相对变化:*与默认基线相比发生相对变化的数字。 The number is preceded by + (an increase) or - (a decrease) and followed by a % (percent sign). 后跟 % 的无符号数字将被解释为正增长。 例如,+10%10%。 语音的缺省间距相当于传递值 0%
  • *以半音为单位的相对变化:*与默认基线相比发生绝对偏移的数字。 数字前面是 "+(增量)或 "-(减量),后面是 "st(半音)。 后跟 st 的无符号数字将被解释为正增长。 例如,+5st5st
  • *一个关键字:*以下六个关键字之一,可将音高修改为相应的预定义值:
    • default 使用服务的缺省基线音高。
    • x-low 将音高基线下移 12 个半音程。
    • low 将音高基线下移 6 个半音程。
    • medium 产生的行为与 default 相同。
    • high 将音高基线上移 6 个半音程。
    • x-high 将音高基线上移 12 个半音程。

对于 pitch 属性,表现性神经声音仅支持百分比值。 它们不支持使用 Hertz,semitones 或关键字。

确定适用于应用程序的最佳方法是根据百分比进行调整并使用不同值进行试验。 请先尝试增量更改 5% 或 10%,然后再进行更重大的修改。

<prosody pitch="150Hz">Transpose pitch to 150 Hz</prosody>
<prosody pitch="-20Hz">Lower pitch by 20 Hz from baseline</prosody>
<prosody pitch="+20Hz">Increase pitch by 20 Hz from baseline</prosody>
<prosody pitch="-10%">Decrease pitch by 10 percent</prosody>
<prosody pitch="+10%">Increase pitch by 10 percent</prosody>
<prosody pitch="-12st">Lower pitch by 12 semitones from baseline</prosody>
<prosody pitch="+12st">Increase pitch by 12 semitones from baseline</prosody>
<prosody pitch="x-low">Lower pitch by 12 semitones from baseline</prosody>

rate 属性

rate 属性用于指示 prosody 元素内文本的语速变化。 接受的值如下:

  • 没有指定单位的数字: 速率更改为每分钟指定的字数。 例如,值 50 指示每分钟 50 个词的发言速率。 该数字是绝对的; 不能指定每分钟字数的相对增加或减少。
  • *百分比的相对变化:*导致默认发言率相对变化的数字。 The number is preceded by + (an increase) or - (a decrease) and followed by a % (percent sign). 后跟 % 的无符号数字将被解释为正增长。 例如,+10%10%。 语音的缺省话语率相当于传递值 0%
  • *一个关键字:*以下六个关键字之一,可将发言速率修改为相应的预定义值:
    • default 使用服务的默认发言率。
    • x-slow 使语速降低 50%。
    • slow 使语速降低 25%。
    • medium 产生的行为与 default 相同。
    • fast 使语速增加 25%。
    • x-fast 使语速增加 50%。

对于 rate 属性,表现性神经声音仅支持百分比值。 它们不支持每分钟的单词或关键字。

确定适用于应用程序的最佳方法是根据百分比进行调整并使用不同值进行试验。 请先尝试增量更改 5% 或 10%,然后再进行更重大的修改。

<prosody rate="50">Set speaking rate to 50 words per minute</prosody>
<prosody rate="-5%">Decrease speaking rate by 5 percent</prosody>
<prosody rate="+5%">Increase speaking rate by 5 percent</prosody>
<prosody rate="slow">Decrease speaking rate by 25%</prosody>
<prosody rate="fast">Increase speaking rate by 25%</prosody>

<say-as> 元素

<say-as> 元素提供了该元素所含文本类型的信息,并指定了呈现文本的详细程度。

  • 此元素有一个必需属性 interpret-as,用于指示如何解释所含文本。
  • The element has two optional attributes, format and detail, which are used only with particular values of the interpret-as attribute, as shown in the following examples.

该服务支持具有以下语言的 <say-as> 元素:

  • 该服务完全支持美国英语的 <say-as> 元素。
  • 对于大多数其他语言,服务仅支持该元素的 digits 属性和 letters 属性。
  • 对于日语,服务仅支持 digits 属性。 该服务将忽略包含在数字字符串中的非数字字符。

服务的缺省字母,数字和字母数字字符串发音因语言而异,每种语言都有自己的规则。 您可以使用 <say-as> 元素来控制字符串的发音方式,包括是否使用 lettersdigits 元素将其拼写为单个字符。

对于德语,您还可以控制服务声明字符的速度。 有关更多信息,请参阅 指定如何拼写字符串

interpret-as 属性

下面是 "interpret-as 属性的可接受值和每个值的示例。 该服务支持以下值作为 interpret-as 属性的自变量:

cardinal

cardinal 值用于将 say-as 元素中的数字读作基数。 以下示例读作 Super Bowl forty-nine。 第一个示例是多余的,因为它不会更改服务的缺省行为。

Super Bowl <say-as interpret-as="cardinal">49</say-as>
Super Bowl <say-as interpret-as="cardinal">XLIX</say-as>

date

date 值用于根据关联的 format 属性中给出的格式来对 say-as 元素内的日期发音。 format 属性对于 date 值是必需的。 如果未提供 format,服务仍会尝试对日期发音。 以下示例以指定格式对指示的日期发音,其中 dmy 分别表示日、月和年。

<say-as interpret-as="date" format="mdy">12/17/2005</say-as>
<say-as interpret-as="date" format="ymd">2005/12/17</say-as>
<say-as interpret-as="date" format="dmy">17/12/2005</say-as>
<say-as interpret-as="date" format="ydm">2005/17/12</say-as>
<say-as interpret-as="date" format="my">12/2005</say-as>
<say-as interpret-as="date" format="md">12/17</say-as>
<say-as interpret-as="date" format="ym">2005/12</say-as>

digits

digits 值用于对 say-as 元素内数字中的每位数发音。 (该值还分别表示包含在括起字符串中的任何字母字符。) 以下示例将对 123456 中的每位数发音。

<say-as interpret-as="digits">123456</say-as>

interjection

interjection 属性是特定于 Text to Speech 服务的 SSML 扩展。 它仅支持与表现性神经声音配合使用。

使用表现性神经声音,服务会自动强调以下推测: ahahmmhuhohuhuh-huhum。 您可以使用 interjection 值来启用或禁用服务对项目 ahaoh 的强调。 包含值为 truefalse 的其他 enabled 属性以启用或禁用注入。

以下示例禁用文本中 ahaoh 插入项的强调:

<say-as interpret-as='interjection' enabled='false'>Oh</say-as>, in addition, the <say-as interpret-as='interjection' enabled='false'>aha</say-as> wasp is endemic to Australia.

有关更多信息,请参阅 强调拒绝

letters

letters 值用于拼读 say-as 元素内词中的字符。 (该值还分别表示包含在括起的字符串中的任何数字字符。) 以下示例将拼读词 hello 中的字母。

<say-as interpret-as="letters">Hello</say-as>

number

number 值是 cardinalordinal 值的替代项。 可以使用可选的 format 属性来指示如何解释一系列数字。 第一个示例省略了 format 属性,以将数字作为 cardinal 值发音。 第二个示例显式指定数字将作为 cardinal 值发音。 第三个示例指定数字将作为 ordinal 值发音。

<say-as interpret-as="number">123456</say-as>
<say-as interpret-as="number" format="cardinal">123456</say-as>
<say-as interpret-as="number" format="ordinal">123456</say-as>

此外,还可以为 telephone 属性指定值 format。 以下示例说明了通过两种不同的方法,将一系列数字作为电话号码发音。 要对包含标点的数字发音,请为可选的 punctuation 属性指定值 detail

<say-as interpret-as="number" format="telephone">555-555-5555</say-as>
<say-as interpret-as="number" format="telephone" detail="punctuation">555-555-5555</say-as>

ordinal

ordinal 值用于将 say-as 元素内的数字读作序数值。 以下示例读作 second first

<say-as interpret-as="ordinal">2</say-as>
<say-as interpret-as="ordinal">1</say-as>

vxml:boolean

根据 vxml:boolean 在 say-as 元素中的值是 * 还是 *,会分别读作 yestruenofalse

<say-as interpret-as="vxml:boolean">true</say-as>
<say-as interpret-as="vxml:boolean">false</say-as>

vxml:currency

vxml:currency 值用于控制货币值的合成。 该字符串的编写格式必须为 UUUmm.nn,其中 UUU 是 ISO 标准 4217 指定的三字符货币指示符,mm.nn 是数量。 以下示例读作 forty-five dollars and thirty cents

<say-as interpret-as="vxml:currency">USD45.30</say-as>

如果指定的数字包含两个以上的小数位,那么会将金额合成为十进制数,后跟货币指示符。 如果未提供三字符货币指示符,那么仅将金额合成为十进制数,且货币类型不发音。 以下示例读作 forty-five point three two nine US dollars

<say-as interpret-as="vxml:currency">USD45.329</say-as>

vxml:date

vxml:date 值的工作方式类似于 date 值,但格式已预定义为 YYYYMMDD。 如果不知道日、月或年的值,或者不想说出来,请用 "?(问号)代替该值。 第二个和第三个示例包含问号。

<say-as interpret-as="vxml:date">20050720</say-as>
<say-as interpret-as="vxml:date">????0720</say-as>
<say-as interpret-as="vxml:date">200507??</say-as>

vxml:time

vxml:time "值根据相关 format 属性中给出的格式说明元素内的时间。 时间值需要格式属性。 格式必须为四位数,无后缀、"a"、"p "或 "h"。 下面的示例以指定的格式说出指定的时间,其中 d、m 和 y 分别代表日、月和年。

<say-as interpret-as="vxml:time">1230</say-as>
<say-as interpret-as="vxml:time">1230a</say-as>
<say-as interpret-as="vxml:time">1230p</say-as>
<say-as interpret-as="vxml:time">0100h</say-as>

vxml:digits

vxml:digits 值提供的功能与 "digits 值相同。

vxml:phone

vxml:phone 值用于对包含数字和标点的电话号码发音。 此值相当于使用 number 值,为 telephone 属性指定 format,并为 punctuation 属性指定 detail

<say-as interpret-as="vxml:phone">555-555-5555</say-as>

<speak> 元素

服务支持 SSML 片段,这些片段是不包含完整 XML 头的 SSML 元素。 对于传递到服务的 SSML,<speak> 元素是可选的。

<speak> 元素是 SSML 文档的根元素。 有效属性如下:

  • version 是用于指定 SSML 规范的必需属性。 接受的值为 1.0
  • 服务不需要 xml:lang。 使用 speak 元素时,请省略此属性。 请注意,不能使用此属性来更改语音合成请求的语言。
  • xml:base 没有任何影响。
  • 服务不需要 xmlns。 使用 speak 元素时,请省略此属性。
<speak version="1.1">
  The text to be spoken.
</speak>

<sub> 元素

<sub> 元素表示 "alias 属性指定的文本将在语音合成时替换该元素中的文本。 alias 属性是 sub 元素的唯一属性,也是必需的属性。

<sub alias="International Business Machines">IBM</sub>

<voice> 元素

这个 "<voice> 元素要求改变语音。 不支持此元素。