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