您可以在傳送的 Text-to-Speech 要求中使用語音合成標記語言 (SSML),設定語音停頓,以及首字母縮略字、日期、時間、縮寫的讀法,或是指定須消音的文字等細節,讓音訊回應具備更高的自訂彈性。如需詳細資訊和程式碼範例,請參閱 Text-to-Speech 的 SSML 教學課程。
以下是 SSML 標記以及 Text-to-Speech 合成文字的範例:
<speak> Here are <say-as interpret-as="characters">SSML</say-as> samples. I can pause <break time="3s"/>. I can play a sound <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>. I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>. Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line. Or I can even speak in digits. The digits for ten are <say-as interpret-as="characters">10</say-as>. I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>. Finally, I can speak a paragraph with two sentences. <p><s>This is sentence one.</s><s>This is sentence two.</s></p> </speak>
以下是含有合成文字的 SSML 範例文件:
Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays]. I can speak in cardinals. Your number is ten. Or I can speak in ordinals. You are tenth in line. Or I can even speak in digits. The digits for ten are one oh. I can also substitute phrases, like the World Wide Web Consortium. Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.
Text-to-Speech 支援一部分可用的 SSML 標記,本主題將逐一說明這些標記。
如要進一步瞭解如何使用 Text-to-Speech,根據 SSML 輸入內容來建立音訊資料,請參閱「建立語音的音訊檔案」。
歡迎試用
如果您未用過 Google Cloud,歡迎建立帳戶,親自體驗 Text-to-Speech 在實際應用情境中的成效。新客戶還能獲得 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
免費試用 Text-to-SpeechSSML 使用訣竅
根據您的實作情況,將 SSML 酬載傳送到 Text-to-Speech 時,可能會需要在 SSML 酬載中逸出引號。以下範例顯示如何設定 JSON 物件內 SSML 輸入內容的格式。
"{ 'input':{ 'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as> standard <break time=\"1s\"/>is defined by the <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>' }, 'voice':{ 'languageCode':'en-us', 'name':'en-US-Standard-B', 'ssmlGender':'MALE' }, 'audioConfig':{ 'audioEncoding':'MP3' } }"
保留字元
請避免在要轉換為音訊的文字中使用 SSML 保留字元。如需使用這類保留字元,請使用逸出碼,避免系統將字元讀取為程式碼。下表列出保留的 SSML 字元及相關逸出碼。
| 字元 | 逸出碼 |
|---|---|
| " | " |
| & | & |
| ' | ' |
| < | < |
| > | > |
選取語音
您可以在 VoiceSelectionParams 物件中設定語音。請參閱 Text-to-Speech SSML 教學課程,觀看程式碼範例,瞭解如何使用 VoiceSelectionParams 物件。
您可以使用 <voice> 標記來以多種語音朗讀 SSML,但須將 VoiceSelectionParams 名稱設為相容的語音:
| 要求的語音類型 | <voice> 標記支援的語音類型 | ||||
|---|---|---|---|---|---|
| Neural2 | Studio | Wavenet | News | Standard | |
| Neural2 | ✔ | ✔ | ✔ | ||
| Studio | ✔ | ✔ | ✔ | ||
| Wavenet | ✔ | ✔ | ✔ | ||
| Standard | ✔ | ✔ | ✔ | ||
| News | ✔ | ✔ | ✔ | ||
可使用的 SSML 元素
以下各節說明可在動作中使用的 SSML 元素和選項。
<speak>
SSML 回應的根元素。
如要進一步瞭解 speak 元素,請參閱「W3 規格」。
範例
<speak> my SSML content </speak>
<break>
用於控制字詞之間的停頓或其他韻律界限的空元素。您可以選擇是否要在任何一對符記之間使用 <break>。如果字詞間沒有這個元素,系統會依據語境自動決定停頓處。
如要進一步瞭解 break 元素,請參閱「W3 規格」。
屬性
| 屬性 | 說明 |
|---|---|
time |
以秒或毫秒為單位設定停頓長度 (例如「3 秒」或「250 毫秒」)。 |
strength |
透過相對等級字詞設定輸出內容的韻律停頓強度,有效值為「x-weak」、「weak」、「medium」、「strong」及「x-strong」。「none」值表示不應輸出韻律停頓界限,用來避免處理器產生韻律停頓。其他值表示兩個符記之間的停頓強度單調不遞減 (概念上遞增),較強的界限通常會出現停頓。 |
範例
以下範例說明如何使用 <break> 元素,在各步驟之間停頓:
<speak> Step 1, take a deep breath. <break time="200ms"/> Step 2, exhale. Step 3, take a deep breath again. <break strength="weak"/> Step 4, exhale. </speak>
<say‑as>
這個元素可讓您指定元素所含文字結構類型的相關資訊,也可用於指定轉譯內含文字時的詳細程度。
<say‑as> 元素包含必要屬性 interpret-as,用於決定值的讀法。您可以依據特定 interpret-as 值,使用選用的 format 和 detail 屬性。
範例
interpret-as 屬性支援下列值:
-
currency以下範例的語音讀法是「forty two dollars and one cent」。如果省略語言屬性,系統會使用目前的語言代碼。
<speak> <say-as interpret-as='currency' language='en-US'>$42.01</say-as> </speak> -
telephone請參閱 W3C SSML 1.0 say-as 屬性值 WG 附註的
interpret-as='telephone'說明。以下範例的語音讀法是「one eight zero zero two zero two one two one two」。如果省略「google:style」屬性,系統會將數字 0 唸成字母 O。
「google:style='zero-as-zero」屬性目前僅適用於語言代碼 EN。
<speak> <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as> </speak> -
verbatim或spell-out以下範例分別讀出每個字母:
<speak> <say-as interpret-as="verbatim">abcdefg</say-as> </speak> -
dateformat屬性是日期欄位字元碼的序列。format支援的欄位字元代碼為 {y,m,d},分別代表年、月和日。如果代表年、月或日的欄位代碼僅出現一次,則預期的數字位數依序為 4、2、2。如果欄位代碼重複出現,預期的數字位數就等於代碼重複的次數。日期文字中的欄位可以用標點符號及/或空格來分隔。detail屬性用來控制日期的讀法。detail='1'表示必填的只有日欄位,以及月或年其中一個欄位,也可兩者皆填。只要三個欄位少填一個以上,此值即為預設值。讀法是「The {ordinal day} of {month}, {year}」。以下範例的語音讀法是「The tenth of September, nineteen sixty」:
<speak> <say-as interpret-as="date" format="yyyymmdd" detail="1"> 1960-09-10 </say-as> </speak>以下範例的語音讀法是「The tenth of September」:
<speak> <say-as interpret-as="date" format="dm">10-9</say-as> </speak>detail='2'表示日、月、年欄位都必填,當三個欄位值都提供時,此值為預設值。讀法是「{month} {ordinal day}, {year}」。以下範例的語音讀法是「September tenth, nineteen sixty」:
<speak> <say-as interpret-as="date" format="dmy" detail="2"> 10-9-1960 </say-as> </speak> -
characters以下範例的語音讀法是「C A N」:
<speak> <say-as interpret-as="characters">can</say-as> </speak> -
cardinal以下範例的語音讀法是「Twelve thousand three hundred forty five」(美式英文) 或「Twelve thousand three hundred and forty five」(英式英文):
<speak> <say-as interpret-as="cardinal">12345</say-as> </speak> -
ordinal以下範例的語音讀法是「First」:
<speak> <say-as interpret-as="ordinal">1</say-as> </speak> -
fraction以下範例的語音讀法是「five and a half」:
<speak> <say-as interpret-as="fraction">5+1/2</say-as> </speak> -
expletive或bleep以下範例輸出嗶聲,就像經過消音處理一樣:
<speak> <say-as interpret-as="expletive">censor this</say-as> </speak> -
unit依據數字,將單位轉換成單數或複數。以下範例的語音讀法是「10 feet」:
<speak> <say-as interpret-as="unit">10 foot</say-as> </speak> -
time以下範例的語音讀法是「Two thirty P.M.」:
<speak> <say-as interpret-as="time" format="hms12">2:30pm</say-as> </speak>format屬性是時間欄位字元碼序列。format支援的欄位字元代碼為 {h,m,s,Z,12,24},分別代表時間的時、分、秒、時區、12 小時制和 24 小時制。如果代表時、分或秒的欄位碼只出現一次,則預期的數字位數依序為 1、2、2。如果欄位代碼重複出現,預期的數字位數就等於代碼重複的次數。時間文字中的欄位可以用標點符號及/或空格來分隔。如果沒有以此格式指定時、分或秒,或是位數不相符,系統會將欄位值視為零。format的預設值為「hms12」。detail屬性用於控制時間的讀法要使用 12 小時制或 24 小時制。如果省略detail='1'或detail,且時間格式為 24 小時制,讀法便為 24 小時制。如果省略detail='2'或detail,且時間格式為 12 小時制,則讀法為 12 小時制。
如要進一步瞭解 say-as 元素,請參閱「W3 規格」。
<audio>
用於插入錄製的音訊檔,以及其他音訊格式與合成語音輸出。
屬性
| 屬性 | 必填 | 預設值 | 值 |
|---|---|---|---|
src |
是 | 不適用 | 參照音訊媒體來源的 URI。支援的通訊協定為 https。 |
clipBegin |
否 | 0 | 一個 TimeDesignation 值,指定從音訊來源的開頭到開始播放之間的偏移時間。如果這個值大於或等於音訊來源的實際長度,則不會插入音訊。 |
clipEnd |
否 | infinity | 一個 TimeDesignation 值,指定從音訊來源的開頭到結束播放之間的偏移時間。如果音訊來源的實際長度小於這個值,就會在值所指定的時間點結束播放。如果 clipBegin 大於或等於 clipEnd,則不會插入音訊。 |
speed |
否 | 100% | 輸出播放速率相對於正常輸入速率的比值,以百分比表示。格式為正實數,後面加上 %。目前支援的範圍為 [50% (慢 - 半速) 至 200% (快 - 雙倍速)]。超出此範圍的值可能會 (也可能不會) 自動調整到範圍內。 |
repeatCount |
否 | 1,若設定了 repeatDur 則為 10 |
一個實數,用來指定要插入多少次音訊 (如果設定 clipBegin 和/或 clipEnd,則會先剪輯再插入)。系統不支援小數重複次數,因此值會四捨五入至最接近的整數。零是無效值,因此系統會視為未指定,並使用預設值。 |
repeatDur |
否 | infinity | 一個 TimeDesignation 值,用來限制插入音訊的長度;此限制是套用在經過 clipBegin、clipEnd、repeatCount 和 speed 屬性處理的來源音訊,而非正常的播放長度。如果處理後的音訊長度少於此值,則會在值指定的時間點結束播放。 |
soundLevel |
否 | +0dB | 依照 soundLevel 分貝調整音訊的音量。範圍上限是 +/-40dB,但實際範圍可能更小,而且輸出品質可能無法在整個範圍內都有良好表現。 |
下方是目前支援的音訊設定:
- 格式:MP3 (MPEG v2)
- 每秒取樣 24K
- 每秒 24K ~ 96K 位元,固定速率
- 格式:Ogg 中的 Opus
- 每秒取樣 24K (超寬頻)
- 每秒 24K - 96K 位元,固定速率
- 格式 (已淘汰):WAV (RIFF)
- PCM 帶正負號 16 位元,小端序
- 每秒取樣 24K
- 適用於所有格式:
- 建議使用單聲道,但也可接受立體聲。
- 長度上限 240 秒。如果想播放更長的音訊,請考慮實作媒體回應。
- 檔案大小上限 5 MB。
- 來源網址必須使用 HTTPS 通訊協定。
- 系統擷取音訊時,UserAgent 會標示為「Google-Speech-Actions」。
<audio> 元素內容為選用項目,用於音訊檔案無法播放或輸出裝置不支援音訊的情況。內容可包含 <desc> 元素,在這種情況下,系統會顯示該元素的文字內容。詳情請參閱「回應檢查清單」中的「錄製的音訊」一節。
src 網址必須是 HTTPS 網址。Google Cloud Storage 可以在 HTTPS 網址上託管您的音訊檔案。
如要進一步瞭解媒體回應,請參閱《回應》指南中的「媒體回應」一節。
如要進一步瞭解 audio 元素,請參閱「W3 規格」。
範例
<speak> <audio src="cat_purr_close.ogg"> <desc>a cat purring</desc> PURR (sound didn't load) </audio> </speak>
<p>,<s>
句子和段落元素。
如要進一步瞭解 p 和 s 元素,請參閱「W3 規格」。
範例
<p><s>This is sentence one.</s><s>This is sentence two.</s></p>
最佳做法
- 請使用 <s>...</s> 標記包住完整句子,尤其是包含會改變韻律的 SSML 元素 (即 <audio>、<break>、<emphasis>、<par>、<prosody>、<say-as>、<seq> 和 <sub>) 時。
- 如果語音需出現明顯的停頓,請使用 <s>...</s> 標記,在句子之間放入停頓。
<sub>
指定在發音時,以別名屬性中的文字取代內含文字。
您也可以使用 sub 元素,替難發音的字詞提供簡化發音。下方最後一個範例以日文說明這個用途。
如要進一步瞭解 sub 元素,請參閱「W3 規格」。
範例
<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="にっぽんばし">日本橋</sub>
<mark>
這個空元素會在文字或標記序列中放置記號,可用來參照序列中的特定位置,或將記號插入輸出串流中,用於非同步通知。
如要進一步瞭解 mark 元素,請參閱「W3 規格」。
範例
<speak> Go from <mark name="here"/> here, to <mark name="there"/> there! </speak>
<prosody>
用來自訂元素內含文字的音調、語速和音量。目前支援 rate、pitch 和 volume 屬性。
您可以依據 W3 規格設定 rate 和 volume 屬性。設定 pitch 屬性值時可使用以下三個選項:
| 屬性 | 說明 |
|---|---|
name |
每個標記的字串 ID。 |
| 選項 | 說明 |
|---|---|
| 相對 | 指定相對值,例如 「low」、「medium」、「high」等;「medium」是預設音調。 |
| 半音 | 使用「+Nst」或「-Nst」,將音調提高或降低「N」個半音。請注意,值必須包含「+/-」和「st」。 |
| 百分比 | 使用「+N%」或「-N%」,將音調提高或降低「N」%。請注意,值必須包含「%」,但不一定要包含「+/-」。 |
如要進一步瞭解 prosody 元素,請參閱「W3 規格」。
範例
以下範例使用 <prosody> 元素,以比正常低 2 個半音的語調緩慢說話:
<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>
<emphasis>
用來在元素內含的文字中加入或移除強調語氣。<emphasis> 元素類似 <prosody>,會修改語音,但不需要設定個別語音屬性。
此元素支援選用的「level」屬性,有效值如下:
strongmoderatenonereduced
如要進一步瞭解 emphasis 元素,請參閱「W3 規格」。
範例
以下範例使用 <emphasis> 元素發表公告:
<emphasis level="moderate">This is an important announcement</emphasis>
<par>
平行媒體容器,可用來一次播放多個媒體元素。唯一允許的內容是一或多個 <par>、<seq> 和 <media> 組成的一組元素。<media> 元素的順序並不重要。
除非子元素指定了不同的開始時間,否則元素隱含的開始時間會與 <par> 容器的開始時間相同。如果子元素的「begin」或「end」屬性設定了偏移值,該元素的偏移時間會以 <par> 容器的開始時間為基準計算。系統會忽略根 <par> 元素的 begin 屬性,開始時間是 SSML 語音合成程序開始產生根 <par> 元素輸出內容的時間 (也就是實際上的時間「0」)。
範例
<speak>
<par>
<media xml:id="question" begin="0.5s">
<speak>Who invented the Internet?</speak>
</media>
<media xml:id="answer" begin="question.end+2.0s">
<speak>The Internet was invented by cats.</speak>
</media>
<media begin="answer.end-0.2s" soundLevel="-6dB">
<audio
src="https://actions.google.com/.../cartoon_boing.ogg"/>
</media>
<media repeatCount="3" soundLevel="+2.28dB"
fadeInDur="2s" fadeOutDur="0.2s">
<audio
src="https://actions.google.com/.../cat_purr_close.ogg"/>
</media>
</par>
</speak><seq>
一種序列式媒體容器,可用來按順序逐一播放媒體元素。唯一允許的內容是一或多個 <seq>、<par> 和 <media> 組成的一組元素。系統會依照媒體元素的順序逐一轉譯。
子元素的「begin」和「end」屬性可設為偏移值 (請參閱下方的「時間規格」一節)。這些子元素偏移值的計算基準,是序列中前一個元素的結尾;若元素是序列中的第一個項目,則以 <seq> 容器的開頭為基準。
範例
<speak>
<seq>
<media begin="0.5s">
<speak>Who invented the Internet?</speak>
</media>
<media begin="2.0s">
<speak>The Internet was invented by cats.</speak>
</media>
<media soundLevel="-6dB">
<audio
src="https://actions.google.com/.../cartoon_boing.ogg"/>
</media>
<media repeatCount="3" soundLevel="+2.28dB"
fadeInDur="2s" fadeOutDur="0.2s">
<audio
src="https://actions.google.com/.../cat_purr_close.ogg"/>
</media>
</seq>
</speak><media>
代表 <par> 或 <seq> 元素中的媒體層。允許的 <media> 元素內容為 SSML <speak> 或 <audio> 元素。下表說明 <media> 元素的有效屬性。
屬性
| 屬性 | 必填 | 預設值 | 值 |
|---|---|---|---|
| xml:id | 否 | 沒有值 | 這個元素的專屬 XML ID。不支援編碼實體。允許符合以下規則運算式的 ID 值:"([-_#]|\p{L}|\p{D})+"。詳情請參閱「XML-ID」。 |
| begin | 否 | 0 | 此媒體容器的開始時間。如果為根媒體容器元素,系統會忽略此值 (視為等同於預設值「0」)。若要瞭解有效的字串值,請參閱下方的「時間規格」一節。 |
| end | 否 | 沒有值 | 此媒體容器的結束時間規格。若要瞭解有效的字串值,請參閱下方的「時間規格」一節。 |
| repeatCount | 否 | 1 | 一個實數,用於指定要插入媒體多少次。不支援非整數的重複次數,系統會將值四捨五入至最接近的整數。零是無效值,因此系統會視為未指定,並使用預設值。 |
| repeatDur | 否 | 沒有值 | 一個 TimeDesignation 值,用於限制插入媒體的長度。如果媒體的長度少於此值,則會在值指定的時間點結束播放。 |
| soundLevel | 否 | +0dB | 依照 soundLevel 分貝調整音訊的音量。範圍上限是 +/-40dB,但實際範圍可能更小,而且輸出品質可能無法在整個範圍內都有良好表現。 |
| fadeInDur | 否 | 0s | 一個 TimeDesignation 值,若超過這個值,媒體會從無聲淡入到選擇性指定的 soundLevel。如果媒體的長度小於這個值,淡入效果會在結束播放時停止,且音量不會達到指定音量。 |
| fadeOutDur | 否 | 0s | 一個 TimeDesignation 值,若超過這個值,媒體會從選擇性指定的 soundLevel 淡出,直到無聲。如果媒體長度小於這個值,系統會將音量值調低,確保在播放結束時達到無聲狀態。 |
時間規格
用於 <media> 元素和媒體容器 (<par> 和 <seq> 元素) 中「begin」和「end」屬性值的時間規格,可以是偏移值 (例如 +2.5s),也可以是同步基準值 (例如 foo_id.end-250ms)。
- 偏移值:時間偏移值是一種 SMIL 時間計數值,允許符合以下規則運算式的值:
"\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"第一組數字字串代表小數的整數部分,第二組數字字串則為小數的小數部分。預設符號 (即「(+|-)?」) 為「+」。單位值分別對應到時、分、秒和毫秒。單位的預設值是「s」(秒)。
- 同步基準值:同步基準值指的是 SMIL 同步基準值,允許符合以下規則運算式的值:
"([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"數字和單位的解讀方式與偏移值相同。
<phoneme>
您可以使用 <phoneme> 標記,在文字行內產生字詞的自訂發音。Text-to-Speech 接受 IPA 和 X-SAMPA 表音字母系統。如需支援的語言和音素清單,請參閱音素頁面。
每次套用 <phoneme> 標記,都是用來指定單一字詞的發音:
<phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme> <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>
重音標記
轉錄稿中可標示最多三個等級的重音:
- 主要重音:在 IPA 中以「/ˈ/」標示,X-SAMPA 中則以「/"/」標示。
- 次要重音:在 IPA 中以「/ˌ/」標示,X-SAMPA 中則以「/%/」標示。
- 非重音:不以符號標示 (無論是哪種標示方式)。
部分語言可能少於三個等級,或是完全不標示重音位置。如要查看您的語言適用的重音等級,請參閱音素頁面。重音標記會放在每個重音音節的開頭。以美式英文為例:
| 範例字詞 | IPA | X-SAMPA |
|---|---|---|
| water | ˈwɑːtɚ | "wA:t@` |
| underwater | ˌʌndɚˈwɑːtɚ | %Vnd@"wA:t@ |
廣泛與狹義語音轉錄
一般來說,語音轉錄應保持概括性,以音素為主。以美式英文為例,會轉錄母音之間的「/t/」,而非使用輕彈音:
| 範例字詞 | IPA | X-SAMPA |
|---|---|---|
| butter | ˈbʌtɚ 而非 ˈbʌɾɚ | "bVt@` 而非 "bV4@` |
在某些情況下,使用音素表示法會導致 TTS 輸出內容聽起來不自然 (例如音素序列在解剖學上難以發音)。
舉例來說,英文中「/s/」的發聲同化就屬於這個現象。此時,語音轉錄應反映同化現象:
| 範例字詞 | IPA | X-SAMPA |
|---|---|---|
| cats | ˈkæts | "k{ts |
| dogs | ˈdɑːgz 而非 ˈdɑːgs | "dA:gz 而非 "dA:gs |
弱化
每個音節都必須包含一個 (且只能有一個) 母音。也就是說,應避免使用音節性子音,而改用弱化母音來轉錄。例如:
| 範例字詞 | IPA | X-SAMPA |
|---|---|---|
| kitten | ˈkɪtən 而非 ˈkɪtn | "kIt@n 而非 "kitn |
| kettle | ˈkɛtəl 而非 ˈkɛtl | "kEt@l 而非 "kEtl |
音節劃分
您可以選用「/./」指定音節界線。每個音節都須包含一個 (且僅限一個) 母音。例如:
| 範例字詞 | IPA | X-SAMPA |
|---|---|---|
| readability | ˌɹiː.də.ˈbɪ.lə.tiː | %r\i:.d@."bI.l@.ti: |
自訂發音字典
除了使用 phoneme 標記提供發音,您也可以在語音合成 RPC 中提供自訂發音字典。如果要求中包含自訂發音字典,輸入文字會自動轉換為標示 SSML phoneme 標記。
舉例來說,下列要求含有文字輸入內容和自訂發音,經過轉換後就等同於下列 SSML。
原始輸入內容:
input: {
text: 'Hello world! It is indeed a beautiful world!',
custom_pronunciations: {
pronunciations: {
phrase: 'world'
phonetic_encoding: PHONETIC_ENCODING_IPA
pronunciation: 'wɜːld'
}
}
}轉換後的輸入內容:
input: {
ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak>'
}持續時間
Text-to-Speech 支援 <say-as interpret-as="duration">,可正確讀出持續時間。舉例來說,以下範例的讀法為「five hours and thirty minutes」:
<say-as interpret-as="duration" format="h:m">5:30</say-as>
格式字串支援下列值:
| 縮寫 | 值 |
|---|---|
| h | hours |
| m | minutes |
| s | seconds |
| ms | milliseconds |
<voice>
<voice> 標記可讓您在單一 SSML 要求中使用多個語音。在以下範例中,預設語音是英文男聲。所有字詞都會以這個語音合成,除了「qu'est-ce qui t'amène ici」之外,這句話會使用女聲以法文發音,而非預設語言 (英文) 和性別 (男性)。
<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>
或者,您也可以使用 <voice> 標記指定個別語音 (支援的語音頁面上的「語音名稱」),而非指定 language 和/或 gender:
<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est mignon</voice><break time="250ms"/> said a pet shop owner</speak>
使用 <voice> 標記時,Text-to-Speech 會預期收到 name (要使用的語音名稱) 或下列屬性的組合。這三項都是選用屬性,但如未提供 name,就必須至少指定一項屬性。
gender:「male」、「female」或「neutral」擇一。variant:根據設定,如果有多種可能使用的語音,這個屬性會成為決定關鍵。language:要使用的語言。在指定的<voice>標記中,只能指定一種語言,且需使用 BCP-47 格式。如要查看語言的 BCP-47 代碼,請前往支援的語音和語言頁面,查看「語言代碼」一欄。
您也可以使用另外兩個標記 required 和 ordering,控制 gender、variant 和 language 屬性的相對優先順序。
required:如果指定屬性為required,但未正確設定,要求就會失敗。ordering:ordering標記後列出的任何屬性都視為偏好屬性,而非必要屬性。Text-to-Speech 會盡可能依照ordering標記後列出的順序,考量偏好的屬性。如果偏好的屬性設定有誤,Text-to-Speech 可能仍會傳回有效語音,但是會捨棄錯誤的設定。
以下是使用 required 和 ordering 標記的設定範例:
<speak>And there it was <voice language="en-GB" gender="male" required="gender" ordering="gender language">a flying bird </voice>roaring in the skies for the first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female" ordering="language gender">Sunday Funday.</voice></speak>
<lang>
您可以使用 <lang>,在同一個 SSML 要求中加入多種語言的文字。除非使用 <voice> 標記明確變更語音,否則所有語言都會以同一種語音合成。xml:lang 字串必須包含 BCP-47 格式的目標語言;這個值列在支援的語音表的「語言代碼」中。在下列範例中,「chat」以法文讀出,而非預設語言 (英文):
<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>
Text-to-Speech 會盡量支援 <lang> 標記。即使在同一個 SSML 要求中指定,並非所有語言組合產生的輸出內容都具有相同品質。某些時候,語言組合可能會產生可察覺但很微妙的效果,或導致使用者認為不理想。已知問題:
<lang>標記不支援日文漢字,系統會音譯輸入內容,並以中文字元讀出。<lang>標記不支援阿拉伯文、希伯來文和波斯文等閃米特語系,因此會導致輸出內容無聲。如要使用上述任一種語言,建議使用<voice>標記切換語音,讀出所需語言 (如有)。
SSML 時間點
Text-to-Speech API 支援在建立的音訊資料中使用時間點。時間點是對應到腳本中指定位置的時間戳記 (以秒為單位,從生成音訊的開頭算起)。您可以使用 <mark> 標記在腳本中設定時間點。音訊生成後,API 會傳回音訊開頭與該時間點之間的時間偏移。
設定時間點的步驟有兩個:
- 在要取得時間戳記的腳本位置,加入
<mark>SSML 標記。 - 將 TimepointType 設為
SSML_MARK。如未設定這個欄位,預設就不會傳回時間點。
以下範例會傳回兩個時間點:
- timepoint_1:表示「Mark」一詞在生成的音訊中出現的時間 (以秒為單位)。
- timepoint_2:表示「see」一詞在生成的音訊中出現的時間 (以秒為單位)。
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark name="timepoint_2"/> see you.</speak>
風格
下列語音可使用多種風格朗讀:- en-US-Neural2-F
- en-US-Neural2-J
使用 <google:style> 標記控制要使用的風格。此標記只能用於完整句子前後。
範例:
<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>
name 欄位支援下列值:
apologeticcalmempatheticfirmlively