佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > 鮮為人知的HTML5語音合成功能

鮮為人知的HTML5語音合成功能

熱門標(biāo)簽:檢查注冊(cè)表項(xiàng) 百度競價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 阿里云 硅谷的囚徒呼叫中心 美圖手機(jī) 使用U盤裝系統(tǒng) 智能手機(jī) 網(wǎng)站建設(shè)

聽一下就會(huì)發(fā)現(xiàn),播放出來的聲音并不是預(yù)先錄制好的音頻資料,而是通過文字識(shí)別后合成的語音

請(qǐng)先戴上耳機(jī),然后將下面的代碼復(fù)制到chrome控制臺(tái)中體驗(yàn)~

let msg = new SpeechSynthesisUtterance("歡迎你閱讀我的博客");
window.speechSynthesis.speak(msg);

看,前端實(shí)現(xiàn)語音合成并不難

今天的主角 Speech Synthesis API

通過上面的例子我們可以猜測(cè)到上面調(diào)用的兩個(gè)方法的功能

SpeechSyntehesisUtteranc
window.speechSynthesis.speak

當(dāng)然了,語音合成不僅僅包含這兩個(gè)API,but我們先從這兩點(diǎn)入手

SpeechSyntehesisUtteranc

參考:developer.mozilla.org/en-US/docs/… SpeechSyntehesisUtteranc 對(duì)象包含了語音服務(wù)要讀取的內(nèi)容和一些參數(shù),比如語言,音高和音量

SpeechSyntehesisUtteranc()
SpeechSynthesisUtterance.lang
SpeechSynthesisUtterance.pitch
SpeechSynthesisUtterance.rate
SpeechSynthesisUtterance.voice
SpeechSynthesisUtterance.volume

注意:以上屬性都是 可讀寫 的! 可以把下面這段代碼copy下來嘗試一下,注釋中會(huì)有說明

let msg = new SpeechSynthesisUtterance();
msg.text = "how are you" // 要合成的文本
msg.lang = "en-US" // 美式英語發(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

借助這些事件我們可以完成一些簡單的功能,比如英文句子的單詞數(shù)量統(tǒng)計(jì):

let count = 0; // 詞語數(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(`文本單詞(詞語)數(shù)量:${count}`);
    count = 0;
});
msg.addEventListener('boundary',()=>{
    // 統(tǒng)計(jì)單詞
    count++;
});

經(jīng)過嘗試,由于中文沒有用空格將每個(gè)詞語分開,所以會(huì)進(jìn)行自動(dòng)的識(shí)別,比如 歡迎讀者 會(huì)被識(shí)別為 歡迎 和 讀者 兩個(gè)詞語

SpeechSynthesis

參考: developer.mozilla.org/en-US/docs/…

說完了 SpeechSyntehesisUtteranc 我們?cè)賮砜纯?SpeechSynthesis

SpeechSynthesis 的主要作用是對(duì)語音進(jìn)行一系列的控制,比如開始或者暫停

它有三個(gè)只讀屬性,表明了語音的狀態(tài):

SpeechSynthesis.paused
SpeechSynthesis.pending

同時(shí)還有一系列方法用來操作語音:

•SpeechSynthesis.speak() 開始讀語音,同時(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 中,可以用來構(gòu)造我們需要的語音合成

當(dāng)然,也有可能文章是通過 ajax 請(qǐng)求得到的,解析請(qǐng)求的數(shù)據(jù),構(gòu)造語音合成對(duì)象

如果文章是直接在 html 中寫死的,這個(gè)時(shí)候就需要對(duì) DOM 進(jìn)行解析,經(jīng)過測(cè)試,即便是下面這樣的混亂的結(jié)構(gòu)

<div id="test">
    <p>1</p>
    <p>2</p>
    <ul>
        <li>3</li>
        <li>4</li>
    </ul>
    <table>
        <tr>
            <td>5</td>
            <td>6</td>
        </tr>
        <tr>
            <td>7</td>
            <td>8</td>
        </tr>
    </table>
    <img src="https://www.baidu.com/img/bd_logo1.png" alt="">
    9
</div>

直接通過 innerText 讀取其中的文本,然后構(gòu)造語音合成對(duì)象,也能按照期望順序閱讀(圖片會(huì)被忽略)

當(dāng)然如果我們想要忽略一些特殊的結(jié)構(gòu),比如表格,我們可以花一些精力在解析上,把我們不想要的數(shù)據(jù)或者 DOM 元素篩掉

不管怎樣,我們都能找到合適的解決方案~

閑話

這個(gè)特性,是一個(gè)還在草案中的特性,沒有被廣泛支持

再次強(qiáng)調(diào),這個(gè) API 暫時(shí)還不能應(yīng)用到生產(chǎn)環(huán)境中

目前比較通用的做法是在后端構(gòu)造將文本合成成語音文件的 API(也許是第三方 API),然后在前端作為媒體播放

曾經(jīng)在我迷茫的時(shí)候,我去閱讀一些大牛的文章,讀到一些前輩對(duì)前端開發(fā)的思考。其中有一點(diǎn)令我印象深刻:

前端是最貼近用戶的,一切要從用戶的的角度考慮,無障礙使用也是一個(gè)很重要的課題。雖然做這樣的功能帶來的收益遠(yuǎn)遠(yuǎn)小于其他業(yè)務(wù),但是為了讓產(chǎn)品更好的服務(wù)用戶,多付出一些勞動(dòng)也是值得的,這也是前端開發(fā)的一種精神
 

總結(jié)

以上所述是小編給大家介紹的鮮為人知的HTML5語音合成功能,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

標(biāo)簽:通遼 山南 黃山 懷化 賀州 湖北 湘潭 煙臺(tái)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《鮮為人知的HTML5語音合成功能》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    青海省| 搜索| 泽普县| 德惠市| 黄石市| 江口县| 萨迦县| 福海县| 收藏| 双流县| 绥阳县| 望谟县| 洞头县| 新晃| 紫金县| 广丰县| 西平县| 客服| 霍山县| 岳阳县| 营口市| 唐河县| 双桥区| 西吉县| 东光县| 社旗县| 廉江市| 黄平县| 柞水县| 梁河县| 湘潭县| 比如县| 宜州市| 佛冈县| 盘山县| 格尔木市| 台北县| 澄迈县| 泽普县| 平湖市| 龙门县|