本文同步發(fā)布在個人博客 SSML(語音合成標記語言)初學者指南 – 碼微
什么是 SSML?
SSML 代表語音合成標記語言。它使你能夠?qū)I合成語音(稱為文本到語音或 TTS)進行微調(diào)和調(diào)整,以使它們聽起來更自然或糾正常見的錯誤發(fā)音。可以把它想象成 網(wǎng)頁中的CSS,但用于語音應(yīng)用程序和語音系統(tǒng)。你不僅可以使用 SSML 使語音合成系統(tǒng)以不同的方式發(fā)音,還可以添加諸如中斷和暫停之類的內(nèi)容,以及加快、減慢或調(diào)整語音的音高等,以改變節(jié)奏和使講話聽起來更自然。
為什么需要 SSML?
當你通過 TTS 系統(tǒng)收聽書面對話時,聽起來并不總是你想象的或你想要的。有時聽起來可能不夠人性化或不夠自然。有時聽起來很刺耳。SSML 是幫助你解決此問題的重要工具。例如:
- TTS系統(tǒng)可能會誤讀你的品牌名稱
- 它可能說得不夠清楚
- 也許它有點太快了,讓所說的一時難以消化
- 你可能想要強調(diào)句子的特定部分。
這就是 SSML 有用的地方。
如何使用 SSML?
要在對話系統(tǒng)中使用 SSML,只需像使用任何其他代碼一樣標記對話
例如,在網(wǎng)頁設(shè)計中,要創(chuàng)建一段文本,你可以使用如下所示的“p”標簽來標記你的代碼:
這是一段文字。
對于對話系統(tǒng),同樣的原則也適用。
從文本到語音系統(tǒng)中讀取的所有口語對話都必須包含 標簽,如下所示:
嗨,我叫 VUX。
標簽告訴 TTS 系統(tǒng),其中包含的單詞是要說出來的。
將對話包裝在語音標簽中后,你可以在 標簽中使用許多其他標簽來創(chuàng)建你想要的效果。
SSML 標簽示例
可用于操作 TTS 系統(tǒng)的常見 SSML 標簽有:
- audio:將音頻文件嵌入到對話中。非常適合添加耳塞之類的東西
- break : 插入一個指定秒數(shù)或毫秒數(shù)的暫停
- emphasis: 把標記的詞說得更大更慢
- lang:指定語音應(yīng)該說的預(yù)期語言
- p:段落標記,在標記文本之后添加暫停以表示段落的結(jié)尾
- phoneme :允許你通過將語音字母表中的單個音素組合在一起來構(gòu)造單詞的特定發(fā)音
- prosody:讓你調(diào)整文本的音量、速率(速度)和音高
- s:在句末添加停頓。類似于 p 標簽,只是停頓更短
- say-as:讓你更改某些單詞、短語或數(shù)字的發(fā)音方式。例如,如果你希望將數(shù)字 1234 讀取為“一、二、三、四”或“一千二百三十四”,以及許多其他選項。
- speak:根元素。所有口語文本都包含在此標簽中。
- sub : 用一個詞替換另一個詞。例如,將書面單詞“eg”發(fā)音為“for example”
- voice:指定 TTS 語音(通常在 Alexa 技能中用于調(diào)用 Amazon Polly 語音而不是內(nèi)置的 Alexa 語音)
- w:用于將單詞的發(fā)音從現(xiàn)在變?yōu)檫^去的原則,例如“read”和“read” ie “I’m going to read something” vs “I read a book tomorrow”,以及許多其他選項
一些語音助手和語音合成系統(tǒng)具有其平臺獨有的特定標簽。不過,從廣義上講,大多數(shù)系統(tǒng)都允許使用標準標簽,但你應(yīng)該始終與你的供應(yīng)商核實,以確保這一點。
如何在語音合成系統(tǒng)中使用 SSML 標簽
在對話中插入特定的 SSML 標簽很簡單。
假設(shè)你希望合成語音在句子結(jié)尾暫停片刻。只需輸入句號. 將自行完成此操作,無需任何特定標記。一個 . 將插入 500 毫秒到 1 秒之間的暫停,具體取決于系統(tǒng)。
但是,假設(shè)你想進行調(diào)整以增加停頓的長度以創(chuàng)造戲劇效果。在這里,你將在對話中你希望系統(tǒng)暫停的位置插入一個 標記:
嗨,我叫 VUX,這是今天的新聞。 天氣預(yù)備…
或者你可能想放慢對話的速度。你可以試試:
嗨,我叫 VUX。
嵌套 SSML 標簽
就像使用 HTML 一樣,你可以將 SSML 標簽相互嵌套,以將許多對話操作拼接在一起。
這有點像在 Web 開發(fā)中在
標記中插入 標記:
世界震撼人心。在這里查看。
假設(shè)你想提高單個單詞的音高,并讓該單詞以法國口音發(fā)音,你可以使用以下內(nèi)容:
Bonjour!
這些操作適用于標準 TTS 語音,但不適用于神經(jīng)網(wǎng)絡(luò)語音。
測試和預(yù)覽 SSML 編輯
創(chuàng)建這些SSML代碼后,需要驗證更改是否達到要求,有許多工具可執(zhí)行此操作,包括:
- Amazon Polly
- Google Cloud
- TopVoiceApps
在哪里可以找到完整的 SSML 參考指南?
有關(guān)所有標簽類型的代碼示例的完整 SSML 參考指南,請嘗試:
(亞馬遜)[https://developer.amazon.com/en-US/docs/alexa/custom-skills/speech-synthesis-markup-language-ssml-reference.html](谷歌)[https://cloud.google.com/text-to-speech/docs/ssml](微軟)[https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/speech-synthesis-markup?tabs=csharp]
請注意,這些都是基于各自的系統(tǒng)下編寫的。這意味著你可能會發(fā)現(xiàn)某些標簽在你選擇的 TTS 系統(tǒng)中不起作用
SSML 的局限性
盡管 SSML 很棒,但它并不完美:調(diào)整音素以完美地發(fā)音品牌名稱。以適當?shù)耐nD水平來微調(diào)節(jié)奏,使聲音聽起來更自然。這一切都需要工作。
使用 SSML 操作通用 TTS 并不總是有好的結(jié)果
通用語音使 TTS 系統(tǒng)難以針對某些用例進行更改。例如,假設(shè)你正在設(shè)計一個語音應(yīng)用程序,并且你希望你的聲音聽起來超級生動和快樂,這有點像試圖將吉他變成鋼琴,因為 通用 TTS 聲音是為通用目的而構(gòu)建的。
為什么 SSML 不能隨心所欲地改變聲音的聲音
使用 SSML 時,你實際上所做的是向 TTS 系統(tǒng)提供有關(guān)它應(yīng)該如何操作其產(chǎn)生的音頻的說明。你不是在“調(diào)整聲音”。
例如,如果你使用 標簽來減慢語速;從技術(shù)上講,為了減慢聲音,TTS 系統(tǒng)所做的只是延長它產(chǎn)生的音頻的時間,以使每個樣本更長。
為什么音頻比特率很重要
CD(光盤,還記得嗎?)可以以每秒 44,100 位的速度播放音頻文件。即 44,100 個單獨的數(shù)據(jù)位在一秒鐘內(nèi)連續(xù)擊中你的耳朵。
自然,對于人耳,你無法區(qū)分每個單獨的位,因此聽起來像是穩(wěn)定的音頻流。
它的工作方式與視頻相同。每秒 24 幀的視頻只是連續(xù) 24 張靜止圖像。你的眼睛無法處理足夠快的圖像變化,所以它看起來像一個視頻。音頻也是如此。
TTS 系統(tǒng)的比特率是多少?
TTS 系統(tǒng)的“比特率”可以低至每秒 200 比特,或高達 1,200。低比特率很有幫助,因為它有助于將音頻快速返回到語音應(yīng)用程序,并且盡可能少地使用互聯(lián)網(wǎng)帶寬。
這樣做的一個原因是確保系統(tǒng)在互聯(lián)網(wǎng)連接下降時仍然可以說話,另一個原因是它可以足夠快地提供音頻以模擬與用戶的真實對話。人類往往會在 200 毫秒內(nèi)做出回應(yīng)。如果語音應(yīng)用程序的響應(yīng)時間比響應(yīng)時間長得多,那么用戶體驗就會受到影響,就好像系統(tǒng)沒有聽到你的聲音,無法回答你或者不夠聰明,無法快速思考。
由于 TTS 系統(tǒng)通常會生成低比特率(低“質(zhì)量”)音頻文件以在語音用戶界面中為用戶提供服務(wù),因此應(yīng)用 SSML 標記(音頻操作)最終會導致質(zhì)量更低的音頻。
這就是為什么你的 SSML 聽起來并不總是很好的原因。
在使用 SSML 標簽來減慢語音的速率(速度)的示例中;當你放慢音頻速度時,你會將低比特率音頻文件的時間拉伸到斷點。它聽起來很扭曲,因為它被 扭曲了。它極大地拉伸了音頻,以至于在這些“位”之間產(chǎn)生了很小的沉默間隙。然后,它將音頻向下移動幾個鍵,因此聽起來“更深”(如果不降低音高,你無法減慢一段音頻)。這只是 SSML 的一部分。那是一個標簽。許多 SSML 標簽或多或少都存在這種限制,這就是為什么 SSML 不能用于大型語音操作的原因。
你應(yīng)該使用 SSML 做什么
SSML 適于對語音進行微調(diào),如果試圖過多地操縱聲音,很可能你始終無法讓它聽起來正常