js如何实现语音识别 Web Speech API实战应用

javascript 可以通过 web speech api 实现语音识别,其核心接口为 speechrecognition。具体步骤如下:1. 创建 speechrecognition 对象并兼容不同浏览器前缀;2. 设置语言、连续识别模式及是否返回中间结果;3. 监听 start、result、end 和 error 等事件;4. 调用 start() 开始识别,stop() 停止识别。错误处理可通过 onerror 事件捕获常见错误类型并提示用户,如 no-speech、not-allowed、network 等。提高准确率的方法包括优化环境、清晰发音、调整语速、使用高质量麦克风及限制识别语法范围。web speech api 兼容性较好支持 chrome 和 edge,firefox 和 safari 支持较弱,不支持时可考虑第三方服务如 google cloud 或 azure speech services。

js如何实现语音识别 Web Speech API实战应用

实现语音识别,JavaScript 可以借助 Web Speech API,它提供了浏览器内置的语音识别能力,无需依赖外部库或服务。

js如何实现语音识别 Web Speech API实战应用

解决方案

Web Speech API 主要包含两个接口:SpeechRecognitionSpeechSynthesis。前者用于语音识别,后者用于语音合成(文本转语音)。这里我们重点关注 SpeechRecognition

js如何实现语音识别 Web Speech API实战应用

基本步骤:

js如何实现语音识别 Web Speech API实战应用

创建 SpeechRecognition 对象:

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();

这里使用了 window.SpeechRecognition || window.webkitSpeechRecognition,是因为 Chrome 早期版本使用的是带有 webkit 前缀的接口。

设置语言:

recognition.lang = 'zh-CN'; // 设置为中文

可以根据需要设置为其他语言。

设置连续识别模式(可选):

recognition.continuous = false; // 默认是 false,设置为 true 可以进行连续识别

连续识别模式下,识别器会一直监听语音输入,直到手动停止。

设置是否返回中间结果(可选):

recognition.interimResults = false; // 默认是 false,设置为 true 可以返回中间结果

中间结果是指在语音识别过程中,识别器返回的初步结果,这些结果可能会随着语音的继续输入而发生变化。

监听事件:

start: 识别器开始监听语音输入时触发。result: 识别器识别到语音时触发,返回识别结果。end: 识别器停止监听语音输入时触发。error: 发生错误时触发。

开始识别:

recognition.start();

停止识别:

recognition.stop();

示例代码:

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();recognition.lang = 'zh-CN';recognition.interimResults = false;recognition.maxAlternatives = 1; // 设置返回的最大备选结果数量,默认为 1document.querySelector('button').addEventListener('click', () => {  recognition.start();});recognition.onresult = (event) => {  const result = event.results[0][0].transcript;  console.log('识别结果:' + result);  document.getElementById('output').textContent = result;}recognition.onerror = (event) => {  console.error('语音识别出错:' + event.error);};recognition.onstart = () => {    console.log("语音识别已启动");}recognition.onend = () => {    console.log("语音识别已结束");}

这个例子中,点击按钮会启动语音识别,识别结果会显示在 idoutput 的元素中。

如何处理语音识别的错误?

语音识别出错很常见,网络问题、麦克风权限、浏览器兼容性等等都可能导致错误。 SpeechRecognition 对象的 onerror 事件可以捕获这些错误。

常见的错误类型:

no-speech: 没有检测到语音输入。aborted: 识别被中止。audio-capture: 无法获取音频输入。network: 网络错误。not-allowed: 没有权限使用麦克风。service-unavailable: 语音识别服务不可用。bad-grammar: 语法错误。language-not-supported: 不支持的语言。

处理方法:

onerror 事件处理函数中,可以根据 event.error 的值来判断错误类型,并采取相应的措施。 比如,如果错误类型是 not-allowed,可以提示用户检查麦克风权限。如果错误类型是 network,可以提示用户检查网络连接。

