前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >音量检测

音量检测

作者头像
前端小鑫同学
发布于 2022-12-26 04:37:49
发布于 2022-12-26 04:37:49
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

写作背景:

在一些在线会议软件、通讯软件中尤其是头一次使用麦克风设备,当电脑中存在多个麦克风设备的时候,往往初始的设备有可能并不是我们想使用的,或者有时候设备故障的时候也需要通过音量的检测来进行判断。我们可以通过音量条的显示来反馈当前设备是否正常工作。

HTML5 中提供的 AudioContext 对象用来专门处理音频,通过上下文创建的各种 AudioNode 相互链接。

模板定义:

提供一个启动麦克风的按钮事件和一个用来显示音量的 div 元素,通过动态改变元素的宽度来实时显示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <h2>音量检测</h2>
  <a-divider />
  <a-button @click="openMicrophone">打开麦克风</a-button>
  <div
    :style="{
      width: `${audioLevel}px`,
      height: '10px',
      background: '#8dc63f',
      marginTop: '20px',
    }"
  ></div>
</template>

启动麦克风和检测:

实例化 SoundMeter ,并注册监听来回调音量数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
soundMeter.value = new SoundMeter(
    new window.AudioContext(),
    (instant: number) => {
      audioLevel.value = Number(instant.toFixed(2)) * 348 + 1;
    }
);

通过 getUserMedia 设置允许音频的约束来启动麦克风,并对接检测工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const constraints: MediaStreamConstraints = { audio: true, video: false };
  navigator.mediaDevices
    .getUserMedia(constraints)
    .then((stream: MediaStream) => {
      soundMeter.value?.connectToSource(stream);
    })
  .catch(handleError);

当组件卸载后我们需要停掉检测音量的工具类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
onUnmounted(() => {
  soundMeter.value?.stop();
});

检测音量工具类:

在工具类中通过 onaudioprocess 来实时回调音量的数据,通过计算来得到一个适用于显示的数值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default class SoundMeter {
  mic: MediaStreamAudioSourceNode | undefined;
  script: ScriptProcessorNode;
  context: AudioContext;
  constructor(context: AudioContext, onAudioProcess: Function) {
    this.context = context;
    this.script = context.createScriptProcessor(2048, 1, 1);
    this.script.onaudioprocess = function (event) {
      let input = event.inputBuffer.getChannelData(0) || 0;
      let sum = 0.0;
      for (let i = 0; i < input.length; ++i) {
        sum += input[i] * input[i];
      }
      onAudioProcess &amp;&amp; onAudioProcess(Math.sqrt(sum / input.length));
    };
  }

  connectToSource(stream: MediaStream) {
    this.mic = this.context.createMediaStreamSource(stream);
    this.mic.connect(this.script);
    // necessary to make sample run, but should not be.
    this.script.connect(this.context.destination);
  }

  stop() {
    this.mic &amp;&amp; this.mic.disconnect();
    this.script &amp;&amp; this.script.disconnect();
  }
}

结语:

