原生JavaScrip實現(xiàn)語音識別的示例詳解
用過微信的同學(xué)大部分都使用過語音轉(zhuǎn)文本功能吧?語音識別轉(zhuǎn)文本看似是很有難度的一個功能,但你知道嗎?使用原生 JavaScript 也能實現(xiàn)語音識別功能。
效果展示
SpeechRecognition
MDN文檔:developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition
1、基礎(chǔ)定義
// 瀏覽器兼容性處理 const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; const recognition = new SpeechRecognition();
2、核心參數(shù)配置
參數(shù) | 類型 | 作用描述 |
---|---|---|
continuous | boolean | 是否持續(xù)識別(默認(rèn)false) |
interimResults | boolean | 是否返回臨時識別結(jié)果(默認(rèn)false) |
lang | string | 識別語言(如'zh-CN'/'en-US') |
maxAlternatives | number | 返回候選結(jié)果數(shù)量(默認(rèn)1) |
功能實現(xiàn)
1、實時結(jié)果處理
recognition.onresult = (event) => { const results = event.results; const resultIndex = event.resultIndex; // 臨時結(jié)果和最終結(jié)果分離處理 const current = results[resultIndex]; const isFinal = current.isFinal; if (isFinal) { // 處理最終結(jié)果 saveToDatabase(current[0].transcript); } else { // 實時顯示臨時結(jié)果 showInterimResult(current[0].transcript); } };
2、移動端適配方案
// Android 自動重啟識別 recognition.onend = () => { if (/Android/.test(navigator.userAgent)) { setTimeout(() => recognition.start(), 500); } }; // iOS 特殊處理 if (/iPhone|iPad/.test(navigator.userAgent)) { recognition.continuous = false; }
應(yīng)用場景
1、語音指令系統(tǒng)
recognition.onresult = (event) => { const command = event.results[0][0].transcript.toLowerCase(); if(command.includes('刷新')) location.reload(); if(command.includes('搜索')) triggerSearch(command); };
2、實時字幕生成
語音筆記應(yīng)用
Demo源碼
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>語音轉(zhuǎn)文字實時演示</title> <style> body { font-family: 'Segoe UI', sans-serif; max-width: 800px; margin: 2rem auto; padding: 0 1rem; } #status { width: 20px; height: 20px; border-radius: 50%; display: inline-block; margin-right: 10px; background: #ccc; } #status.active { background: #00c853; animation: pulse 1s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(0,200,83,0.4); } 70% { box-shadow: 0 0 0 10px rgba(0,200,83,0); } 100% { box-shadow: 0 0 0 0 rgba(0,200,83,0); } } #transcript { border: 1px solid #ddd; min-height: 150px; padding: 1rem; margin: 1rem 0; white-space: pre-wrap; background: #f8f9fa; } .interim { color: #666; font-style: italic; } </style> </head> <body> <h2>實時語音轉(zhuǎn)文字演示</h2> <div> <span id="status"></span> <button id="toggleBtn">開始識別</button> <span id="lang">當(dāng)前語言:中文</span> </div> <div id="transcript"></div> <script> const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)(); const transcriptDiv = document.getElementById('transcript'); const statusEl = document.getElementById('status'); const toggleBtn = document.getElementById('toggleBtn'); // 基礎(chǔ)配置 recognition.continuous = true; recognition.interimResults = true; recognition.lang = 'zh-CN'; // 狀態(tài)管理 let isRecognizing = false; // 事件處理 recognition.onstart = () => { isRecognizing = true; statusEl.classList.add('active'); toggleBtn.textContent = '停止識別'; }; recognition.onend = () => { isRecognizing = false; statusEl.classList.remove('active'); toggleBtn.textContent = '開始識別'; }; recognition.onresult = (event) => { let final = ''; let interim = ''; for (let i = event.resultIndex; i < event.results.length; i++) { const transcript = event.results[i][0].transcript; if (event.results[i].isFinal) { final += transcript + '\n'; } else { interim += transcript; } } transcriptDiv.innerHTML = final.replace(/\n/g, '<br>') + `<span class="interim">${interim}</span>`; }; recognition.onerror = (event) => { console.error('識別錯誤:', event.error); alert(`識別錯誤: ${event.error}`); }; // 按鈕控制 toggleBtn.addEventListener('click', () => { if (isRecognizing) { recognition.stop(); } else { recognition.start(); } }); // 權(quán)限檢測 if (!('webkitSpeechRecognition' in window)) { transcriptDiv.innerHTML = '?? 當(dāng)前瀏覽器不支持語音識別功能'; toggleBtn.disabled = true; } </script> </body> </html>
瀏覽器兼容
實測edge可以正常識別,chrome需要梯子,局限性還是比較大。
到此這篇關(guān)于原生JavaScrip實現(xiàn)語音識別的示例詳解的文章就介紹到這了,更多相關(guān)JavaScrip語音識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript將DOM節(jié)點添加到文檔的方法實例分析
這篇文章主要介紹了javascript將DOM節(jié)點添加到文檔的方法,對比分析了javascript的兩種節(jié)點創(chuàng)建的方法,涉及javascript節(jié)點操作及運行時間計算的相關(guān)技巧,需要的朋友可以參考下2015-08-08微信公眾平臺 發(fā)送模板消息(Java接口開發(fā))
這篇文章主要介紹了微信公眾平臺 發(fā)送模板消息(Java接口開發(fā)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04javascript將數(shù)組插入到另一個數(shù)組中的代碼
下面的代碼主要功能就是將數(shù)組arr2插入到數(shù)組arr1的index位置,需要的朋友可以參考下2013-01-01JavaScript實現(xiàn)獲取設(shè)備網(wǎng)絡(luò)連接信息
作為前端開發(fā),做好用戶體驗是很重要的,日常開發(fā)中我們經(jīng)常可以遇到用戶網(wǎng)速慢導(dǎo)致靜態(tài)資源加載慢,從而給影響用戶體驗,所以本文來和大家分享一個有趣的API,可以實現(xiàn)獲取網(wǎng)絡(luò)信息2023-05-05