recognition.onerror = (event) => {  console.error('语音识别出错:' + event.error);  switch (event.error) {    case 'no-speech':      alert('没有检测到语音,请重试。');      break;    case 'network':      alert('网络错误,请检查网络连接。');      break;    case 'not-allowed':      alert('请允许浏览器使用麦克风。');      break;    default:      alert('发生未知错误,请重试。');  }};

如何提高语音识别的准确率?

语音识别的准确率受到很多因素的影响,比如环境噪音、口音、语速等等。 可以尝试以下方法来提高准确率:

优化环境: 尽量在安静的环境中使用语音识别,避免噪音干扰。清晰发音: 尽量用清晰、标准的普通话发音。调整语速: 语速不宜过快或过慢,保持适中。使用合适的麦克风: 高质量的麦克风可以提高音频质量,从而提高识别准确率。使用 Web Speech API 的高级特性: 比如,可以使用 SpeechGrammarList 对象来指定语法,限制识别范围,从而提高准确率。

关于 SpeechGrammarList:

SpeechGrammarList 可以用来定义一组语法,告诉识别器只识别这些语法中的内容。 比如,可以定义一组命令,让识别器只识别这些命令。

const grammar = '#JSGF V1.0; grammar colors; public  = red | green | blue | yellow | purple ;'const speechRecognitionList = new (window.SpeechGrammarList || window.webkitSpeechGrammarList)();speechRecognitionList.addFromString(grammar, 1);recognition.grammars = speechRecognitionList;

这段代码定义了一个名为 colors 的语法,它包含 red, green, blue, yellow, purple 这几个颜色。 然后,将这个语法添加到 SpeechRecognition 对象的 grammars 属性中。 这样,识别器就只会识别这几个颜色。

Web Speech API 的兼容性如何?

Web Speech API 的兼容性取决于浏览器。 目前,Chrome 和 Edge 对 Web Speech API 的支持较好,Firefox 和 Safari 的支持相对较弱。 可以使用 window.SpeechRecognitionwindow.SpeechGrammarList 来检测浏览器是否支持 Web Speech API。