这一篇通过一个案例完成了音量的显示和检测音量的变化,明天继续学~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Electron音视频相关
比如我的耳机既能听声音又有麦克风,那么获取到的音频输入和音频输出设备的groupId就会是一样的。
码客说
2021/02/04
2.5K1
TRTC Web端 仿腾讯会议麦克风静音检测
目前 Web 的 TRTC 没有静音检测,在关闭麦克风的情况下发言没有提示,有时候会有比较尴尬的会议场景出现,为提升用户体验,这里尝试将腾讯会议的解决思路引入。
楚歌
2021/04/27
2.8K0
TRTC Web端 仿腾讯会议麦克风静音检测
使用 MediaStream Recording API 和 Web Audio API 在浏览器中处理音频(未完待续)
最近项目上有个需求,需要实现:录音、回放录音、实现音频可视化效果、上传wav格式的录音等功能。于是乎,我就顺便调研了下如何在浏览器中处理音频,发现 HTML5 中有专门的API用来处理音频。
zhaokang555
2023/10/17
6350
使用 MediaStream Recording API 和 Web Audio API 在浏览器中处理音频(未完待续)
H5利用JS调用电脑摄像头实现拍照效果
今天学习了调用电脑摄像头,利用canvas画布将视频当前帧转换成图片的实例,其中用到了 mediaDevices.getUserMedia 方法。该方法提示用户允许使用媒体输入,产生包含所请求类型的媒体轨道。包括视频轨道(由诸如照相机,视频记录设备,屏幕共享服务等的硬件或虚拟视频源产生),音频轨道(类似地,由物理或虚拟音频源,如麦克风,A / D转换器等),以及其他可能的轨道类型。
德顺
2019/11/12
9.7K1
JavaScript 是如何工作的:WebRTC 和对等网络的机制!
WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。
前端小智@大迁世界
2019/03/15
2.4K0
JavaScript 是如何工作的:WebRTC 和对等网络的机制!
webrtc之摄像头加麦克风实战!
大家周末好,今天给大家继续分享webrtc的文章,在上周分享的文章里面,介绍了如何打开本地摄像头来实时显示采集画面,不过当时代码是用js写的,不知道大家有没有看明白,感兴趣的朋友可以用vs把代码跑起来看看。
用户6280468
2022/03/21
1.8K0
webrtc之摄像头加麦克风实战!
Webrtc及WEB端音视频设备获取及流处理
注意本文和之前Electron获取设备的文章有重合,但是也不是一样的,因为在Electron中我们不但能用HTML的API,也能使用Electron的API,但是WEB中就有局限了,在WEB中就实现不了直接分享主屏幕,必须用户选择。
码客说
2022/09/23
2.5K0
Webrtc及WEB端音视频设备获取及流处理
深度学习的JavaScript基础:从浏览器中提取数据
在python语言中,通过文件、摄像头获取数据,并不是什么难事。但对于浏览器来说,出于安全的考虑,并不能直接访问本地文件,至于访问摄像头、麦克风这样的硬件设备,只是从HTML5才开始得到支持。本文就如果获取数据展开讨论,看看在浏览器中提取数据有哪些方法。
云水木石
2019/12/16
1.8K0
Web Audio API 介绍和 web 音频应用案例分析
本文主要介绍了如何使用 Web Audio API 实现音频的剪辑、处理、合成和播放功能。作者通过实例演示了如何使用 Web Audio API 实现音频的剪辑、处理、合成和播放功能,包括音频的选帧、剪辑、淡入淡出、变速、变调、合成、播放控制等功能。此外,作者还介绍了 Web Audio API 的音频处理、合成和播放控制的用法,并提供了详细的示例代码。
QQ音乐技术团队
2017/11/21
7.5K0
Web Audio API 介绍和 web 音频应用案例分析
webAudio 开发 H5 版《 八分音符酱 》
该文介绍了如何利用Web Audio API实现一个基于八分音符的跳跃游戏。通过获取麦克风的实时音频数据,计算出游戏角色的跳跃高度,从而实现自动跳跃。同时,利用Web Audio API的音频处理功能,实现游戏音乐和音效的播放。该文还介绍了如何利用Web Audio API的音频处理功能,实现游戏音乐和音效的播放。
QQ音乐技术团队
2017/10/17
3.1K0
webAudio 开发 H5 版《 八分音符酱 》
给测试小妹做了一个js版屏幕录制工具iREC,她用后竟说喜欢我
周末,公司里的测试小妹给我发消息说,她昨晚又加班到很晚,原因是研发要求提复杂bug时需要附上具体的操作流程以便详细了解操作过程和复现。最好能提供一个录制视频,这不是难为我们测试小妹嘛?随后她问我有没有好用,免费的录制屏幕的软件。我答应帮她找找。 看到这里你可能以为这是一篇软件推荐文章,但其实这是一篇造轮子的文章,经过一番搜索,我发现大多数的录屏软件,不是比较笨重,就是有些需要付费,或者无法跨平台使用。于是我想能不能自己开发一个录屏工具,这个想法一旦产生就无法停止,在造轮子之前我需要简单整理一下需求范围,以便挑选合适的工具来实现。
拿我格子衫来
2022/01/24
1.3K0
给测试小妹做了一个js版屏幕录制工具iREC,她用后竟说喜欢我
WebRTC简介及使用
WebRTC 只是一个媒体引擎,上面有一个 JavaScript API,所以每个人都知道如何使用它(尽管浏览器实现仍然各不相同),本文对 WebRTC(网页实时通信)的相关内容进行简要介绍。
Gnep@97
2023/11/12
1.8K0
WebRTC简介及使用
工作记录,使用Uniapp开发安卓应用
项目需求:录制视频和语音,在app页面的上半部分实时显示。下半部分显示文字提示,提醒用户回答确认。最后将录制的视频提交到服务器保存。
房东的狗丶
2023/02/17
6K1
工作记录,使用Uniapp开发安卓应用
摆脱客户端?网页发起直播势在必行!
近几年直播行业飞速发展,但是由于Web端这方面功能的长时间缺失,使得直播端以客户端为主;WebRTC 的出现使得网页也可以成为直播端。那么究竟WebRTC是什么呢?
保利威视频云
2020/05/07
3K0
摆脱客户端?网页发起直播势在必行!
通过 web 录制视频(摄像头)并上传
在用户通过提示允许的情况下,打开系统上的相机或屏幕共享和/或麦克风,并提供 MediaStream 包含视频轨道和/或音频轨道的输入。
张云飞Vir
2021/04/28
2K0
视频通话进阶:React Hooks和屏幕共享,让你在虚拟世界中畅享面对面的交流
您撰写本文是为了深入研究使用 React 构建具有屏幕共享功能的视频会议应用程序的复杂性。您的目标是强调这项技术的复杂性和变革潜力。
zayyo
2023/10/14
3850
HTML5录音控件
最近的项目又需要用到录音,年前有过调研,再次翻出来使用,这里做一个记录。 HTML5提供了录音支持,因此可以方便使用HTML5来录音,来实现录音、语音识别等功能,语音开发必备。但是ES标准提供的API并不人性化,不方便使用,并且不提供保存为wav的功能,开发起来费劲啊!! github寻找轮子,发现Recorder.js,基本上可以满足需求了,良好的封装,支持导出wav,但是存在: wav采样率不可调整 recorder创建麻烦,需要自己初始化getUserMedia 无实时数据回调,不方便绘制波形 。。。
JadePeng
2018/03/12
6.3K0
基于react的录音及音频曲线绘制的组件开发
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j_bleach/article/details/82080971
j_bleach
2019/07/02
2.2K0
基于react的录音及音频曲线绘制的组件开发
工具系列 | H5如何实现人脸识别
人脸识别技术在当下已经十分成熟,但主要在移动端和专有设备应用上较为普及,而在Web端并不多见,本着学习的目的从零实现web端的人脸登录功能。
Tinywan
2020/07/23
3.7K0
工具系列 | H5如何实现人脸识别
Web前端WebRTC攻略(二) 音视频设备及数据采集
2021年1月26日,W3C 和 IETF 同时宣布 WebRTC(Web Real-Time Communications,Web 实时通信)现发布为正式标准,标志着 WebRTC正式走进舞台。尽管如此,WebRTC 早已在视频会议和直播中得到了广泛的应用,成为了线上通信及协作服务的基石。IMWeb 团队是国内最早研究 WebRTC 的团队之一,在腾讯课堂、企鹅辅导等应用中都有实践。这是 WebRTC 系列的第二篇,希望可以帮助你更好的了解音视频。 一、音视频采集基本概念 在讲浏览器提供的用 JS 采集音
用户1097444
2022/06/29
3.6K0
Web前端WebRTC攻略(二) 音视频设备及数据采集
推荐阅读
相关推荐
Electron音视频相关
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文