SSML 元素

透過 IBM Watson® Text to Speech 服務,您可以使用大部分的語音合成標記語言 (SSML) 元素和屬性來控制文字的合成。

支援的元素及屬性

表 1 總結了服務對 SSML 元素和屬性的支援:

  • 完整 表示服務完整支援元素或屬性與其 HTTP 介面和 WebSocket 介面搭配使用。
  • 局部 表示以下列其中一種方式來限制服務對元素或屬性的支援:
    • 服務僅支援元素或屬性的部分層面。
    • 服務只支援具有部分語音的元素或屬性。
    • 服務只以 HTTP 或 WebSocket 其中一個介面支援元素或屬性。
  • 表示服務不支援元素或屬性。

下列各節提供每一個元素或屬性的說明,包括範例、限制,以及服務的支援是否不同於標準 SSML。 部分屬性和值的支援,與 SSML 規格略有不同。 如需詳細資訊,請參閱 W3C Speech Synthesis Markup Language(SSML)Version 1.1

SSML 元素與屬性
元素或屬性 支援 元素或屬性 支援
<audio> 元素 <prosody> 元素 局部
<break> 元素 完整 -輪廓屬性
<desc> 元素 -duration 屬性
<emphasis> 元素 局部 完整
<express-as> 元素 局部 -range 屬性
<lexicon> 元素 完整
<mark> 元素 局部 -volume 屬性
<meta> 元素 <say-as> 元素 局部
<metadata> 元素 局部
<paragraph> 元素 完整 <sentence> 元素 完整
<phoneme> 元素 完整 <speak> 元素 完整
<sub> 元素 完整
<voice> 元素

<audio> 元件

<audio> 元件會將錄音元件插入服務產生的音訊中。 不支援此元素。

<break> 元件

