0

0

如何用javascript实现语音识别功能_web speech api的兼容性如何

狼影

狼影

发布时间:2026-01-09 15:42:09

|

428人浏览过

|

来源于php中文网

原创

speechrecognition 在主流浏览器中基本不可用,仅 chrome 稳定支持且限 https;firefox、safari、edge 均未实现,w3c 规范仍为草案;应通过实例化并监听事件检测可用性,而非仅判断构造函数存在。

如何用javascript实现语音识别功能_web speech api的兼容性如何

Web Speech API 的 SpeechRecognition 在主流浏览器中基本不可用

Chrome 是目前唯一稳定支持 SpeechRecognition(即语音识别)的桌面浏览器,且仅限 HTTPS 环境;Firefox、Safari、Edge(Chromium 之外)均未实现该接口,调用 webkitSpeechRecognition 会直接报 ReferenceError 或返回 undefined。这不是配置或权限问题,而是标准未被采纳——W3C 规范仍处于「Working Draft」阶段,厂商支持意愿极低。

检测 SpeechRecognition 是否可用的正确方式

不能只靠 typeof window.SpeechRecognition !== 'undefined',因为 Chrome 以外的浏览器可能暴露构造函数但无法实例化。必须尝试创建并监听事件是否触发:

function isSpeechRecognitionAvailable() {
  const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
  if (!SpeechRecognition) return false;

  try {
    const rec = new SpeechRecognition();
    // Chrome 会立即触发 onstart(即使未调用 start()),其他浏览器通常抛错或静默失败
    let started = false;
    rec.onstart = () => { started = true; };
    rec.onerror = () => { started = false; };
    rec.start(); // 触发权限请求和初始化
    setTimeout(() => {
      rec.stop();
      return started;
    }, 500);
  } catch (e) {
    return false;
  }
}

实际项目中建议直接用特征检测 + 降级提示,例如:

  • 检测失败时显示「语音输入仅支持 Chrome 浏览器」
  • 避免在非 Chrome 环境中调用 rec.start(),否则可能引发未捕获异常
  • 移动端 iOS Safari 完全不支持,Android Chrome 支持但需手动开启麦克风权限

替代方案:用 WebRTC + 第三方 ASR 服务绕过浏览器限制

真正跨浏览器可用的语音识别,得放弃 SpeechRecognition,改用 MediaRecorder 录制音频流,再上传至 ASR 服务(如 Whisper.cpp、Azure Speech、AWS Transcribe):

AI角色脑洞生成器
AI角色脑洞生成器

一键打造完整角色设定,轻松创造专属小说漫画游戏角色背景故事

下载

立即学习Java免费学习笔记(深入)”;

  • MediaRecorder 兼容性好(Chrome/Firefox/Safari/Edge 均支持)
  • 录制后转成 BlobArrayBuffer,通过 fetch 发送到你自己的 ASR 中转接口
  • 避免前端直连第三方 API 密钥泄露风险
  • 延迟比原生 API 高 1–2 秒,但准确率和语言支持远超 SpeechRecognition

关键代码片段(仅录音部分):

async function startRecording() {
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  const mediaRecorder = new MediaRecorder(stream);
  const chunks = [];

  mediaRecorder.ondataavailable = e => chunks.push(e.data);
  mediaRecorder.onstop = async () => {
    const blob = new Blob(chunks, { type: 'audio/webm' });
    // 后续上传 blob 到你的 ASR 接口
  };

  mediaRecorder.start();
  return { stop: () => mediaRecorder.stop(), stream };
}

Chrome 下使用 SpeechRecognition 的几个硬坑

即便在 Chrome 中,也容易因细节翻车:

  • 必须是 HTTPS 页面(localhost 除外),HTTP 页面会静默禁用
  • interimResults: true 时,result[0][0].transcript 可能频繁重写,需用 event.results[i][0].isFinal 判断是否最终结果
  • 连续识别需手动调用 rec.start(),但 Chrome 会在识别结束约 5 秒后自动停止,需监听 onend 并重新 start()
  • lang 参数必须严格匹配 BCP 47 标签(如 'zh-CN',不是 'zh''Chinese'),否则 fallback 到英文
  • 移动端 Chrome 会强制弹出系统麦克风权限框,且无法预授权;用户拒绝后,后续调用 start() 会直接触发 onerrorerror.code === 'not-allowed'
Chrome 的 SpeechRecognition 不是“能用就行”的功能,而是“只在特定条件组合下才勉强可用”的实验性接口。真实项目里,优先考虑 WebRTC + 后端 ASR 的组合,兼容性和可控性高得多。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1019

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

816

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1665

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

395

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

1025

2025.04.24

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

368

2023.10.25

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1774

2023.10.19

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

0

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号