如何在JavaScript中实现语音识别
语音识别是前端交互中非常实用的功能,它可以让网页直接接收用户的语音指令,实现免手动输入、语音控制等场景。在JavaScript中,我们可以借助浏览器原生的SpeechRecognition接口来实现语音识别能力,不需要额外引入第三方库,只要浏览器支持该接口即可使用。
浏览器兼容性说明
目前SpeechRecognition接口主要在Chrome、Edge等基于Chromium内核的浏览器中得到较好支持,Firefox和Safari的支持程度有限,使用前建议先判断接口是否存在,避免在不支持的浏览器中报错。
核心API介绍
实现语音识别的核心对象是SpeechRecognition,不同浏览器可能有前缀差异,比如Chrome中是webkitSpeechRecognition,我们可以通过兼容写法获取统一的接口:
SpeechRecognition:语音识别的主构造函数,实例化后可以得到识别对象start():启动语音识别stop():停止语音识别onresult:识别到结果时触发的回调,结果会包含在事件对象的results属性中onerror:识别过程中出现错误时触发的回调continuous:设置是否连续识别,默认是false,识别到一次结果就停止;设为true会持续监听语音lang:设置识别的语言,比如'zh-CN'表示中文
完整实现示例
下面是一个完整的语音识别示例,包含启动识别、停止识别、结果展示和错误处理逻辑:
// 兼容不同浏览器的SpeechRecognition接口
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
// 如果浏览器不支持,给出提示
if (!SpeechRecognition) {
alert('当前浏览器不支持语音识别功能,请使用Chrome或Edge浏览器');
} else {
// 实例化语音识别对象
const recognition = new SpeechRecognition();
// 设置识别语言为中文
recognition.lang = 'zh-CN';
// 设置为连续识别,持续监听语音
recognition.continuous = true;
// 是否返回临时结果,设为true可以实时获取识别中的内容
recognition.interimResults = true;
// 获取页面上的DOM元素
const startBtn = document.getElementById('startBtn');
const stopBtn = document.getElementById('stopBtn');
const resultBox = document.getElementById('resultBox');
const errorBox = document.getElementById('errorBox');
// 启动语音识别
startBtn.addEventListener('click', () => {
resultBox.textContent = '正在监听语音...';
errorBox.textContent = '';
recognition.start();
});
// 停止语音识别
stopBtn.addEventListener('click', () => {
recognition.stop();
resultBox.textContent += '\n已停止语音识别';
});
// 识别到结果时的回调
recognition.onresult = (event) => {
let finalTranscript = '';
let interimTranscript = '';
// 遍历所有识别结果
for (let i = event.resultIndex; i < event.results.length; i++) {
const transcript = event.results[i][0].transcript;
// 判断是否是最终结果
if (event.results[i].isFinal) {
finalTranscript += transcript;
} else {
interimTranscript += transcript;
}
}
// 展示结果,临时结果和最终结果分开显示
resultBox.textContent = finalTranscript + interimTranscript;
};
// 识别错误时的回调
recognition.onerror = (event) => {
errorBox.textContent = `识别出错:${event.error}`;
// 如果是没有语音输入的错误,提示用户
if (event.error === 'no-speech') {
errorBox.textContent += ',未检测到语音输入,请重试';
}
};
// 识别结束时的回调
recognition.onend = () => {
console.log('语音识别已结束');
};
}配套HTML结构
上面的JavaScript代码需要配合以下HTML结构使用,添加控制按钮和结果展示区域:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript语音识别示例</title>
<style>
.container {
max-width: 800px;
margin: 20px auto;
padding: 0 20px;
}
.btn-group {
margin: 20px 0;
}
button {
padding: 10px 20px;
margin-right: 10px;
cursor: pointer;
}
#resultBox {
width: 100%;
height: 200px;
border: 1px solid #ccc;
padding: 10px;
margin: 10px 0;
white-space: pre-wrap;
overflow-y: auto;
}
#errorBox {
color: red;
margin: 10px 0;
}
</style>
</head>
<body>
<div class="container">
<h3>语音识别演示</h3>
<div class="btn-group">
<button id="startBtn">启动语音识别</button>
<button id="stopBtn">停止语音识别</button>
</div>
<div id="errorBox"></div>
<div>识别结果:</div>
<div id="resultBox"></div>
</div>
<script src="speech.js"></script>
</body>
</html>使用注意事项
在实际使用语音识别功能时,需要注意以下几点:
- 语音识别需要用户授权麦克风权限,浏览器会自动弹出权限请求弹窗,用户允许后才能正常使用
- 识别准确率受环境噪音、语速、口音等因素影响,建议在相对安静的环境中使用
- 连续识别模式下,识别对象可能会因为网络或权限问题自动停止,可以在
onend回调中添加重新启动的逻辑 - 如果需要在生产环境使用,建议添加更完善的兼容性处理和错误提示,提升用户体验
JavaScript语音识别SpeechRecognitionWeb_Speech_API前端交互浏览器兼容性 本作品最后修改时间:2026-05-23 23:35:20