<break> 元件會在口語文字中插入停頓。 它具有下列選用屬性:

  • strength 根據各種強度值指定 pause 的長度。
    • none 抑制在處理期間可能以其他方式產生的中斷。
    • x-weakweakmediumstrongx-strong 插入越來越強的中斷。
  • time 指定 pause 的長度(以秒或毫秒為單位)。 有效值格式為 {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

<break> 元件是自然語音的測試版功能。

當與 time 屬性和 Expressive 或 Natural 語音一起使用時,<break> 元素會引入一個大約指定時間長度的暫停,不過確切的時間可能會根據語音和上下文而有所不同。

<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> 元素是一個空元素,可將標記置入要合成的文字中。 當 <mark> 元素前面的所有文字都已合成時,客戶端會收到通知。 此元素接受單一 name 屬性,此屬性指定用來唯一識別標記的字串;名稱必須以英數字元開頭。 傳回的名稱隨附標記在合成音訊中出現的時間。

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 Symbolic Phonetic Representation (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 屬性之互動的相關資訊,請參閱

自然語音不支援 <prosody> 元件。

與 SSML 1.1 版規格的差異

Text to Speech 服務以 W3C 語音合成標記語言(SSML)1.1為基礎提供 SSML 支援。 然而,SSML 規格自服務第一次發行以來已發展。 為了維護使用者的舊版相容性,服務會繼續支援 <prosody> 元素與最新 SSML 規格不同的部分特性。

  • 對於 pitch 屬性, 服務支援下列其他特性:

    • 以百分比表示的相對變更,以帶正負號或不帶正負號的數字表示,後面接著 % (百分比符號)。 語音的預設音高相當於傳遞值 0%
    • 由帶正負號或不帶正負號的數字指出的 semitones 中的相對變更,後面接著字串 st
  • 對於 rate 屬性, 服務支援下列其他特性:

    • 以百分比表示的相對變更,以帶正負號或不帶正負號的數字表示,後面接著 % (百分比符號)。 語音的預設說話速率相當於傳遞值 0%
    • 沒有單位指定的數字指定每分鐘的字數。 數字是絕對的; 您無法指定每分鐘單字的相對增加或減少。
  • 對於表達神經語音, pitchrate 屬性僅支援百分比值。

    • 對於 pitch 屬性,請勿使用 Hertz、semitones 或關鍵字。
    • 對於 rate 屬性,請不要使用每分鐘的單字或關鍵字。

如需 SSML 1.1版所支援特性的相關資訊,請參閱 SSML 規格的 3.2.4 prosody Element 一節。

pitch 屬性

pitch 屬性修改元素內文字的基準音高或音調。 接受值為:

    • Hz (Hertz) 指定後面的數字:* 基準音高被移調(向上或向下)到指定的值。 例如,150Hz
  • 以百分比表示的相對變更: 造成預設基線相對偏移的數字。 數字前面是 + (增加) 或 - (減少),後面是 % (百分比符號)。 後面接著 % 的不帶正負號數字會解譯為正數增加。 例如,+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 屬性指出元素內文字說話速度的變更。 接受值為:

  • 沒有單位指定的數字: 速率會變更為每分鐘指定的單字數。 例如,值 50 表示每分鐘說話的比率為 50 個字。 數字是絕對的; 您無法指定每分鐘單字的相對增加或減少。
  • 百分比的相對變化: 造成預設說明率相對變動的數字。 數字前面是 + (增加) 或 - (減少),後面是 % (百分比符號)。 後面接著 % 的不帶正負號數字會解譯為正數增加。 例如,+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,其指出如何解譯括住的文字。
  • 該元素有兩個可選的屬性,formatdetail,它們只與 interpret-as 屬性的特定值一起使用,如以下範例所示。

服務支援具有下列語言的 <say-as> 元素:

  • 服務完全支援美式英文的 <say-as> 元素。
  • 對於大部分其他語言,服務只支援該元素的 digitsletters 屬性。
  • 對於日文,服務只支援 digits 屬性。 服務會忽略包含在數字字串中的非數值字元。

服務的英文字母、數值及英數字串預設發音會因語言而異,每一種語言都有自己的規則。 您可以使用 <say-as> 元素來控制字串的發音方式,包括是否要以 lettersdigits 元素的個別字元來拼出字串。

對於德文,您也可以控制服務發音字元的速度。 如需相關資訊,請參閱 指定如何拼出字串

interpret-as 屬性

interpret-as 屬性的可接受值以及各值的範例如下。 服務支援下列值作為 interpret-as 屬性的引數:

cardinal

cardinal 值會說出元素內數字的基數。 下列範例會說出 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 屬性中提供的格式說出元素內的日期。 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 值會說出元素內數字的各個數字。 (值也會個別發音括在括住字串中的任何英文字母。) 下列範例會說出個別數字 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 值會拼出元素內字組的各字元。 (值也會個別發音含括在字串中的任何數值字元。) 下列範例拼寫字組 hello 的字母。

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

您也可以使用可選的 format 屬性指定 groupsingle 的值。 這些屬性有助於提高字母數字字串的可讀性,如確認數字和 ID。 single 格式在逐一拼出字元的同時,增加了更多的靜音效果。 group 格式會在我們從數字切換到字母或從字母切換到數字時,以及在讀取每 3 或 4 個相同類型的字元後,增加較長的靜音時間。

<say-as interpret-as="letters" format=“single”>112A567B</say-as>
<say-as interpret-as="letters" format=“group”>3174A2W486</say-as>

number

number 值提供 cardinalordinal 值的替代方案。 您可以使用選用 format 屬性,指出如何解譯一連串數字。 第一個範例會省略 format 屬性,將數字發音為基數值。 第二個範例明確指定數字將發音為 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 值會說出元素內數字的序數值。 下列範例會說出 second first

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

vxml:boolean

vxml:boolean 值會說出 yesno,視元素內的 truefalse 值而定。

<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 不是服務所需的屬性。 使用此元素時,請省略該屬性。 請注意,您無法使用此屬性來變更語音合成要求的語言。
  • xml:base 無效。
  • xmlns 不是服務所需的屬性。 使用此元素時,請省略該屬性。
<speak version="1.1">
  The text to be spoken.
</speak>

<sub> 元件

<sub> 元件表示在語音合成時,由 alias 屬性指定的文字將取代括在該元件內的文字。 alias 屬性是元素的唯一屬性,且是必要屬性。

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

<voice> 元件

<voice> 元件要求改變語音。 不支援此元素。