首頁 > AI 人工智能相關文章 > 文字轉語音最自然接近人聲的機器配音技術 – 用 SSML 語音標記輕鬆為短片配音
點擊圖片免費AI生圖

文字轉語音最自然接近人聲的機器配音技術 – 用 SSML 語音標記輕鬆為短片配音

2022-10-26 1303

相關文章

點擊圖片可以放大檢視
文字轉語音最自然接近人聲的機器配音技術 – 用 SSML 語音標記輕鬆為短片配音

很多人喜歡做教學影片,不管是記錄還是分享,都是用心良苦且立意良善,但可能是對自己的聲音沒信心,或有語言障礙,或者其他原因?所以就只有用音樂來陪襯,甚至有的連配樂都省了,只見游標在螢幕上跑來跑去,就算多看幾次搞懂了,眼睛也累了...

現在有了微軟的文字轉語音的服務,就可以輕鬆的為短片加上如真人發音般的旁白,不必擔心吃螺絲或唸錯字,不用付薪水也不會罷工,更不必擔心生病或請假,重點是可以免費使用,雖然有字數限制,但對短視頻來說,應該都夠用...

使用合成標記語言 (SSML) 做文字轉換語音,相較於使用純文字,SSML 可微調文字轉換語音輸出的音調、停頓、說話速度、音量等等。也可用於對話或說故事等需要多重配音的場景,讓語音合成更真實自然且靈活,稍懂 HTML 的人應該也不陌生,標籤一樣是成對的出現,有開始標籤,就有結束標籤,最外層一定是
<speak xmlns="https://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xmlns:emo="https://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="en-US"> 因為要用多人配音,所以使用 en-US </speak> xmlns、xmlns:mstts、xmlns:emo 照抄就可以,版本 version 目前是 1.0,xml:lang 是使用地區的語言,臺灣就是 zh-TW,大陸就是 zh-CN,如果想用多語系語音,xml:lang 設定為 en-US,就能使用 SSML 來設定其他地區的語言。voice 的 name 屬性是用來指定配音者的,識別輸出所使用的聲音,參閱完整語言支援

voice 是 SSML 的第二層,放在 speak 裡面,像這樣:

<speak xmlns="https://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts"
	xmlns:emo="https://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="en-US">
	<voice name="zh-CN-XiaoyiNeural">
		zh-CN-XiaoyiNeural 就是配音者為大陸的曉藝
	</voice>
</speak>


mstts:express-as 用來指定配音者說話時的情境,包括chat = 聊天、customerservice = 客戶服務、narration-professional = 旁白-專業、newscast-casual = 新聞廣播-休閒、newscast-formal = 新聞廣播正式、cheerful = 愉快、empathetic = 善解人意、angry = 生氣的、sad = 傷心、excited = 興奮的、friendly = 友誼賽、terrified = 嚇壞了、shouting = 大喊大叫、unfriendly = 不友好、whispering = 耳語、hopeful = 充滿希望、newscast = 新聞廣播、assistant = 助手、calm = 冷靜的、fearful = 可怕、disgruntled = 不滿、serious = 嚴肅的、gentle = 溫和的、affectionate = 親熱、embarrassed = 尷尬的、depressed = 鬱悶、envious = 羨慕、lyrical = 抒情的、poetry-reading = 讀詩、advertisement-upbeat = 廣告樂觀、Narration-relaxed = 敘述輕鬆、Sports_commentary = 體育評論、Sports_commentary_excited = 體育解說興奮、documentary-narration = 紀錄片-旁白等 35 種。每一個配音者可用的情境不盡相同,詳細可參考這裡
說話時的情境是可以忽略的,如果沒有指定,就會使用預設的情境,mstts 裡還有一個 styledegree 屬性,用來設定風格的強度,可是好像沒什麼差...
使用 mstts:silence type="Leading" 在段落開頭、 type="Tailing" 在段落結尾、 type="Sentenceboundary" 在每個換行之間" 增加靜音,時間由 value="100ms~5000ms"
mstts 必須放在 voice 標籤內,像這樣:

<speak xmlns="https://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts"
	xmlns:emo="https://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="en-US">
	<voice name="zh-CN-XiaoyiNeural">
		<mstts:silence  type="Sentenceboundary" value="2000ms"/>
		<mstts:express-as style="sad">
			sad = 傷心的語氣
		</mstts:express-as>
	</voice>
</speak>


說話的速度和音調、音量都可以在 prosody 內指定,速度 rate 和音調 pitch 都可以從 -100% 到 100%,速度和音調也是可以忽略的,如果沒有指定,就會使用預設的速度和音調,prosody 裡還有一個 role 屬性,用來讓語音模仿不同的年齡和性別。例如,男性語音可以提高音調並變更語調來模仿女性聲音,但語音名稱不變。
prosody 也是放在 voice 標籤內,像這樣:

