使用 SSML 發音

您可以使用語音合成標記語言 (SSML) 搭配文字轉換語音,以指定語音的發音方式。 例如,您可以使用 SSML 搭配音素和自訂語彙來改善發音。 您也可以使用 SSML 來定義單字或數學運算式的發音方式。

如需如何使用 SSML 元素來改善發音的詳細資訊,請參閱下列各節。 如需 SSML 語法的詳細資訊,請參閱 SSML 檔結構和事件

phoneme 元素

phoneme 元素可用來設定 SSML 文件中的語音發音。 請一律提供人類可讀的語音作為後援。

語音字母由音素組成,音素由字母、數字或字元構成,有時會合併使用。 每個音素都會描述獨一無二的語音聲音。 這與拉丁字母相反,後者的任何字母都可能代表多個說出口的聲音。 請考慮 「candy」 和 「停止」 單字中字母 「c」 的不同 en-US 發音,或 「thing」 和 「those」 這兩個字中字母組合 「th」 的不同發音。

注意

如需支援電話設置的地區設定清單,請參閱語言支援資料表中的註腳。

phoneme下表說明元素屬性的使用方式。

屬性 描述 必要或選用
alphabet 當您在 屬性中 ph 合成字串發音時,要使用的注音字母。 指定字母的字串必須用小寫字母來指定。 下列選項是您可以指定的可能字母:
字母只適用於元素中的 phoneme
選擇性
ph 包含音素的字串,會指定 phoneme 元素中的文字發音。 如果指定的字串包含無法辨識的手機,文字轉換語音會拒絕整個 SSML 檔,並產生檔中未指定的語音輸出。

ipa 為 ,若要在這個音節之前放置壓力符號來強調一個音節,您必須標示單字的所有音節。 或者,這個壓力符號之前的音節將會受到壓力。 針對 sapi ,如果您想要強調一個音節,則必須在這個音節之後放置壓力符號,不論文字的所有音節是否都會標示。
必要

phoneme 範例

先前已描述專案屬性 phoneme 的支援值。 在前兩個範例中,會指定 或 ph="təmeɪˈtoʊ" 的值 ph="tə.ˈmeɪ.toʊ" 來強調音節。 meɪ

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <phoneme alphabet="ipa" ph="təmeɪˈtoʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
     <voice name="en-US-JennyNeural">
        <phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
    </voice>
</speak>

自訂語彙

您可以定義單一實體 (的方式,例如公司、醫療詞彙或 emoji) 如何使用 音素 元素在 SSML 中讀取。 若要定義如何讀取多個實體,請建立 XML 結構化自訂語彙檔案。 然後上傳自訂語彙 XML 檔案,並使用 SSML lexicon 元素加以參考。

注意

如需支援自訂語彙的地區設定清單,請參閱語言支援資料表中的註腳。

長音訊 API 不支援 lexicon 元素。 對於長格式文字轉換語音,請改用 批次合成 API (Preview) 。

lexicon下表說明元素屬性的使用方式。

屬性 描述 必要或選用
uri 具有 或 .pls 副檔名之可公開存取之自訂語彙 XML 檔案的 .xml URI。 建議使用Azure Blob 儲存體,但並非必要。 如需自訂語彙檔案的詳細資訊,請參閱發音語彙規格 (PLS) 1.0 版 必要

自訂語彙範例

先前已描述專案屬性 lexicon 的支援值。

在發佈自訂語彙後,就可以從 SSML 對其進行參考。 下列 SSML 範例會參考已上傳至 https://www.example.com/customlexicon.xml 的自訂語彙。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
          xmlns:mstts="http://www.w3.org/2001/mstts"
          xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <lexicon uri="https://www.example.com/customlexicon.xml"/>
        BTW, we will be there probably at 8:00 tomorrow morning.
        Could you help leave a message to Robert Benigni for me?
    </voice>
</speak>

自訂語彙檔案

若要定義讀取多個實體的方式,您可以在具有 .xml.pls 副檔名的自訂語彙 XML 檔案中定義它們。

注意

自訂語彙檔案是有效的 XML 檔,但不能當做 SSML 檔使用。

以下是自訂語彙檔案的一些限制:

  • 檔案大小:自訂語彙檔案大小上限為 100 KB。 如果檔案大小超過 100 KB 的限制,合成要求就會失敗。
  • 語彙快取重新整理:自訂語彙會在第一次載入時,使用 URI 作為文字轉換語音的索引鍵來快取。 具有相同 URI 的語彙將不會在 15 分鐘內重新載入,因此自訂語彙的變更最多必須等待 15 分鐘才會生效。

