用HTML5的Web Speech API識別語音讀出內(nèi)容

Web Speech API包括兩個(gè)部分火邓,一個(gè)是識別用戶說話袖订;還有一個(gè)是朗讀指定內(nèi)容慰毅。這個(gè)功能無疑在某些場景是非常有用的隘截。

1、webkitSpeechRecognition(語音識別)

因?yàn)?code>webkitSpeechRecognitionAPI支持的不是很好汹胃,所以這里就簡單的介紹一下婶芭。

我們需要先創(chuàng)建一個(gè)webkitSpeechRecognition實(shí)例,因?yàn)樵摴δ芎芏酁g覽器還沒有支持着饥,我們測試用的是chrome瀏覽器犀农,所以需要加webkit前綴。

let newRecognition = new webkitSpeechRecognition();

然后我們可以設(shè)置宰掉,是識別到聲音就關(guān)閉呵哨,還是一直識別,根據(jù)自己的需求進(jìn)行設(shè)置

newRecognition.continuous = true;

最后開啟錄音和關(guān)閉錄音

newRecognition.start();
newRecognition.stop();

同時(shí)這里也提供了許多事件讓我們使用轨奄,當(dāng)接收到一個(gè)成功的消息之后就會觸發(fā)onresult事件孟害,它并不是停止錄音而觸發(fā),而是當(dāng)成功接收到一段可以識別的語音時(shí)觸發(fā)挪拟,所以可能觸發(fā)多次挨务。

newRecognition.onresult = function(event) { 
    console.log(event);
}

打印出來的事件對象是這樣的,我們可以獲取到識別出來的內(nèi)容舞丛,雖然我試了幾次有很大幾率識別的不準(zhǔn)耘子。果漾。球切。

onresult .png

再看幾個(gè)事件,

newRecognition.onsoundstart = function(e){
    console.log("開始收聽了");
    console.log(e);
}
newRecognition.onspeechstart = (e)=>{
    console.log("開始講話了");
    console.log(e);
}
newRecognition.onspeechend = (e)=>{
    console.log("講話完畢");
    console.log(e);
}
newRecognition.onerror = (e)=>{
    console.log("發(fā)生異常");
    console.log(e);
}

只要開始講話了绒障,就會觸發(fā)onsoundstartonspeechstart事件吨凑,這兩個(gè)事件緊挨著依次觸發(fā),意思是我根據(jù)名字理解的,如果有誤或者有知道具體觸發(fā)條件的歡迎指出鸵钝!

onspeechend事件應(yīng)該是監(jiān)測到執(zhí)行了stop方法時(shí)觸發(fā)的糙臼。而如果一段時(shí)間沒有錄入信息,則會自動(dòng)執(zhí)行stop方法停止錄音恩商,同樣也會觸發(fā)onspeechend事件

onerror很明顯是有異常時(shí)會觸發(fā)該事件变逃,測試發(fā)現(xiàn)當(dāng)長時(shí)間沒有錄入導(dǎo)致自動(dòng)關(guān)閉錄音的時(shí)候就會觸發(fā)該事件。歡迎補(bǔ)充怠堪!

2揽乱、SpeechSynthesisUtterance(語音合成)

我們直接上一個(gè)最簡單的demo,讓瀏覽器讀一句話:

var ssu = new window.SpeechSynthesisUtterance('Hi粟矿,girl凰棉!');
window.speechSynthesis.speak(ssu);

沒錯(cuò),就使這么簡單的兩行代碼就可以實(shí)現(xiàn)陌粹,接下來看一下這兩行代碼都干了什么:

SpeechSynthesisUtterance對象

先創(chuàng)建了一個(gè)SpeechSynthesisUtterance對象撒犀,該對象的構(gòu)造可以直接傳遞要讀的內(nèi)容,這里我們也可以通過給實(shí)例對象的屬性賦值來設(shè)置要讀的內(nèi)容掏秩,

var ssu = new window.SpeechSynthesisUtterance();
ssu.text = 'Hi或舞,girl!';

