怎么 在HTML5中實(shí)現(xiàn)一個(gè)語(yǔ)音合成功能?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問題。
為溪湖等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及溪湖網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、溪湖網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!Speech Synthesis API
通過(guò)上面的例子我們可以猜測(cè)到上面調(diào)用的兩個(gè)方法的功能
SpeechSyntehesisUtteranc window.speechSynthesis.speak
當(dāng)然了,語(yǔ)音合成不僅僅包含這兩個(gè)API,but我們先從這兩點(diǎn)入手
SpeechSyntehesisUtteranc
參考:developer.mozilla.org/en-US/docs/… SpeechSyntehesisUtteranc 對(duì)象包含了語(yǔ)音服務(wù)要讀取的內(nèi)容和一些參數(shù),比如語(yǔ)言,音高和音量
SpeechSyntehesisUtteranc() SpeechSynthesisUtterance.lang SpeechSynthesisUtterance.pitch SpeechSynthesisUtterance.rate SpeechSynthesisUtterance.voice SpeechSynthesisUtterance.volume
注意:以上屬性都是 可讀寫 的! 可以把下面這段代碼copy下來(lái)嘗試一下,注釋中會(huì)有說(shuō)明
let msg = new SpeechSynthesisUtterance(); msg.text = "how are you" // 要合成的文本 msg.lang = "en-US" // 美式英語(yǔ)發(fā)音(默認(rèn)自動(dòng)選擇) msg.rate = 2 // 二倍速(默認(rèn)為 1,范圍 0.1~10) msg.pitch = 2 // 高音調(diào)(數(shù)字越大越尖銳,默認(rèn)為 1,范圍 0~2 ) msg.volume = 0.5 // 音量 0.5 倍(默認(rèn)為1,范圍 0~1) window.speechSynthesis.speak(msg);
同時(shí)這個(gè)對(duì)象還可以響應(yīng)一系列事件,可能會(huì)用到的:
start
end
boundary
pause
resume
借助這些事件我們可以完成一些簡(jiǎn)單的功能,比如英文句子的單詞數(shù)量統(tǒng)計(jì):
let count = 0; // 詞語(yǔ)數(shù)量 let msg = new SpeechSynthesisUtterance(); let synth = window.speechSynthesis; msg.addEventListener('start',()=>{ // 開始閱讀 console.log(`文本內(nèi)容: ${msg.text}`); console.log("start"); }); msg.addEventListener('end',()=>{ // 閱讀結(jié)束 console.log("end"); console.log(`文本單詞(詞語(yǔ))數(shù)量:${count}`); count = 0; }); msg.addEventListener('boundary',()=>{ // 統(tǒng)計(jì)單詞 count++; });
經(jīng)過(guò)嘗試,由于中文沒有用空格將每個(gè)詞語(yǔ)分開,所以會(huì)進(jìn)行自動(dòng)的識(shí)別,比如 歡迎讀者 會(huì)被識(shí)別為 歡迎 和 讀者 兩個(gè)詞語(yǔ)
SpeechSynthesis
參考: developer.mozilla.org/en-US/docs/…
說(shuō)完了 SpeechSyntehesisUtteranc 我們?cè)賮?lái)看看 SpeechSynthesis
SpeechSynthesis 的主要作用是對(duì)語(yǔ)音進(jìn)行一系列的控制,比如開始或者暫停
它有三個(gè)只讀屬性,表明了語(yǔ)音的狀態(tài):
SpeechSynthesis.paused SpeechSynthesis.pending
同時(shí)還有一系列方法用來(lái)操作語(yǔ)音:
•SpeechSynthesis.speak() 開始讀語(yǔ)音,同時(shí)觸發(fā) start 事件
•SpeechSynthesis.pause() 暫停,同時(shí)觸發(fā) pause 事件
•SpeechSynthesis.resume() 繼續(xù),同時(shí)觸發(fā) resume 事件
•SpeechSynthesis.cancel() 取消閱讀,同時(shí)觸發(fā) end 事件
基于這些操作方法,我們可以進(jìn)一步增強(qiáng)我們的文字閱讀器:
回到最初的起點(diǎn)
讓我們回到最初的起點(diǎn),我們可以基于上面的內(nèi)容猜測(cè)一下有些網(wǎng)站中,文章的自動(dòng)閱讀是怎么實(shí)現(xiàn)的
如果這個(gè)網(wǎng)站前端采用了 MVVM 框架(以 Vue 為例),那么文章內(nèi)容是也許存儲(chǔ)在 data 中,可以用來(lái)構(gòu)造我們需要的語(yǔ)音合成
當(dāng)然,也有可能文章是通過(guò) ajax 請(qǐng)求得到的,解析請(qǐng)求的數(shù)據(jù),構(gòu)造語(yǔ)音合成對(duì)象
如果文章是直接在 html 中寫死的,這個(gè)時(shí)候就需要對(duì) DOM 進(jìn)行解析,經(jīng)過(guò)測(cè)試,即便是下面這樣的混亂的結(jié)構(gòu)
1
2
- 3
- 4
9
5 6 7 8
看完上述內(nèi)容,你們掌握怎么 在HTML5中實(shí)現(xiàn)一個(gè)語(yǔ)音合成功能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!