自訂語彙 XML 檔案的支援元素和屬性會在 發音語彙規格 (PLS) 1.0版中說明。 以下是支援的元素和屬性的一些範例:

  • lexicon 元素至少包含一個 lexeme 元素。 語彙包含必要的 xml:lang 屬性,可指出其應該適用的地區設定。 依設計,一個自訂語彙只能用於一個地區設定,因此如果您將其套用到其他地區設定,其不會有作用。 元素 lexicon 也有 alphabet 屬性,用來指出語彙中使用的字母。 可能值為 ipax-microsoft-sapi
  • 每個 lexeme 元素都至少包含一個 grapheme 元素以及一或多個 graphemealiasphoneme 元素。 lexeme 元素在自訂語彙中會區分大小寫。 例如,如果您只提供 lexeme 「Hello」 的音素,它將無法用於 lexeme 「hello」。
  • grapheme 元素包含描述正寫法的文字。
  • alias 元素可用來指出縮略字或簡稱的發音。
  • phoneme 元素會提供文字來描述 lexeme 的發音方式。 IPA 字母中的音節界限是 '.'。 當您使用 IPA 字母時,元素 phoneme 不能包含空白字元。
  • 如果所提供的 aliasphoneme 元素有相同的 grapheme 元素,則 alias 的優先順序較高。

Microsoft 提供 自訂語彙的驗證工具 ,可協助您尋找 (自訂語彙檔案中詳細錯誤訊息) 的錯誤。 建議您先使用此工具,再搭配語音服務在生產環境中使用自訂語彙 XML 檔案。

自訂語彙檔案範例

下列 XML 範例 (不是 SSML) 會包含在自訂語 .xml 匯檔案中。 當您使用此自訂語彙時,「BTW」會讀為「By the way」。「Benigni」會使用提供的 IPA「bɛˈniːnji」來讀出。

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
    <lexeme>
        <grapheme>BTW</grapheme>
        <alias>By the way</alias>
    </lexeme>
    <lexeme>
        <grapheme> Benigni </grapheme>
        <phoneme> bɛˈniːnji</phoneme>
    </lexeme>
    <lexeme>
        <grapheme>😀</grapheme>
        <alias>test emoji</alias>
    </lexeme>
</lexicon>

您無法使用自訂語彙來直接設定片語的發音。 如果您需要為縮略字或簡稱來設定發音,請先提供 alias,然後再將 phoneme 與該 alias 相關聯。 例如:

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
    <lexeme>
        <grapheme>Scotland MV</grapheme>
        <alias>ScotlandMV</alias>
    </lexeme>
    <lexeme>
        <grapheme>ScotlandMV</grapheme>
        <phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
    </lexeme>
</lexicon>

您也可以直接為縮略字或簡稱提供您想要的 alias。 例如:

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>Scotland Media Wave</alias>
  </lexeme>

上述自訂語彙 XML 檔案範例使用 IPA 字母,也稱為 IPA 手機集。 IPA 是國際標準,所以建議您使用 IPA。 某些 IPA 字元在以 Unicode 表示時,會有「預組」版本和「分解」版本。 自訂語彙只支援分解版本的 Unicode。

語音服務定義下列地區設定的語音集合:en-USfr-FRde-DEes-ESja-JPzh-CNzh-HKzh-TW。 如需語音服務語音字母的詳細資訊,請參閱語音服務語音集合

您可以使用 x-microsoft-sapi 作為具有自訂語彙的 alphabet 屬性所具有的值,如此處所示:

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="x-microsoft-sapi" xml:lang="en-US">
  <lexeme>
    <grapheme>BTW</grapheme>
    <alias> By the way </alias>
  </lexeme>
  <lexeme>
    <grapheme> Benigni </grapheme>
    <phoneme> b eh 1 - n iy - n y iy </phoneme>
  </lexeme>
</lexicon>

say-as 元素

元素 say-as 會指出元素文字的內容類型,例如數位或日期。 此元素會向語音合成引擎指導文字的發音方式。

say-as下表說明元素屬性的使用方式。

屬性 描述 必要或選用
interpret-as 指出元素文字的內容類型。 如需類型清單,請參閱下表。 必要
format 針對格式可能會不明確的內容類型,為元素的文字另外提供正確格式的資訊。 SSML 會為使用這些屬性的內容類型定義格式。 請參閱下表。 選擇性
detail 指出說話時的詳細程度。 例如,這個屬性可能會要求語音合成引擎念出標點符號。 detail 未定義任何標準值。 選擇性

以下是 interpret-asformat 屬性支援的內容類型。 只有當下表中的 format 資料行不是空白時,才要包含 format 屬性。

interpret-as format 解譯
characters, spell-out 文字會念為個別字母 (拼寫)。 語音合成引擎會將:

<say-as interpret-as="characters">test</say-as>

念為「T E S T」。
cardinal, number None 文字會念為基數。 語音合成引擎會將:

There are <say-as interpret-as="cardinal">10</say-as> options

