使用 SSML 的發音
您可以使用語音合成標記語言 (SSML) 搭配文字轉換語音,以指定語音的發音方式。 例如,您可以使用 SSML 搭配音素和自訂語彙來改善發音。 您也可以使用 SSML 來定義單字或數學運算式的發音方式。
如需如何使用 SSML 元素來改善發音的詳細資訊,請參閱下列各節。 如需 SSML 語法的詳細資訊,請參閱 SSML 文件結構和事件。
phoneme 元素
phoneme
元素可用來設定 SSML 文件中的語音發音。 請一律提供人類可讀的語音作為後援。
語音字母由音素組成,音素由字母、數字或字元構成,有時會合併使用。 每個音素都會描述獨一無二的語音聲音。 音標字母與拉丁字母相反,後者的任何字母都可能代表多個說出口的聲音。 請想想字母 "c" 在 "candy" 和 "cease" 的不同 en-US
發音,或想想字母組合 "th" 在 "thing" 和 "those" 文字的不同發音。
注意
如需支援電話設置的地區設定清單,請參閱語言支援資料表中的註腳。
下表說明 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>
自訂語彙
您可以使用音素和子元素定義單一實體 (例如公司、醫療詞彙或表情符號) 在 SSML 中讀取的方式。 若要定義多個實體的讀取方式,請建立 XML 結構化自訂語彙檔案。 然後上傳自訂語彙 XML 檔案,並使用 SSML lexicon
元素加以參考。
下表說明 lexicon
元素屬性的使用方式。
屬性 | 描述 | 必要或選用 |
---|---|---|
uri |
具有 .xml 或 .pls 副檔名之可公開存取之自訂語彙 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 中。
- 語彙快取重新整理:自訂語彙首次載入時,系統會以 URI 作為文字轉換語音的索引鍵來對其進行快取。 具有相同 URI 的語彙不會在 15 分鐘內重新載入,因此自訂語彙的變更最多必須等待 15 分鐘才會生效。
自訂語彙 XML 檔案的支援元素和屬性會在發音語彙規格 (PLS) 版本 1.0 中說明。 以下是支援的元素和屬性的一些範例:
lexicon
元素至少包含一個lexeme
元素。 語彙包含必要的xml:lang
屬性,可指出其應該適用的地區設定。 依設計,一個自訂語彙只能用於一個地區設定,因此如果您將其套用到其他地區設定,其不會有作用。lexicon
元素也有alphabet
屬性,用來指出語彙中使用的字母。 可能值為ipa
和x-microsoft-sapi
。- 每個
lexeme
元素都至少包含一個grapheme
元素以及一或多個grapheme
、alias
和phoneme
元素。lexeme
元素在自訂語彙中會區分大小寫。 例如,如果您只為lexeme
「Hello」(大寫 H) 提供音素,其無法針對lexeme
「hello」(小寫 H) 起作用。 grapheme
元素包含描述正寫法的文字。alias
元素可用來指出縮略字或簡稱的發音。phoneme
元素會提供文字來描述lexeme
的發音方式。 在 IPA 字母中,音節會以 '.' 來分界。 當您使用 IPA 字母時,phoneme
元素不能包含空白字元。- 如果所提供的
alias
和phoneme
元素有相同的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-US
、fr-FR
、de-DE
、es-ES
、ja-JP
、zh-CN
、zh-HK
和 zh-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-as
和 format
屬性支援的內容類型。 只有本表格中的 format
資料行不是空白時,才要包含 format
屬性。
注意
所有文字轉換語音的地區設定都支援 interpret-as
屬性的 characters
和 spell-out
值。
下列語言的所有地區設定都支援其他 interpret-as
屬性值:阿拉伯文、加泰蘭文、中文、丹麥文、荷蘭文、英文、法文、芬蘭文、德文、印地文、義大利文、日文、韓文、挪威文、波蘭文、葡萄牙文、俄文、西班牙文及瑞典文。
interpret-as | format | 解釋 |
---|---|---|
% | 文字會念為個別字母 (拼寫)。 語音合成引擎會將:<say-as interpret-as="characters">test</say-as> 念為「T E S T」。 |
|
% | 無 | 文字會念為基數。 語音合成引擎會將:There are <say-as interpret-as="cardinal">10</say-as> options 如同「有十個選項」。 |
ordinal |
無 | 文字會念為基數。 語音合成引擎會將:Select the <say-as interpret-as="ordinal">3rd</say-as> option 念為「Select the third 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 念為「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">10-12-2016</say-as> 念為 "Today is October twelfth two thousand sixteen"。 發音: Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as> 念為 "Today is December tenth 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 |
無 | 文字會念為電話號碼。 語音合成引擎會將: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 |
無 | 文字會念為貨幣。 語音合成引擎會將:<say-as interpret-as="currency">99.9 USD</say-as> 如同「99 美元和 90 分」。 |
address |
無 | 文字會念成地址。 語音合成引擎會將:I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as> 念為「I'm at 150th Court Northeast Redmond Washington」。 |
name |
無 | 文字會念為人名。 語音合成引擎會將:<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-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
元素用於指出別名屬性的文字值應該發音,而不是元素的括住文字。 如此一來,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 元素 (標籤):de-DE
、en-AU
、en-GB
、en-US
、es-ES
、es-MX
、fr-CA
、fr-FR
、it-IT
、ja-JP
、ko-KR
、pt-BR
和 zh-CN
。
除了 MathML 3.0 的基礎數學元素之外,MathML 2.0 和 MathML 3.0 規格中的所有元素都受到支援。
記住下列 MathML 元素和屬性:
<math xmlns="http://www.w3.org/1998/Math/MathML">
中的xmlns
屬性是選擇性的。semantics
、annotation
和annotation-xml
元素不會輸出語音,因此可忽略這些元素。- 如果無法辨識元素,系統會忽略該元素,且仍會處理該元素中的子元素。
XML 語法不支援 MathML 實體,因此您必須使用對應的 Unicode 字元來代表實體,例如,實體 ©
應該以其 Unicode 字元 ©
代表,否則會發生錯誤。
MathML 範例
本範例的文字轉換語音輸出為「a 平方加 b 平方等於 c 平方」。
<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>