IBM Cloud Docs
瞭解 SSML

瞭解 SSML

「語音合成標記語言 (SSML)」是 XML 型標記語言,可為語音合成應用程式提供文字註釋。 它是 W3C Voice-Browser Working Group 的建議,已被 VoiceXML 2.0 規格採用作為語音合成的標準標記語言。 SSML 向語音應用程式的開發人員提供一種標準方式,用來控制合成處理程序的各個層面,方法是讓他們可以透過標記來指定發音、音量、音高、速度及其他屬性。 您可以使用 SSML 來控製文字與所有支援語言的合成。

IBM Watson® Text to Speech 服務以 W3C 2010 年 9 月 7 日建議的 SSML 1.1版為基礎提供支援。 有關W3C SSML 建議的詳細信息,請參閱 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 元素之支援層次的完整資訊,請參閱 SSML 元素
    • 如需將 SSML 元素與語音合成要求的 text 搭配使用的範例,請參閱 輸入文字範例
  • 服務支援加強神經和表達神經語音的其他合成特性:
  • 服務支援表達神經語音的其他合成特性:
  • 服務支援可讓您控制如何針對德文語音拼出英數字串的合成特性。 如需相關資訊,請參閱 指定如何拼出字串
  • 服務支援搭配使用 SSML <mark> 元素與 WebSocket 介面,以取得所產生音訊之字組的計時資訊。 WebSocket 介面也可讓您要求輸入文字之所有字串的資訊。 如需相關資訊,請參閱:
  • 此服務的自訂介面支援使用 SSML <phoneme> 元素來指定用於發音單字的語音拼字。 語音拼字代表單字的發音、這些發音如何劃分為音節以及哪些音節受到重音。
    • 如需自訂作業介面的資訊,請參閱瞭解自訂作業
    • 如需您可以在國際音標 (IPA) 或 IBM 任何受支援語言的符號語音表示法 (SPR) 規格中使用的有效符號的相關資訊,請參閱 瞭解音標

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 驗證錯誤
驗證錯誤 問題說明
SSML 元素無效 例如,您不正確地指定標籤、忽略必要屬性,或包括開始標籤但沒有成對的結束標籤。
未跳出的 XML 控制字元 輸入文字本身包含 "'&<>/ 字符,而不是其等效的轉義字串或字符編碼。 如需相關資訊,請參閱跳出 XML 控制字元
音節重音無效 IBM SPR 的 <phoneme> 元素的 ph 屬性包含無效音節重音。 如需指示音節和音節重音的相關資訊,請參閱 指定音節
音標無效 <phoneme> 元素的 ph 屬性包含指定語言不受支援的 IPA 或 SPR 符號。
無母音 <phoneme> 元素的 ph 屬性指定不包含母音的單字發音。
法國聯絡人位置無效 <phoneme> 元素的 ph 屬性中,連字符不會跟在子音後面或出現在單字發音的中間。
日文 : 符號不在元音之前 在日文 <phoneme> 元素的 ph 屬性中,: 字元不會出現在母音之前(中間可能有其他符號,例如音節邊界)。
SSML <prosody> 元素的使用無效 您不能將 <prosody> 元素的 contourdurationrangevolume 屬性與任何語音一起使用。
SSML <express-as> 元素的使用無效 <express-as> 元素只能與表達神經語音搭配使用。