如同「有十個選項」。
ordinal None 文字會念為基數。 語音合成引擎會將:

Select the <say-as interpret-as="ordinal">3rd</say-as> option

念為「Select the third option」。
number_digit None 文字會念為個別數字的序列。 語音合成引擎會將:

<say-as interpret-as="number_digit">123456789</say-as>

念為「1 2 3 4 5 6 7 8 9」。
fraction None 文字會念為分數。 語音合成引擎會將:

<say-as interpret-as="fraction">3/8</say-as> of an inch

念為「three eighths of an inch」。
date dmy、mdy、ymd、ydm、ym、my、md、dm、d、m、y 文字會念為日期。 format 屬性會指定日期的格式 (d = 日、m = 月、y = 年)。 語音合成引擎會將:

Today is <say-as interpret-as="date" format="mdy">10-19-2016</say-as>

念為「Today is October nineteenth two thousand sixteen」。
time hms12、hms24 文字會念為時間。 format 屬性會指定要使用 12 小時制 (hms12) 還是 24 小時制 (hms24) 來指定時間。 請使用冒號來分開代表小時、分鐘和秒數的數字。 以下是幾個有效的時間範例:12:35、1:14:32、08:15、02:50:45。 語音合成引擎會將:

The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>

念為「The train departs at four A M」。
duration hms、hm、ms 文字會念為持續時間。 屬性 format 會指定持續時間的格式 (h=小時、m=分鐘 和 s=秒)。 語音合成引擎會將:

<say-as interpret-as="duration">01:18:30</say-as>

念為「一小時十八分鐘又三十秒」。
發音:

<say-as interpret-as="duration" format="ms">01:18</say-as>

念為「一分鐘又十八秒」。
此標籤僅支援英文和西班牙文。
telephone None 文字會念為電話號碼。 語音合成引擎會將:

The number is <say-as interpret-as="telephone">(888) 555-1212</say-as>

念為「My number is area code eight eight eight five five five one two one two」。
currency None 文字會念為貨幣。 語音合成引擎會將:

<say-as interpret-as="currency">99.9 USD</say-as>

如同「99 美元和 90 分」。
address None 文字會念成地址。 語音合成引擎會將:

I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>

念為「I'm at 150th Court Northeast Redmond Washington」。
name None 文字會念為人名。 語音合成引擎會將:

<say-as interpret-as="name">ED</say-as>

念為 [æd]。
在中文姓名中,某些字作為姓氏時會有不同的念法。 例如,語音合成引擎在下面範例中念「仇」這個字時,

<say-as interpret-as="name">仇先生</say-as>

會念為 [qiú] 而非 [chóu]。

say-as 範例

先前已描述專案屬性 say-as 的支援值。

語音合成引擎會將下列範例念為:「Your first request was for one room on October nineteenth twenty ten with early arrival at twelve thirty five PM」。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <p>
        Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
        on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
        </p>
    </voice>
</speak>

sub 元素

sub使用 元素來指出別名屬性的文字值應該讀出,而不是專案的括住文字。 如此一來,SSML 就會同時包含口語和書寫形式。

sub下表說明元素屬性的使用方式。

屬性 描述 必要或選用
alias 應該發音的文字值,而不是元素的封閉式文字。 必要

子範例

先前已描述專案屬性 sub 的支援值。

語音合成引擎會將下列範例說成「萬維網聯盟」。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <sub alias="World Wide Web Consortium">W3C</sub>
    </voice>
</speak>

使用 MathML 發音

數學標記語言 (MathML) 是 XML 相容的標記語言,描述數學內容和結構。 語音服務可以使用 MathML 作為輸入文字,在輸出音訊中正確發音數學標記法。

注意

目前 en-USen-AU 地區設定的所有神經語音都支援 MathML 元素 (標籤)。

除了 MathML 3.0 的基礎數學元素之外,MathML 2.0MathML 3.0 規格中的所有元素都受到支援。

記下下列 MathML 元素和屬性:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> 中的 xmlns 屬性是選擇性的。
  • semanticsannotationannotation-xml 元素不會輸出語音,因此會被忽略。
  • 如果無法辨識元素,則會忽略它,而且仍然會處理其中子項目。

XML 語法不支援 MathML 實體,因此您必須使用對應的 Unicode 字元 來代表實體,例如,實體 &copy; 應該以其 Unicode 字元 &#x00A9; 來表示,否則會發生錯誤。

MathML 範例

此範例的文字到語音轉換輸出是「a squared plus b squared equals c squared」。

<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xmlns:mstts='http://www.w3.org/2001/mstts' xml:lang='en-US'><voice name='en-US-JennyNeural'><math xmlns='http://www.w3.org/1998/Math/MathML'><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>=</mo><msup><mi>c</mi><mn>2</mn></msup></math></voice></speak>

下一步