原生JavaScrip實現(xiàn)語音識別的示例詳解
用過微信的同學大部分都使用過語音轉(zhuǎn)文本功能吧?語音識別轉(zhuǎn)文本看似是很有難度的一個功能,但你知道嗎?使用原生 JavaScript 也能實現(xiàn)語音識別功能。
效果展示


SpeechRecognition

MDN文檔:developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition
1、基礎定義
// 瀏覽器兼容性處理 const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; const recognition = new SpeechRecognition();
2、核心參數(shù)配置
| 參數(shù) | 類型 | 作用描述 |
|---|---|---|
| continuous | boolean | 是否持續(xù)識別(默認false) |
| interimResults | boolean | 是否返回臨時識別結(jié)果(默認false) |
| lang | string | 識別語言(如'zh-CN'/'en-US') |
| maxAlternatives | number | 返回候選結(jié)果數(shù)量(默認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;
}
應用場景
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、實時字幕生成
語音筆記應用
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">當前語言:中文</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');
// 基礎配置
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 = '?? 當前瀏覽器不支持語音識別功能';
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ā)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
javascript將數(shù)組插入到另一個數(shù)組中的代碼
下面的代碼主要功能就是將數(shù)組arr2插入到數(shù)組arr1的index位置,需要的朋友可以參考下2013-01-01
JavaScript實現(xiàn)獲取設備網(wǎng)絡連接信息
作為前端開發(fā),做好用戶體驗是很重要的,日常開發(fā)中我們經(jīng)??梢杂龅接脩艟W(wǎng)速慢導致靜態(tài)資源加載慢,從而給影響用戶體驗,所以本文來和大家分享一個有趣的API,可以實現(xiàn)獲取網(wǎng)絡信息2023-05-05

