JavaScript语音识别依赖Web Speech API,主要通过SpeechRecognition接口实现,需检测兼容性、获取麦克风权限,并配置continuous、interimResults等参数以支持连续实时识别。
JavaScript 实现语音识别主要依靠浏览器原生支持的 Web Speech API,其中关键接口是 SpeechRecognition(目前在 Chrome、Edge 等基于 Chromium 的浏览器中稳定可用,Firefox 支持有限,Safari 尚未支持)。它允许网页通过麦克风实时捕获语音并转换为文本。
Web Speech API 不是所有浏览器都默认启用,调用前需检查是否存在,并引导用户授予权限:
window.SpeechRecognition 或 window.webkitSpeechRecognition 是否存在(Chrome 使用带前缀的版本)recognition.start() 时,浏览器会自动弹出麦克风权限请求;若用户拒绝或未授权,需提示手动开启(如进入设置 → 网站设置 → 麦克风)创建识别器后,可设置识别行为,提升实用性:
new (SpeechRecognition || webkitSpeechRecognition)() 创建实例recognition.continuous = true 支持连续识别(非说完即停)recognition.interimResults = true 可获取中间结果(带下划线的暂定文本),适合实时反馈recognition.lang = 'zh-CN'(中文)或 'en-US'(英文)recognition.maxAlternatives = 1 减少冗余结果语音识别是异步过程,依赖事件驱动。核心事件有:
onstart:麦克风已开启,开始收音onresult:收到识别结果。event.results 是 SpeechRecognitionResultList,每项含多个 SpeechRecognitionAlternative;取 results[results.length - 1][0].transcript 获取最新文本onend:识别结束(可能因超时、错误或用户停止)。常在此处自动重启:recognition.start(),实现“一直听”效果onerror:捕获错误,如 error.error === 'no-speech'(没检测到语音)、'aborted'(被中断
)或 'not-allowed'(权限被拒)以下代码片段可粘贴进 HTML 文件,在 Chrome 中测试:
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
if (!SpeechRecognition) {
console.error('当前浏览器不支持语音识别');
} else {
const recognition = new SpeechRecognition();
recognition.lang = 'zh-CN';
recognition.interimResults = true;
recognition.continuous = true;
recognition.onresult = (event) => {
const transcript = Array.from(event.results)
.map(result => result[0].transcript)
.join('');
console.log('识别结果:', transcript);
};
recognition.onend = () => recognition.start(); // 自动重连
recognition.onerror = (e) => console.warn('识别出错:', e.error);
// 页面加载后等待用户触发,例如点击按钮再 start()
document.getElementById('start-btn').onclick = () => recognition.start();
}