if ('SpeechRecognition' in window) {  // 支持 Web Speech API  console.log('支持 Web Speech API');} else {  // 不支持 Web Speech API  console.log('不支持 Web Speech API');  alert('您的浏览器不支持 Web Speech API,请更换浏览器。');}

如果浏览器不支持 Web Speech API,可以考虑使用第三方的语音识别库,比如 Google Cloud Speech-to-Text API、Microsoft Azure Speech Services 等。 这些第三方库通常提供更强大的功能和更高的准确率,但也需要付费使用。

以上就是js如何实现语音识别 Web Speech API实战应用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1507380.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 04:30:15
下一篇 2025年12月20日 04:30:23

相关推荐

  • JS如何实现页面骨架屏 3种骨架屏方案优化加载用户体验

    页面骨架屏的实现主要有三种方案,分别是纯css方案、js+css方案和工具库方案。1. 纯css方案通过背景色、动画等样式模拟页面结构,优点是实现简单、性能好,但灵活性差、维护困难;2. js+css方案由js生成html结构、css控制样式,灵活性高、维护性好,但需编写js代码,对性能有一定影响;…

    2025年12月20日 好文分享
    000
  • js如何实现文字阴影效果 js文字阴影的3种动态生成方式

    javascript实现文字阴影效果的核心方法有三种:1.直接修改text-shadow属性,通过js动态更新样式实现动态阴影;2.使用css变量定义阴影参数,再用js修改变量值,提高性能和可维护性;3.结合requestanimationframe实现更平滑的动画效果。这三种方式各有优劣,选择应根…

    2025年12月20日 好文分享
    000
  • js如何实现屏幕截图功能 js网页截图的3种实现方法

    html2canvas截图模糊可通过提高scale值、启用usecors、调整window尺寸、优化字体和css样式、延迟截图、升级库版本或改用其他方案解决。1.提高scale值可增强清晰度但影响性能;2.启用usecors处理跨域问题;3.手动设置windowwidth和windowheight确…

    2025年12月20日 好文分享
    000
  • js怎样检测用户是否在线 实时监测用户网络状态变化

    检测用户在线状态的核心方法是使用 navigator.online 属性和 online/offline 事件,1. 初始加载时通过 navigator.online 检测网络状态;2. 使用 online 和 offline 事件监听网络变化;3. 结合心跳检测提升准确性,防止误判;4. 使用防抖…

    2025年12月20日 好文分享
    000
  • js如何实现性能监控 前端性能监控的5个关键指标

    前端性能监控通过埋点、数据采集、分析和可视化发现性能瓶颈并提供改进方向。其5个关键指标为:首屏加载时间、白屏时间、首次可交互时间(tti)、页面总加载时间和资源加载错误率。1. 首屏加载时间可在 中记录起始时间,在domcontentloaded事件后计算差值;2. 白屏时间通过mutationob…

    2025年12月20日 好文分享
    000
  • js如何解析URL查询参数 获取URL参数的5种实用方案!

    解析url查询参数的方法有多种,选择取决于具体需求和环境。1. 使用原生js分割法简单直接,但需处理边界情况;2. urlsearchparams api推荐使用,自动处理编码且代码简洁;3. 利用location.search仅适用于浏览器环境;4. 第三方库如qs、query-string适合处…

    2025年12月20日 好文分享
    000
  • js如何生成组织结构图 动态组织结构图生成方案

    动态组织结构图的实现主要通过javascript操作dom并结合数据动态渲染节点和连接线,具体步骤如下:1. 准备清晰的json格式数据,描述每个节点的id、名称及父节点id;2. 选择合适的库或框架如orgchart.js或手写代码实现;3. 动态创建dom元素并布局节点;4. 使用svg、can…

    2025年12月20日 好文分享
    000
  • js如何实现虚拟列表渲染 js虚拟列表性能优化的6个要点

    虚拟列表渲染是一种优化长列表性能的技术,其核心在于仅渲染可视区域内的列表项。1. 监听滚动事件;2. 计算可视区域的起始索引和结束索引;3. 渲染对应索引的列表项;4. 设置占位元素保证滚动条正常显示。为提升性能,可采取以下措施:5. 减少dom操作,复用dom元素;6. 使用requestanim…

    2025年12月20日 好文分享
    000
  • js框架framework选型_js框架framework对比分析

    选择js框架需根据项目需求、团队技能、性能要求和社区生态综合判断。1.react适合组件化和函数式编程,灵活性高但需自行配置;2.angular提供完整解决方案,适合长期维护的大型项目,学习曲线陡峭;3.vue上手快、文档清晰,适合中小型项目或快速原型开发;4.svelte、solidjs等新兴框架…

    2025年12月20日 好文分享
    000
  • js怎样操作WebGL纹理 5种纹理贴图技巧增强3D效果

    webgl纹理操作的核心在于将图像数据上传至gpu以用于3d模型贴图,其流程包括:1. 获取webgl上下文;2. 创建纹理对象;3. 加载图像数据;4. 绑定纹理并设置参数;5. 使用teximage2d将图像数据送入gpu。为避免性能瓶颈,应采用异步加载、纹理压缩及mipmapping技术。we…

    2025年12月20日 好文分享
    000
  • js怎么操作dom元素样式 js操作dom样式的6个常用方法总结

    掌握js操作dom元素样式的方法有六种:直接修改style属性;使用setproperty()方法;使用csstext属性;添加或移除css类;切换css类;获取计算样式。此外,处理兼容性问题可使用css预处理器或polyfill库;避免频繁操作dom可通过批量修改、缓存元素、使用css类及requ…

    2025年12月20日 好文分享
    000
  • js如何实现时序图 动态时序图绘制与交互实现

    javascript实现时序图需选择合适的图表库,如mermaid、jsplumb、vis.js或antv g6,随后进行数据准备与处理,将参与者、消息等信息转换为对应格式,再通过图表库渲染成图形。动态时序图还需实现交互功能,如消息增删、拖拽调整顺序、点击展示详情等,并通过事件监听和重新渲染来响应用…

    2025年12月20日 好文分享
    000
  • 如何用Clipboard API复制文本?

    clipboard api 提供了更安全强大的复制功能,其核心方法是 navigator.clipboard.writetext()。1. 使用 writetext() 可以通过异步函数复制纯文本;2. 通过 permissions.query() 检查剪贴板权限状态并处理授权逻辑;3. 使用 wr…

    2025年12月20日 好文分享
    000
  • js中如何用数组方法替代条件判断

    在javascript中,使用数组方法替代条件判断可通过将逻辑转化为查找或筛选操作来简化代码。1. 使用对象字面量通过键值对直接查找,例如用状态码作为键获取对应消息;2. 使用find方法查找符合条件的对象;3. 根据场景选择合适的方法:查找单个元素用find,筛选多个元素用filter,判断存在性…

    2025年12月20日 好文分享
    000
  • js如何检测陀螺仪传感器 获取陀螺仪数据的3种监听技巧!

    陀螺仪传感器检测与数据获取在js中主要依赖deviceorientation api,但并非所有设备都支持,因此首要任务是检测可用性。1. 可用性检测:通过检查window.deviceorientationevent是否存在进行初步判断,并进一步监听deviceorientation事件以确认实际…

    2025年12月20日 好文分享
    000
  • js如何实现AR效果 WebAR实现方案与技术解析

    webar是一种无需下载app即可通过浏览器体验ar的技术,它依赖js实现图像识别、追踪和渲染等功能。其核心要素包括图像追踪与识别、3d渲染(如webgl)、设备姿态估计三大技术点。选择框架时,a-frame适合html基础用户,three.js提供更高灵活性,8th wall则适合商业化项目。性能…

    2025年12月20日 好文分享
    000
  • js如何获取用户地理位置 获取定位信息的4种方法解析!

    获取用户地理位置在js中最常用的方法是navigator.geolocation api,但需考虑兼容性与用户授权问题;此外还可结合ip定位、wi-fi定位、基站定位等方式提高精度;用户拒绝授权时应提供友好提示和替代方案。具体方法包括:1. 使用navigator.geolocation.getcu…

    2025年12月20日 好文分享
    000
  • js中如何用模块化组织条件判断

    在javascript中,用模块化组织条件判断的关键方法包括1.策略模式;2.函数式编程;3.switch语句或对象字面量;4.决策表。策略模式通过封装每个条件判断为独立策略对象提升灵活性和可维护性;函数式编程将条件判断拆分为独立函数并通过组合方式调用;switch语句或对象字典适用于单一变量多值判…

    2025年12月20日 好文分享
    000
  • JS如何解析URL哈希参数 3种方法提取并处理锚点参数

    解析url哈希参数的核心在于利用window.location.hash属性获取#后的内容并处理成键值对。1. 使用原生js字符串处理:通过substring(1)去掉#,split(‘&’)和split(‘=’)分割键值对,并用decodeu…

    2025年12月20日 好文分享
    000
  • js怎样实现3D模型加载 4个关键步骤教你渲染三维对象

    加载3d模型到javascript应用的关键在于理解模型格式、加载、解析和渲染四个步骤。首先,选择合适的模型格式如obj、gltf或fbx,其中gltf适合web使用;其次,选用three.js或babylon.js等渲染引擎简化开发;接着,通过引擎提供的loader(如objloader、gltf…

    2025年12月20日 好文分享
    000

发表回复

登录后才能评论
关注微信