<speak xmlns="https://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts"
	xmlns:emo="https://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="en-US">
	<voice name="zh-CN-XiaoyiNeural">
		<prosody rate="-10%" pitch="0%" volume="-50%">
			rate="說話速度" pitch="說話音調" volumn="音量"
		</prosody>
		<prosody rate="-20%" pitch="50%" volume="+50%">
			<mstts:express-as style="sad">
				音量以 0% 為基準,請在百分比之前加上 +(大聲)或 -(小聲)
			</mstts:express-as>
		</prosody>
	</voice>
</speak>


如果要移除或改變文字或片語間的停頓時間,可以使用 <break strength="none" /> 自動插入韻律中斷。 而 <break time="?ms" /> 可以改變停頓時間,1000ms = 1秒,不過為了減少 SSML 程式碼佔用最多 1000 字的字數限制,建議還是多用標點符號(,。、?!)代替 break

底下展示一段使用 SSML 文字轉語音的實例,由餘字數限制,因此分開兩次轉換,你可以將這些代碼複製到 Microsoft azure 播放看看,是不是和真人發音一樣...

裡面有些多音字使用了同音字代替,並非錯字喔!

<speak xmlns="https://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts"
	xmlns:emo="https://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="zh-TW">
	<voice name="zh-CN-XiaoyiNeural">
		<prosody rate="-20%" pitch="0%">
			你知道自己屬什麼嗎?
			有屬小白兔的,有屬大老虎的!那有屬貓的嗎?
			當然沒有,怎麼有屬老鼠的,沒有屬貓的呢?
			讓我來告訴你 為什麽吧?
			在很久很久以前,有一天,人們說:
		</prosody>
		<prosody rate="-20%" pitch="-30%">
			‘我們要選十二種動物作為人的生肖,一年一腫動物。’
		</prosody>
		<prosody rate="-20%" pitch="0%">
			可是天下的動物有多少呀?
			要怎麼個選法呢?
		</prosody>
		<prosody rate="-20%" pitch="-30%">
			這樣吧,先定好一個日子,這一天,動物們來報名,就選先到的十二腫動物為十二生肖。
		</prosody>
		<prosody rate="-20%" pitch="0%">
			貓和老鼠是鄰居,又是好朋友,它們都想去報名。
			貓說:
		</prosody>
	</voice>
	<voice name="zh-CN-YunxiNeural">
		<mstts:express-as style="sad">
			<prosody rate="-10%" pitch="0%">
				‘咱們得一早起來去報名,可是我愛睡懶較,怎麼辦呢?’
			</prosody>
		</mstts:express-as>
	</voice>
	<voice name="zh-CN-XiaoyiNeural">
		<prosody rate="0%" pitch="0%">
			老鼠說:
		</prosody>
		<prosody rate="10%" pitch="100%">
			‘別著急,你儘管睡你的大較,我一醒來,就去叫你,咱們一塊兒去。’
		</prosody>
	</voice>
</speak>
<speak xmlns="https://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts"
	xmlns:emo="https://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="zh-TW">
	<voice name="zh-CN-XiaoyiNeural">
		<prosody rate="-20%" pitch="0%">
			貓聽了很高興,說:
		</prosody>
	</voice>
	<voice name="zh-CN-YunxiNeural">
		<mstts:express-as style="cheerful">
			<prosody rate="-10%" pitch="0%">
				‘你真是我的好朋友,謝謝你了。’
			</prosody>
		</mstts:express-as>
	</voice>
	<voice name="zh-CN-XiaoyiNeural">
		<prosody rate="-20%" pitch="0%">
			結果到了報名那天早晨,老鼠早就醒來了,可是它光想到自己的事,把好朋友貓的事給忘了。就自己去報名了。
			結果,老鼠被選上了。貓呢?
			貓因為睡懶較,起床太遲了,等它趕到時,十二腫動物已被選定了。
			貓沒有被選上,就生老鼠的氣,怪老鼠沒有叫它,從這以後,貓見了老鼠就要吃它,老鼠就只好拼命地逃。
			直到現在還是這樣。
			故事說完了,希望你會喜歡,
			記得按讚加分享喔!
		</prosody>
	</voice>
</speak>


文字轉語音最自然接近人聲的機器配音技術 – 用 SSML 語音標記輕鬆為短片配音

如果你對文字轉語音最自然接近人聲的機器配音技術 &ndash; 用 SSML 語音標記輕鬆為短片配音有任何問題請到討論區發帖。