同時(shí)SpeechSynthesisUtterance對象提供了一些其他屬性供我們設(shè)置

  • lang:使用的語言蒙幻,字符串(比如:"zh-cn")

  • volume:音量嚷那,值在0-1之間(默認(rèn)是1)

  • rate:語速的倍數(shù),值在0.1-10之間(默認(rèn)1倍)

  • pitch:音高杆煞,值在0-2之間魏宽,(默認(rèn)是1)

  • voiceURI:指定希望使用的聲音,字符串

既然有屬性肯定有方法决乎,該對象還提供了一些事件的回調(diào)

ssu.onstart = (e)=>{
    console.log("開始队询。。构诚。");
    console.log(e);
}
ssu.onend = (e)=>{
    console.log("結(jié)束蚌斩。。范嘱。");
    console.log(e);
}
  • onstart:語音開始合成時(shí)觸發(fā)

  • onpause:語音暫停時(shí)觸發(fā)

  • onresume:語音合成重新開始時(shí)觸發(fā)

  • onend:語音結(jié)束時(shí)觸發(fā)

speechSynthesis對象

創(chuàng)建完SpeechSynthesisUtterance對象之后送膳,把這個(gè)對象傳遞給speechSynthesis對象的speak方法中。

該對象主要是控制合成行為的丑蛤,常用方法如下:

  • stop():停止合成

  • pause():暫停合成

  • resume():重新開始合成

  • getVoices():返回瀏覽器支持的語音包數(shù)組

window.addEventListener("click", ()=>{
        //點(diǎn)擊暫停
    window.speechSynthesis.pause();
});
console.log(window.speechSynthesis.getVoices()); //我的chrome瀏覽器下竟然是空數(shù)組叠聋。。wtf
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末受裹,一起剝皮案震驚了整個(gè)濱河市碌补,隨后出現(xiàn)的幾起案子虏束,更是在濱河造成了極大的恐慌,老刑警劉巖厦章,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镇匀,死亡現(xiàn)場離奇詭異,居然都是意外死亡袜啃,警方通過查閱死者的電腦和手機(jī)汗侵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來群发,“玉大人晃择,你說我怎么就攤上這事∫参铮” “怎么了宫屠?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滑蚯。 經(jīng)常有香客問我浪蹂,道長,這世上最難降的妖魔是什么告材? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任坤次,我火速辦了婚禮,結(jié)果婚禮上斥赋,老公的妹妹穿的比我還像新娘缰猴。我一直安慰自己,他們只是感情好疤剑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布滑绒。 她就那樣靜靜地躺著,像睡著了一般隘膘。 火紅的嫁衣襯著肌膚如雪疑故。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天弯菊,我揣著相機(jī)與錄音纵势,去河邊找鬼。 笑死管钳,一個(gè)胖子當(dāng)著我的面吹牛钦铁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播才漆,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼牛曹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了栽烂?” 一聲冷哼從身側(cè)響起躏仇,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腺办,沒想到半個(gè)月后焰手,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怀喉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年书妻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躬拢。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躲履,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出聊闯,到底是詐尸還是另有隱情工猜,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布菱蔬,位于F島的核電站篷帅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拴泌。R本人自食惡果不足惜魏身,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚪腐。 院中可真熱鬧箭昵,春花似錦、人聲如沸回季。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泡一。三九已至慰丛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘾杭,已是汗流浹背诅病。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粥烁,地道東北人贤笆。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像讨阻,于是被迫代替她去往敵國和親芥永。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1钝吮、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 保持好心情 提高生活質(zhì)量
    bdfer閱讀 115評論 0 1
  • 一晃埋涧,來到現(xiàn)在的工作崗位板辽,已經(jīng)2年多了,說句實(shí)話棘催,個(gè)人各方面能力確實(shí)有所提升劲弦,但有一項(xiàng)重要的硬技能,自己知道很重要...
    反思的木偶人閱讀 1,119評論 1 0
  • 分享Imagine Dragons的單曲《Demons》http://music.163.com/song/199...
    黑夜里獨(dú)行閱讀 215評論 0 0
  • 在這個(gè)浮躁的時(shí)代談?wù)搻矍椋坪鹾芑糁怼4蠹乙幻婵释鴲矍榈膩砼R一面口口聲稱不相信愛情画畅,更有甚者,寧愿坐在寶馬車?yán)?..
    伊水蘆笛閱讀 549評論 0 1