使用 SSML 的發音

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

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

phoneme 元素

元素 phoneme 用於 SSML 檔中的語音發音。 一律提供人類可讀取的語音作為後援。

電話 字母是由手機組成,由字母、數位或字元組成,有時組合在一起。 每部手機都會描述獨特的語音聲音。 語音字母與拉丁字母相反,其中任何字母都可能代表多個語音。 en-US請考慮字母 「c」 在 「candy」 和 「停止」 或字母組合 「th」 文字中的不同發音“ 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-AvaNeural">
        <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-AvaNeural">
        <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-AvaNeural">
        <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-AvaNeural">
        <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-AvaNeural">
        <phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
    </voice>
</speak>

自定義詞典

您可以定義單一實體(例如公司、醫療詞彙或表情符號)如何使用 phoneme元素在 SSML 中讀取。 若要定義如何讀取多個實體,請建立 XML 結構化自定義詞典檔案。 然後,您可以上傳自定義詞典 XML 檔案,並使用 SSML lexicon 元素來參考它。

注意

如需支援自定義詞典的地區設定清單,請參閱語言支援表格中的腳注。

Long Audio API 不支援 元素lexicon。 若要讓長格式文字進行語音轉換,請改用 批次合成 API (預覽)。

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

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

自定義詞典範例

先前已描述lexicon 元素的屬性支援值。

發佈自定義詞典之後,您可以從 SSML 參考它。 下列 SSML 範例參考上傳至 https://www.example.com/customlexicon.xml的自定義詞典。 我們支援來自 Azure Blob 儲存體、進階 媒體服務 (AMS) 儲存體 和 GitHub 的語匯 URL。 不過,請注意,其他公用URL可能不相容。

<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-AvaNeural">
        <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 的限制,合成要求就會失敗。 您可以將詞典分割成多個詞典,並在檔案大小超過 100 KB 時將它們包含在 SSML 中。
  • Lexicon 快取重新整理:自定義詞典會在第一次載入時,使用 URI 快取作為文字到語音轉換的索引鍵。 具有相同 URI 的語彙不會在 15 分鐘內重載,因此自定義詞典變更最多需要等候 15 分鐘才會生效。

自定義語彙 XML 檔案的支援元素和屬性會在發音詞典規格 (PLS) 1.0 版中描述。 以下是支援的元素和屬性的一些範例:

  • 元素 lexicon 至少包含一個專案 lexeme 。 Lexicon 包含必要 xml:lang 屬性,以指出應該套用的地區設定。 依設計,一個自定義詞典僅限於一個地區設定,因此如果您將其套用至不同的地區設定,則無法運作。 元素 lexicon 也有 alphabet 屬性,表示字典中使用的字母。 可能值為 ipax-microsoft-sapi
  • 每個 lexeme 元素至少包含一個專案和一 grapheme 或多個 graphemealiasphoneme 元素。 元素 lexeme 在自定義詞典中區分大小寫。 例如,如果您只提供 「Hello」 的 lexeme 注音,它不適用於 lexeme 「hello」。。
  • 元素grapheme包含描述 Orthography文字。
  • 元素 alias 可用來指出縮寫或縮寫詞彙的發音。
  • 元素 phoneme 會提供文字,描述 的發音方式 lexeme 。 IPA 字母中的音節界限是 『.』。 當您使用 IPA 字母時,元素 phoneme 不能包含空格符。
  • alias當 和 phoneme 元素以相同的grapheme專案提供時,alias優先順序較高。

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

自定義詞典檔案範例

下列 XML 範例 (不是 SSML) 會包含在自定義詞典 .xml 檔案中。 當您使用此自定義詞典時,「BTW」會讀為「順便說一句」。“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,然後將 與alias產生關聯phoneme。 例如:

<?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 字元,當它們以 Unicode 表示時,它們是「先行編譯」和「分解」版本。 自定義詞典僅支援分解的 Unicode。

語音服務會定義這些地區設定的注音集:en-US、、de-DEfr-FRes-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定義的標準值。 選擇性

format 屬性支援interpret-as下列內容類型。 format只有在此數據表中數據行不是空白時format,才包含 屬性。

注意

characters所有文字到語音轉換的地區設定都支援 屬性的 interpret-asspell-out 值。 下列語言的所有地區設定都支援其他 interpret-as 屬性值:阿拉伯文、加泰羅尼亞文、中文、丹麥文、荷蘭文、英文、法文、芬蘭文、德文、印度文、義大利文、日文、韓文、挪威文、波蘭文、葡萄牙文、俄文、西班牙文及瑞典文。

interpret-as format 解釋
characters, spell-out 文字會說成個別字母(拼出)。 語音合成引擎發音如下:

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

作為 「T E S T」。。
cardinal, number 文字會以基數表示。 語音合成引擎發音如下:

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

因為「有十個選項」。
ordinal 文字會說成序數。 語音合成引擎發音如下:

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

作為 「選取第三個選項」。
number_digit 文字會說成一連串的個別數位。 語音合成引擎發音如下:

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

作為 “1 2 3 4 5 6 7 8 9”。
fraction 文字會以小數表示。 語音合成引擎發音如下:

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

作為“三分之三英寸”。
date dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y 文字會說成日期。 屬性 format 會指定日期的格式(d=day、m=month 和 y=year)。 語音合成引擎發音如下:

Today is <say-as interpret-as="date">10-12-2016</say-as>

正如“今天是十月十二十二日,十二千六十六。
發音:

Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as>

正如“今天是十二月十二萬六十六日”。
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>

當「火車在淩晨四點出發時」。
duration hms、hm、ms 文字會說成持續時間。 屬性 format 會指定持續時間的格式(h=hour、m=minute 和 s=second)。 語音合成引擎發音如下:

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

作為“一小時十八分三十秒”。
發音:

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

作為“一分八秒”。
只有英文和西班牙文才支援此標籤。
telephone 文字會說成電話號碼。 語音合成引擎發音如下:

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

正如「我的號碼是分區代碼八八八五五五一二二二。
currency 文字會說成貨幣。 語音合成引擎發音如下:

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

作為“九十九美元和九十美分”。
address 文字會說成位址。 語音合成引擎發音如下:

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

作為“我在華盛頓東北雷德蒙德第150法院。
name 文字會說成一個人的名字。 語音合成引擎發音如下:

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

As [æd]。
在中文名稱中,有些字元在姓氏中出現時會以不同的方式發音。 例如,語音合成引擎會在

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

As [qiú] 而不是 [chóu]。

say-as 範例

先前已描述say-as 元素的屬性支援值。

語音合成引擎會說出下列範例:「您的第一個要求是在10月19日201月201日,提前抵達下午125點。

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

使用MathML發音

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

注意

下列地區設定目前支援MathML元素 (tags):、、en-GB、、pt-BRko-KRes-MXfr-CAit-ITja-JPes-ESfr-FR 和。zh-CNen-USen-AUde-DE

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

記下下列 MathML 元素與屬性:

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

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

MathML 範例

此範例的語音轉換輸出文字是「正方形加 b 平方等於 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>

下一步