文章目錄
- 1. 創建SSML檔案
- 2. 選擇文本轉語言所用的語音
- 3. 使用多個語音
- 4. 調整講話風格
- 5. 調整講話語言
- 6. 添加或者洗掉中斷/暫停
- 7. 添加靜音
- 8. 指定段落和句子
- 9. 使用音素改善發音
- 10. 使用自定義詞典改善發音
- 11. 調整音律
- 11.1 調整音律
- 11.2 更改語速
- 11.3 更改音量
- 11.4 更改音高
- 11.5 更改音高升降曲線
- 12. say-as元素
- 13. 添加錄制的音頻
- 14. 添加背景音頻
- 15. Bookmark元素
- 16. 使用語音SDK獲取書簽
1. 創建SSML檔案
speak是根元素,speak元素包含重要資訊,例如版本,語言和標記詞匯定義,
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
屬性說明:
version:指示用于解釋檔案標記的 SSML 規范的版本, 當前版本為 1.0,
xml:lang: 指定根檔案語言,
xmlns:指定檔案的url,用于定義SSML檔案的標記詞匯(元素型別和屬性名稱)
2. 選擇文本轉語言所用的語音
voice元素用于指定文本轉語音所用的語音,
實體:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
This is the text that is spoken.
</voice>
</speak>
voice標簽中name屬性標識用于文本轉語音時輸出的語音
3. 使用多個語音
在speak元素中,可以為文本轉語音指定多種語音,這些語音可采用多種語言,
必須將文本包裝在voice元素中,
實體:
<voice name="en-US-JennyNeural">
Good morning!
</voice>
<voice name="en-US-ChristopherNeural">
Good morning to you too Jenny!
</voice>
如上代碼,speak標簽中的兩個voice標簽name屬性標記了語音的型別
4. 調整講話風格
默認情況下,對于神經語音,文本轉語音服務使用中性講話風格,可以調整
簡化風格來表達不同的情感(例如愉悅、同情和冷靜生氣等),或者使用
**mstts:express-as** 元素針對不同場景(例如自定義服務、新聞廣播和語音助手)
優化語音,
目前以下神經語音支持講話風格調整:
-
en-US-AriaNeural
-
en-US-JennyNeural
-
en-US-GuyNeura
-
en-US-SaraNeural
-
ja-JP-NanamiNeural
-
pt-BR-FranciscaNeural
-
zh-cn-XiaoxiaoNeural
-
zh-cn-YunyangNeural
-
zh-cn-YunyeNeural
-
zh-cn-YunxiNeural
-
zh-cn-XiaohanNeural
-
zh-cn-XiaomoNeural
-
zh-cn-XiaoxuanNeural
-
zh-cn-XiaoruiNeural
-
zh-cn-XiaoshuangNeural
1.若想進一步調整講話強度,可以使用styledegree 指定更強或更溫柔的風格,(目前中文神經語音支持說話風格調整) 2.除了調整說話風格和風格程度,還可調整 role 引數,使語音模擬不同的年齡和性別, 例如,男性語音可以提高音調和改變 語調來模擬女性語音,但語音名稱不會更改, 目前,這些中文(普通話,簡體)神經語音支持角色調整: zh-cn-XiaomoNeural,zh-cn-XiaoxuanNeural
<mstts:express-as styledegree="1" role="角色" style="講話風格"></mstts:express-as>
如上代碼所示:
1.屬性style指定講話風格
講話風格參考:[講話風格](https://docs.azure.cn/zh-cn/cognitive-services/speech-service/speech-synthesis-markup?tabs=csharp#adjust-speaking-styles)
2.屬性styledegree指定說話強度在0.01-2(默認值為1)
3.屬性role指定講話角色扮演, 語音將充當不同的年齡和性別,但語音名稱不會更改,
(目前role僅支持zh-cn-XiaomoNeural 和 zh-cn-XiaoxuanNeural)
角色定義:
role="Girl" 該語音模擬女孩,
role="Boy" 該語音模擬男孩,
role="YoungAdultFemale" 該語音模擬年輕成年女性,
role="YoungAdultMale" 該語音模擬年輕成年男性,
role="OlderAdultFemale" 該語音模擬年長的成年女性,
role="OlderAdultMale" 該語音模擬年長的成年男性,
role="SeniorFemale" 該語音模擬老年女性,
role="SeniorMale" 該語音模擬老年男性,
實體:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="zh-cn">
<voice name="zh-cn-XiaomoNeural">
女兒看見父親走了進來,問道:
<mstts:express-as role="YoungAdultFemale" style="calm" styledegree="1.5">
“您來的挺快的,怎么過來的?”
</mstts:express-as>
父親放下手提包,說:
<mstts:express-as role="OlderAdultMale" style="calm">
“剛打車過來的,路上還挺順暢,”
</mstts:express-as>
</voice>
</speak>
如上代碼所示:需要在根元素中引入xmlns:mstts才能使用<mstts:express-as>標簽在<voice>標簽中兩個<mstts:express-as>分別定義了此對話的模仿
角色(role)和講話風格(style),還有講話語音強度(styledegree),此對話有三個角色,第一個是講解(不在mstts標簽中的),第二個是女兒
(role="YoungAdultFemale"),第三個是父親(role="OlderAdultMale"),通過設定role屬性可以用一個語音zh-cn-XiaomoNeural講出三種不同的角色
語調,
5. 調整講話語言
可以調整神經語音的講話語言, 使用 <lang xml:lang> 元素,使一種語音能夠流利地講
不同的語言(例如英語、西班牙語和中文),目前,一下神經語音支持講話語言調整:
en-US-JennyMultilingualNeural,如果不支持某語言,則服務不會回傳音頻流,
當前, 元素與 prosody 和 break 元素不兼容,你無法調整此元素中的暫停和韻律,如音調、調型、速率、持續時間和音量,
查看en-US-JennyMultilingualNeural此神經語音:支持的講話語言
實體:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-JennyMultilingualNeural">
I am looking forward to the exciting things.
<lang xml:lang="zh-cn>
你好,小站站!
</lang>
<lang xml:lang="de-DE">
Ich freue mich auf die spannenden Dinge.
</lang>
</voice>
</speak>
如上所示通過<lang xml:lang="zh-cn">調整講話語言為中文,<lang xml:lang="de-DE">
調整講話語言為德語(但是他們語調還是一個人發出來的,就相當于一個人講三種語
言)
6. 添加或者洗掉中斷/暫停
使用元素 break 可在單詞之間插入暫停(或中斷),或者防止文本轉語音服務自動添加
暫停,
備注:
如果某個單詞或短語的合成語音聽起來不自然,可以使用此元素來重寫該單詞或短語的
默認文本轉語音 (TTS) 行為, 將 strength 設定為 none 可防止文本轉語音服務自動插入
的韻律中斷,
語法:
<break strength="string" />
<break time="string" />
屬性strength 有以下幾種屬性值:
1. 無 0ms
2. x-weak 250ms
3. weak 500ms
4. medium(默認值) 750ms
5. strong 1000ms
6. x-strong 1250ms
屬性time:指定暫停的絕對持續時間,以秒或毫秒為單位;該值應設為小于 5000 毫秒,
例如,2s 和 500ms 是有效值
實體:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
Welcome to Microsoft Cognitive Services <break time="100ms" /> Text-to-Speech API.
</voice>
</speak>
7. 添加靜音
使用 mstts:silence 元素在文本前后,或者在兩個相鄰句子之間添加暫停,
注!!!:mstts:silence 和 break 之間的區別在于,break 可添加到文本中的任何位
置,但靜 音僅適合輸入文本的開頭或結尾,或者兩個相鄰句子的分界處,
語法:
<mstts:silence type="string" value="string"/>
type屬性說明:指定添加位置
- Leading - 在文本的開頭
- Tailing - 在文本的結尾
- Sentenceboundary - 在相鄰句子之間
value屬性說明:指定暫停的絕對持續時間,以秒或毫秒為單位;該值應設為小于 5000
毫秒, 例如,2s 和 500ms 是有效值
8. 指定段落和句子
p 和 s 元素分別用于表示段落和句子, 如果不指定這些元素,則文本轉語音服務會自動
確定 SSML 檔案的結構,
p 元素可包含文本和以下元素:audio、break、phoneme、prosody、say-as、sub、
mstts:express-as 和 s,
s 元素可包含文本和以下元素:audio、break、phoneme、prosody、say-as、
mstts:express-as 和 sub,
實體:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<p>
<s>Introducing the sentence element.</s>
<s>Used to mark individual sentences.</s>
</p>
<p>
Another simple paragraph.
Sentence structure in this paragraph is not explicitly mark.
</p>
</voice>
</speak>
9. 使用音素改善發音
ph 元素用于 SSML 檔案中的發音, ph 元素只能包含文本,而不能包含其他元素, 始終
提供人類可讀的語音作為回退,
音標由音素構成,而這些音素由字母、數字或字符(有時是它們的組合)構成, 每個音
素描述獨特的語音, 這與拉丁字母形成鮮明對比,在拉丁字母中,任何字母都可能代表
多種發音, 想像一下單詞“candy”和“cease”中字母“c”的不同發音,或者字母組合“th”在單
詞“thing”和“those”中的不同發音,
不支持的5種音素標記:et-EE-AnuNeural、ga-IE-OrlaNeural、lt-LT-OnaNeural、
lv-LV-EveritaNeural 和 mt-MT-GarceNeural,
用法:
<phoneme alphabet="string" ph="string"></phoneme>
alphabet屬性說明:
指定在 ph 屬性中合成字串發音時要使用的音標, 指定音標的字串必須以小寫字母
指定, 下面是可以指定的可能音標,
- ipa -國際音標
- sapi - 語音服務音標
- ups - 通用音素集
ph屬性說明:
一個字串,包含用于在 phoneme 元素中指定單詞發音的音素, 如果指定的字串包
含無法識別的音素,則文本轉語音 (TTS) 服務將拒絕整個 SSML 檔案,并且不會生成文
檔中指定的任何語音輸出,
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<phoneme alphabet="ipa" ph="t??me?to?"> tomato </phoneme>
<phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US</phoneme>
<s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou
</phoneme></s>
</voice>
</speak>
10. 使用自定義詞典改善發音
有時文本轉語音服務無法準確地根據字詞發音, 例如,公司的名稱、醫學術語或表情符
號, 開發人員可以使用 phoneme 和 sub 標記來定義采用 SSML 朗讀單個物體的方式,
但是,如果需要定義朗讀多個物體的方式,則可以使用 lexicon 標記創建自定義詞典,
注:
1.自定義詞典當前支持UTF-8編碼,
2.目前不支持下面五種語言的自定義詞典:et-EE-AnuNeural、ga-IE-OrlaNeural、
lt-LT-OnaNeural、lv-LV-EveritaNeural 和 mt-MT-GarceNeural,
3.元素屬性說明:
(1. lexicon元素至少包含一個lexeme元素,
(2. 每個lexeme元素至少包含一個grapheme元素以及一個或者多個grapheme、
alias、 phoneme,
(3. grapheme 元素包含描述拼字法的文本(需要解釋的文本)
(4. alias元素用于指示某個首字母縮寫詞或某個縮寫詞的發音
(5. phoneme 元素提供了描述 lexeme 發音方式的文本,
(6. 當 alias 與 phoneme 元素具有相同的 grapheme 元素時,alias 具有更高的優先
級,
4. 詞典包含必需的 xml:lang 屬性,用于指示要應用詞典的區域設定, 根據設計,一個自
定義詞典僅限于一種區域設定,因此將其應用于另一種區域設定將無法正常作業,
5.需要特別注意的是,不能使用自定義詞典直接設定短語的發音, 如果需要設定首字母
縮略詞或縮寫詞的發音,請首先提供 alias,再將 phoneme 與該 alias 關聯,
代碼如下:
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>ScotlandMV</alias>
</lexeme>
<lexeme>
<grapheme>ScotlandMV</grapheme>
<phoneme>?sk?tl?nd.?mi?di?m.we?v</phoneme>
</lexeme>`
也可以直接提供所需要的alias作為首字母縮略詞或縮寫詞,例如:
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>Scotland Media Wave</alias>
</lexeme>
發布自定義詞典檔案,發布后可以從SSML參考他,
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:mstts="http://www.w3.org/2001/mstts"
xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<lexicon uri="http://www.example.com/customlexicon.xml"/>
BTW, we will be there probably at 8:00 tomorrow morning.
Could you help leave a message to Robert Benigni for me?
</voice>
</speak>
如上所示使用此自定義詞典時,“BTW”將讀作“By the way”, “Benigni”將通過提供的
IPA“b??ni?nji”朗讀,
11. 調整音律
11.1 調整音律
prosody 元素用于指定文本轉語音輸出的音節、調型、范圍、速率、持續時間和音量的變
化, prosody 元素可包含文本和以下元素:audio、break、p、phoneme、prosody、
say-as、sub 和 s,
語法:
<prosody pitch="value" contour="value" range="value" rate="value" duration="value" volume="value"></prosody>
屬性說明:
- pitch 指示文本的基線音節,可將音調表述為:
1.以某個數字后接“Hz”(赫茲)表示的絕對值, 例如 <prosody pitch="600Hz">some text</prosody>,
2.以前面帶有“+”或“-”的數字,后接“Hz”或“st”(用于指定音節的變化量)表示的相對值, 例如 <prosody pitch="+80Hz">some text</prosody> 或
<prosody pitch="-2st">some text</prosody>, “st”表示變化單位為半音,即,標準全音階中的半調(半步),
3.常量值
- x-low
- low
- 中
- high
- x-high
- 默認值
- contour 調型現在同時支持神經語音和標準語音, 調型表示音節的變化, 這些變化以語音輸出中指定時間處的目標陣列形式表示, 每個目標由引數
對的集定義,<prosody contour="(0%,+20Hz) (10%,-2st) (40%,+10Hz)">每引數集中的第一個值以文本持續時間百分比的形式指定音節變化的
位置, 第二個值使用音節的相對值或列舉值指定音節的升高或降低量,
- range 表示文本音節范圍的值, 可使用用于描述 pitch 的相同絕對值、相對值或列舉值表示 range,
- rate 指示文本的講出速率
- 以充當默認值倍數的數字表示的相對值, 例如,如果值為 1,則速率不會變化, 如果值為 0.5,則速率會減慢一半,
- 常量值:
- x-slow
- slow
- 中
- fast
- x-fast
- 默認值
- duration 語音合成 (TTS) 服務讀取文本時應該消逝的時長,以秒或毫秒為單位
- volume 指示語音的音量級別,
- 以從 0.0 到 100.0(從最安靜到最大聲)的數字表示的絕對值, 例如 75, 默認值為 100.0,
- 以前面帶有“+”或“-”的數字表示的相對值,指定音量的變化量, 例如,+10 或 -5.5,
- 常量值:
- silent
- x-soft
- soft
- 中
- loud
- x-loud
- 默認值
11.2 更改語速
可以在單詞或句子級別對神經語音和標準語音應用語速,
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<prosody rate="+30.00%">
Welcome to Microsoft Cognitive Services Text-to-Speech API.
</prosody>
</voice>
</speak>
語速增加30%
11.3 更改音量
可以在單詞或句子級別對標準語音應用音量變化, 只能在句子級別對神經語音應用音量變化,
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<prosody volume="+20.00%">
Welcome to Microsoft Cognitive Services Text-to-Speech API.
</prosody>
</voice>
</speak>
音量增加20%
11.4 更改音高
可以在單詞或句子級別對標準語音應用音節變化, 只能在句子級別對神經語音應用音節變化,
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
Welcome to <prosody pitch="high">Microsoft Cognitive Services Text-to-Speech API.</prosody>
</voice>
</speak>
11.5 更改音高升降曲線
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<prosody contour="(60%,-60%) (100%,+80%)" >
Were you the only person in the room?
</prosody>
</voice>
</speak>
12. say-as元素
說明:
say-as 是一個可選元素,指示元素文本的內容型別(例如數字或日期), 它為語音合成引擎提供有關如何朗讀文本的指導,
<say-as interpret-as="string" format="digit string" detail="string"> <say-as>
屬性說明:
interpret-as: 指示元素文本的內容型別.
文本內容型別參考:[文本內容型別](https://docs.azure.cn/zh-cn/cognitive-services/speech-service/speech-synthesis-markup?tabs=csharp#say-as-element)
formart: 為可能具有不明確格式的內容型別提供有關元素文本的精確格式設定的其他資訊, SSML 為使用它們的內
容型別定義格式
detail: 指示要朗讀的詳細資訊的級別, 例如此屬性可以要求語音合成引擎朗讀標點符號, 沒有為 detail 定義標準值
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<p>
Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
</p>
</voice>
</speak>
13. 添加錄制的音頻
說明:
audio 是一個可選元素,用于將 MP3 音頻插入 SSML 檔案, 如果音頻檔案不可用或不可播放,可在音頻元素的正文中包含可講述的純文本或 SSML 標記, 此外,audio 元素可包含文本和以下元素:audio、break、p、s、phoneme、prosody、say-as 和 sub,
包含在SSML檔案中的任何音頻必須滿足以下要求:
- MP3 必須托管在可通過 Internet 訪問的 HTTPS 終結點上, 必須使用 HTTPS,托管 MP3 檔案的域必須提供有效的受信任 TLS/SSL 證書,
- MP3 必須是有效的 MP3 檔案 (MPEG v2),
- 位元率必須是 48 kbps,
- 采樣率必須是 16,000 Hz,
- 單個回應中所有文本和音頻檔案的總時間不能超過 90 秒,
- MP3 不得包含任何客戶特定的資訊或其他敏感資訊,
實體:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-ChristopherNeural">
<p>
<audio src="https://contoso.com/opinionprompt.wav"/>
Thanks for offering your opinion. Please begin speaking after the beep.
<audio src="https://contoso.com/beep.wav">
//通過src指定音頻檔案位置
Could not play the beep, please voice your opinion now.
</audio>
</p>
</voice>
</speak>
14. 添加背景音頻
說明:
1.使用 mstts:backgroundaudio 元素可將背景音頻添加到 SSML 檔案(或者使用文本轉語音來混合音頻檔案), 使用 mstts:backgroundaudio 可以在后臺回圈音頻檔案,在文本轉語音的開頭淡入,并在文本轉語音的末尾淡出,
2.如果提供的背景音頻短于文本轉語音或淡出持續時間,則會回圈該音頻, 如果其長度超過文本轉語音的持續時間,則它在完成淡出后將會停止,
3.每個 SSML 檔案僅允許一個背景音頻檔案, 但是,可以在 voice 元素中散布 audio 標記,以將更多的音頻添加到 SSML 檔案,
屬性說明:
- src 指定背景音頻檔案的位置/URL,
- volume 指定背景音頻檔案的音量, 接受的值:0 到 100(含), 默認值為 1,
- fadein 指定背景音頻淡入的持續時間,以毫秒為單位, 默認值為 0,即,不淡入, 接受的值:0 到 10000(含)
- fadeout 指定背景音頻淡出的持續時間,以毫秒為單位, 默認值為 0,即,不淡出,接受的值:0 到 10000(含)
實體
<speak version="1.0" xml:lang="en-US" xmlns:mstts="http://www.w3.org/2001/mstts">
<mstts:backgroundaudio src="https://contoso.com/sample.wav" volume="0.7" fadein="3000" fadeout="4000"/>
<voice name="Microsoft Server Speech Text to Speech Voice (en-US, ChristopherNeural)">
The text provided in this document will be spoken over the background audio.
</voice>
</speak>
15. Bookmark元素
說明:
使用 bookmark 元素可以在 SSML 中插入自定義標記,以獲得音頻流中每個標記的偏移量, 我們不會讀出 bookmark 元素, bookmark 元素可用于參考文本或標記序列中的特定位置,目前,bookmark 元素僅適用于en-US-AriaNeural語音,
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AriaNeural">
We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
</voice>
</speak>
屬性說明:
mark: 指定bookmark元素的參考文本,
16. 使用語音SDK獲取書簽
1.通過語音 SDK 中的 BookmarkReached 事件來獲取書簽偏移量,
2.BookmarkReached 事件在輸出音頻資料變為可用時引發,這樣將會比播放到輸出設備更快,
實體:
synthesizer.BookmarkReached += (s, e) =>
{
// The unit of e.AudioOffset is tick (1 tick = 100 nanoseconds), divide by 10,000 to convert to milliseconds.
Console.WriteLine($"Bookmark reached. Audio offset: " +
$"{e.AudioOffset / 10000}ms, bookmark text: {e.Text}.");
};
1. AudioOffset 會報告輸出音頻在合成的開始處到 bookmark 元素之間經歷的時間, 此時間以百納秒單位 (HNS) 進行測
量,10,000 HNS 相當于 1 毫秒,
2. Text 是 bookmark 元素的參考文本(在 mark 屬性中設定的字串),
對于上面的示例 SSML,BookmarkReached 事件會觸發兩次,控制臺輸出將如下所示:
Bookmark reached. Audio offset: 825ms, bookmark text: flower_1.
Bookmark reached. Audio offset: 1462.5ms, bookmark text: flower_2.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/374535.html
標籤:AI
上一篇:GitHub 披露宕機原因;谷歌前 AI 研究員被解雇后成立獨立研究所;常用 Linux 桌面版排行榜出爐 | 開源日報
