SSML 元素
透過 IBM Watson® Text to Speech 服務,您可以使用大部分的語音合成標記語言 (SSML) 元素和屬性來控制文字的合成。
支援的元素及屬性
表 1 總結了服務對 SSML 元素和屬性的支援:
- 完整 表示服務完整支援元素或屬性與其 HTTP 介面和 WebSocket 介面搭配使用。
- 局部 表示以下列其中一種方式來限制服務對元素或屬性的支援:
- 服務僅支援元素或屬性的部分層面。
- 服務只支援具有部分語音的元素或屬性。
- 服務只以 HTTP 或 WebSocket 其中一個介面支援元素或屬性。
- 無 表示服務不支援元素或屬性。
下列各節提供每一個元素或屬性的說明,包括範例、限制,以及服務的支援是否不同於標準 SSML。 部分屬性和值的支援,與 SSML 規格略有不同。 如需詳細資訊,請參閱 W3C Speech Synthesis Markup Language(SSML)Version 1.1。
| 元素或屬性 | 支援 | 元素或屬性 | 支援 |
|---|---|---|---|
<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-weak、weak、medium、strong或x-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。 如需相關資訊,請參閱 瞭解音標。
- 標準國際音標法 (IPA):
-
ph是必要屬性,可在指出的 alphabet 中提供發音。 下列範例顯示兩種格式中 tomato 這個字的發音:-
IPA 格式:
<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ">tomato</phoneme> -
搭配使用 Unicode 符號的 IPA 格式:
<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ">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> 元素的 pitch 及 rate 屬性之互動的相關資訊,請參閱
自然語音不支援 <prosody> 元件。
與 SSML 1.1 版規格的差異
Text to Speech 服務以 W3C 語音合成標記語言(SSML)1.1為基礎提供 SSML 支援。 然而,SSML 規格自服務第一次發行以來已發展。 為了維護使用者的舊版相容性,服務會繼續支援 <prosody> 元素與最新 SSML 規格不同的部分特性。
-
對於
pitch屬性, 服務支援下列其他特性:- 以百分比表示的相對變更,以帶正負號或不帶正負號的數字表示,後面接著
%(百分比符號)。 語音的預設音高相當於傳遞值0%。 - 由帶正負號或不帶正負號的數字指出的 semitones 中的相對變更,後面接著字串
st。
- 以百分比表示的相對變更,以帶正負號或不帶正負號的數字表示,後面接著
-
對於
rate屬性, 服務支援下列其他特性:- 以百分比表示的相對變更,以帶正負號或不帶正負號的數字表示,後面接著
%(百分比符號)。 語音的預設說話速率相當於傳遞值0%。 - 沒有單位指定的數字指定每分鐘的字數。 數字是絕對的; 您無法指定每分鐘單字的相對增加或減少。
- 以百分比表示的相對變更,以帶正負號或不帶正負號的數字表示,後面接著
-
對於表達神經語音,
pitch和rate屬性僅支援百分比值。- 對於
pitch屬性,請勿使用 Hertz、semitones 或關鍵字。 - 對於
rate屬性,請不要使用每分鐘的單字或關鍵字。
- 對於
如需 SSML 1.1版所支援特性的相關資訊,請參閱 SSML 規格的 3.2.4 prosody Element 一節。
pitch 屬性
pitch 屬性修改元素內文字的基準音高或音調。 接受值為:
-
Hz(Hertz) 指定後面的數字:* 基準音高被移調(向上或向下)到指定的值。 例如,150Hz。
- 以百分比表示的相對變更: 造成預設基線相對偏移的數字。 數字前面是
+(增加) 或-(減少),後面是%(百分比符號)。 後面接著%的不帶正負號數字會解譯為正數增加。 例如,+10%或10%。 語音的預設音高相當於傳遞值0%。 - 半音的相對改變: 造成預設基準線絕對偏移的數字。 數字前面是
+(增加) 或-(減少),後面是st(半音)。 後面接著st的不帶正負號數字會解譯為正數增加。 例如,+5st或5st。 - 一個關鍵字: 以下六個關鍵字之一,可將音高修改為相對應的預設值:
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,其指出如何解譯括住的文字。 - 該元素有兩個可選的屬性,
format和detail,它們只與interpret-as屬性的特定值一起使用,如以下範例所示。
服務支援具有下列語言的 <say-as> 元素:
- 服務完全支援美式英文的
<say-as>元素。 - 對於大部分其他語言,服務只支援該元素的
digits和letters屬性。 - 對於日文,服務只支援
digits屬性。 服務會忽略包含在數字字串中的非數值字元。
服務的英文字母、數值及英數字串預設發音會因語言而異,每一種語言都有自己的規則。 您可以使用 <say-as> 元素來控制字串的發音方式,包括是否要以 letters 和 digits 元素的個別字元來拼出字串。
對於德文,您也可以控制服務發音字元的速度。 如需相關資訊,請參閱 指定如何拼出字串。
interpret-as 屬性
interpret-as 屬性的可接受值以及各值的範例如下。 服務支援下列值作為 interpret-as 屬性的引數:
cardinaldatedigitsinterjectionlettersnumberordinalvxml:booleanvxml:currencyvxml:datevxml:timevxml:digitsvxml:phone
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,服務仍會嘗試對日期發音。 下列範例以指定的格式說出指出的日期,其中 d、m 及 y 代表日、月和年。
<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 延伸。 它僅支援與表達神經語音一起使用。
透過表達神經語音,服務會自動強調下列形容詞: aha、hmm、huh、oh、uh、uh-huh 及 um。 您可以使用 interjection 值來啟用或停用服務的拒絕強調 aha 和 oh。 包括值為 true 或 false 的其他 enabled 屬性,以啟用或停用感嘆詞。
下列範例會停用文字中 aha 和 oh 的強調顯示:
<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 屬性指定 group 或 single 的值。 這些屬性有助於提高字母數字字串的可讀性,如確認數字和 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 值提供 cardinal 和 ordinal 值的替代方案。 您可以使用選用 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 值會說出 yes 或 no,視元素內的 true 或 false 值而定。
<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> 元件要求改變語音。 不支援此元素。