当前位置: 首页 > news >正文

浏览器 实时监听音量 实时语音识别 vue js

一、需求

        最近前端需要实现实时语音识别的功能, 但如果24小时不停识别会消耗很多资源,所以我写了一段代码来监听音量, 当音量大于阈值开启录音, 当音量连续小于阈值3秒停止录音, 由于是命令识别,我加了一个条件,若已经录音10秒也会自动停止录音。

二、代码

let isDoing = false;  // 是否正在录音let doingTime = 0;      // 本次录音时长let doingNone = 0;      // 录音无声时长let maxTime = 10;     // 自定义最大录音时长let stopTime = 3;     // 自定义连续3秒无声断开let startVolume = 80; // 自定义达到80音量开始录音// 获取麦克风流并创建音频上下文const stream = await navigator.mediaDevices.getUserMedia({ audio: true });const audioContext = new AudioContext();const analyser = audioContext.createAnalyser();const microphone = audioContext.createMediaStreamSource(stream);// 连接分析节点microphone.connect(analyser);analyser.fftSize = 256;const bufferLength = analyser.frequencyBinCount;const dataArray = new Uint8Array(bufferLength);// 实时计算音量function getVolume() {analyser.getByteFrequencyData(dataArray);let sum = 0;for (let i = 0; i < bufferLength; i++) {sum += dataArray[i];}const avgVolume = sum / bufferLength;return avgVolume.toFixed(2);}try {setInterval(() => {console.log(`开始检测`);let volume = getVolume(); // 开始检测if (volume > startVolume) {doingNone = 0;if (isDoing) {doingTime = doingTime + 1;if (doingTime > maxTime) {//todo 超过10秒结束录音}}else {doingTime = 0;//todo 调用开始录音方法}}else if(isDoing) {doingNone = doingNone + 1;if (doingNone > stopTime) {//todo 超过3秒无声音结束录音}}}, 1000)} catch (error) {console.error('麦克风访问错误:', error)}

http://www.dtcms.com/a/271764.html

相关文章:

  • 解析LLM层裁剪:Qwen实战指南
  • 搭建自动化工作流:探寻解放双手的有效方案(1)
  • Spring Boot项目中大文件上传的高级实践与性能优化
  • Spring for Apache Pulsar->Reactive Support->Message Consumption
  • Socket服务器代理工具及服务端网络转发中枢
  • 【Action帧简要分析】
  • iOS APP混合开发性能测试怎么做?页面卡顿、通信异常的工具组合实战
  • iOS Widget 开发-7:TimelineProvider 机制全解析:构建未来时间线
  • 在 MacOS 上安装和配置 Kafka
  • 深入理解 Linux 中的 stat 函数与文件属性操作
  • 每天一个前端小知识 Day 29 - WebGL / WebGPU 数据可视化引擎设计与实践
  • 在Linux上使用libasan开发QT程序定位内存问题
  • Spring AI 系列之七 - MCP Client
  • 限流式保护器如何筑牢无人驾驶汽车充电站的安全防线
  • linxu内核的signal fault和arm内核的flault
  • 【LeetCode100】--- 2.字母异位词分组【复习回顾】
  • 如何发现 Redis 中的 BigKey?
  • 正向代理服务器Squid:功能、架构、部署与应用深度解析
  • 黄瓜苦多于意外,苦瓜苦来自本源——“瓜苦”探源
  • CloudCanal:一款企业级实时数据同步、迁移工具
  • 浪潮CD1000-移动云电脑-RK3528芯片-2+32G-开启ADB ROOT破解教程
  • tomcat源码02 - 理解Tomcat架构设计
  • MyBatis集成Logback日志全攻略
  • 微软云语音识别ASR示例Demo
  • 激活函数与损失函数:神经网络的动力引擎与导航系统
  • defer学习指南
  • 《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
  • 启辰智慧预约团队5周年活动掠影,打造一流预约系统
  • 论文精读(一)| 量子计算系统软件研究综述
  • IoT 小程序:如何破解设备互联的碎片化困局?