WebRtc实时音波

摘要:
最近在做音视频相关业务,用的到了webRtc技术,掌握这些方法可以结合业务做,麦克风检测、录制音频,都是可以的;基本操作和其它方法都写好在methods中了;

全局变量
// 后续会创建AnalyserNode对象
let analyser: any = null;
// 后续赋值canvas标签对象
let canvas: any = null;
// canvas 2d对象
let canvasCtx: any = null;
let audioSteam: any = { // 获取音视频MediaStream对象current: null
}
HTML
<div>// 绘制音波<canvas id="devDetectionMicroCanvas" className={style.audio_canvas}></canvas>// 实时播放<audio id="devDetectionMicroRef" autoPlay></audio>
</div>
获取音视频流
// 使用getUserMedia API获取音频流。
navigator.mediaDevices.getUserMedia({audio: true
}).then(stream => {/* MediaStream赋值到全局对象,后续使用 */audioSteam.current = stream;/* 获取当前采集设备名称 */methods.handleStreamGetMicroName();/* 把媒体流赋值给audio标签进行试试播放 */methods.handleAudioPlay();/* 开始准备制作试试音波 */methods.handleCanvasAudioContext();
})
.catch(error => {let errorMessage = error + '';if (errorMessage.includes('Permission denied')) {errorMessage = '请开启麦克风权限';} else if (errorMessage.includes('Requested device not found')) {errorMessage = '请检测麦克风是否插入';};console.log('error', errorMessage)
});
其它方法
const methods = {// 处理canvas和audioContexthandleCanvasAudioContext() {// 1. 使用AudioContext API创建一个AudioContext对象,并将音频流添加到它上面const audioContext = new AudioContext();const source = audioContext.createMediaStreamSource(stream);// 2. 创建AnalyserNode对象,并将其连接到source节点。analyser = audioContext.createAnalyser();source.connect(analyser);// 3. 获取实时音频数据并将其转换为可视化数据。例如,可以使用getByteTimeDomainData()方法获取时域数据,并将其转换为音波。canvas = document.getElementById("devDetectionMicroCanvas");canvasCtx = canvas.getContext("2d");// 4.启动波纹动画methods.drawWaveform();},// 波纹动画drawWaveform() {const stream = audioSteam.current;// 获取时域数据const dataArray = new Uint8Array(analyser.fftSize);analyser.getByteTimeDomainData(dataArray);// 绘制音波canvasCtx.clearRect(0, 0, canvas.width, canvas.height);canvasCtx.lineWidth = 2;canvasCtx.strokeStyle = "rgb(69, 255, 56)";canvasCtx.beginPath();const sliceWidth = canvas.width * 1.0 / analyser.fftSize;let x = 0;for(let i = 0; i < analyser.fftSize; i++) {const v = dataArray[i] / 128.0;const y = v * canvas.height / 2;if(i === 0) {canvasCtx.moveTo(x, y);} else {canvasCtx.lineTo(x, y);}x += sliceWidth;}canvasCtx.stroke();requestAnimationFrame(methods.drawWaveform);},// 获取采集设备名称handleStreamGetMicroName(){if (audioSteam.current) {const audioTrack = audioSteam.current.getAudioTracks()[0];// audioTrack.label;console.log('当前采集设备名称', audioTrack.label);}},// 处理audio播放handleAudioPlay() {const stream = audioSteam.current;const elm: HTMLVideoElement | any = document.getElementById('devDetectionMicroRef');if (elm) {elm.srcObject = stream;}},// 停止麦克采集stopAudioSteam() {if (audioSteam.current) {audioSteam.current.getTracks().forEach((sender: any) => {sender.stop();});}},
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux】Debian访问Debian上的共享目录

要在Debian系统上访问共享目录&#xff0c;通常意味着要访问通过网络共享的文件夹&#xff0c;比如通过SMB/CIFS&#xff08;Server Message Block/Common Internet File System&#xff09;协议共享的Windows共享文件夹。以下是访问共享目录的步骤&#xff1a; 1. 安装必要的…

Qt中通过函数名(call-by-name)来调用COM的方式

QT中dumpcpp以及dumpdoc使用-CSDN博客 QT使用dumpcpp为COM生成h及cpp的方式&#xff0c;COM是C#的dll注册的-CSDN博客 在qt中调用COM的方式&#xff0c;其中采用函数名的方式算是比较简单的&#xff0c;但是有时候如果没有提供qt版本的函数说明&#xff0c;却是很难调用。笔者…

PCL 极大似然估计法拟合平面

目录 一、算法原理1、极大似然估计2、拟合过程3、参考文献二、代码实现三、结果展示一、算法原理 1、极大似然估计 在以最小二乘法为基础的估计算法中, 所有的参数都是确定值;而实际上,测量数据与未知参数都具有一定的随机性。这就导致了最小二乘法估计质量的缺陷以及对白噪…

Devops-01-devops 是什么?

拓展阅读 Devops-01-devops 是什么&#xff1f; Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件 代码质量管理 SonarQube-01-入门介绍 项目管理平台-01-jira 入门介绍 缺陷跟踪管理系统&#xff0c;为针对缺陷管理、任务追踪和项目管理的商业…

【C++】Qt:WebSocket客户端示例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍WebSocket客户端示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

Day28 回溯算法 part04

Day28 回溯算法 part04 93.复原IP地址 我的思路&#xff1a; 在分割回文串代码的基础上改写&#xff0c;需要考虑多种情况 不合法的IP地址part&#xff1a;长度>1同时首数字为0 || 长度0 || 长度&#xff1e;3 || &#xff1e;255 将各个part结合起来添加 ”." 的时候…

[Halcon学习笔记]实现多边形绘图后自动闭合成斜矩形

1、介绍 在Halcon联合开发项目中&#xff0c;需要在Halcon窗口上绘制不同形状的ROI&#xff0c;但是Halcon自带的绘图操作不太方便&#xff0c;操作时交互感官较差&#xff0c;所以可以通过绘制多边形&#xff0c;通过点来绘制多边形&#xff0c;最后通过闭合算子将绘框形成闭…

大数据技术学习笔记(十三)—— HBase

目录 1 Hbase 概述1.1 Hbase 定义1.2 HBase 数据模型1.2.1 HBase 逻辑结构1.2.2 HBase 物理存储结构1.2.3 数据模型 1.3 HBase 基本架构 2 HBase Shell 操作2.1 基本操作2.2 namespace 操作2.3 表操作 3 HBase 原理深入3.1 RegionServer 架构3.2 HBase 写流程3.3 MemStore Flus…

WPF —— 控件模版和数据模版

1:控件模版简介: 自定义控件模版&#xff1a;自己添加的样式、标签&#xff0c;控件模版也是属于资源的一种&#xff0c; 每一个控件模版都有一唯一的 key&#xff0c;在控件上通过template属性进行绑定 什么场景下使用自定义控件模版&#xff0c;当项目里面多个地方…

Sentinel(流控模式:直接关联链路,流控效果:直接预热排队)

Sentinel能够对流量进行控制&#xff0c;主要是监控应用的QPS流量或者并发线程数等指标&#xff0c;如果达到指定的阈值时&#xff0c;就会被流量进行控制&#xff0c;以避免服务被瞬时的高并发流量击垮&#xff0c;保证服务的高可靠性。 1.流控模式: 直接模式测试案例 表示1…

【Spring】聊一聊Autowired和Resource

聊一聊Autowired和Resource 对于日常使用来说&#xff0c;在Spring容器中&#xff0c;两个注解的功能基本是等价的&#xff0c;他们都可以将bean注入到对应的field中。 他们之间主要有以下几个关键的区别&#xff1a; 来源不同 Autowired 是 Spring 框架提供的注解&#xff0…

微信小程序项目实战遇到的问题

我们以学生成绩平台来作为例子。这是我们想得到的效果。 以下是完整代码&#xff1a; index.js // index.js Page({//页面的初始数据data: {hello: 欢迎进入微信小程序的编程世界,score: 80,userArray: [{name: 张三,score: [66, 77, 86, 70, 90]},{name: 李四,score: [88, 7…

如何让自己上百度百科?个人百科词条创建

百度百科&#xff0c;作为我国最大的中文百科全书&#xff0c;其影响力和权威性不言而喻。能够登上百度百科&#xff0c;意味着个人的知名度、成就和社会影响力得到了广泛认可。那么&#xff0c;如何才能让自己上百度百科呢&#xff1f;接下来伯乐网络传媒就来给大家讲解一下。…

MyBatis3源码深度解析(十六)SqlSession的创建与执行(三)Mapper方法的调用过程

文章目录 前言5.9 Mapper方法的调用过程5.10 小结 前言 上一节【MyBatis3源码深度解析(十五)SqlSession的创建与执行(二)Mapper接口和XML配置文件的注册与获取】已经知道&#xff0c;调用SqlSession对象的getMapper(Class)方法&#xff0c;传入指定的Mapper接口对应的Class对象…

MongoDB聚合运算符:$getField

文章目录 语法使用举例包含点号(.)的查询查询以($)开头的字段子文档字段查询 $getField聚合运算符返回文档中指定字段的值&#xff0c;字段名可以包含点.或以$开头。如果不指定&#xff0c;$getField将$$CURRENT作为字段返回。 语法 {$getField: {field: <String>,inpu…

自然语言处理:人机交流的桥梁

引言&#xff1a; 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;作为人机交流的桥梁&#xff0c;在当今数字化社会中扮演着至关重要的角色。它不仅是计算机科学和人工智能领域中的一项重要技术&#xff0c;更是将人类语言与计算机智能相结…

2024年智慧城市、人文发展与区域经济国际会议(ICSCCDRE 2024)

2024年智慧城市、人文发展与区域经济国际会议&#xff08;ICSCCDRE 2024&#xff09; 2024 International Conference on Smart Cities, Cultural Development and Regional Economy 会议简介&#xff1a; 城市经济人文发展是一个综合性的过程&#xff0c;它关注城市在经济、…

C#,图论与图算法,计算无向连通图中长度为n环的算法与源代码

1 无向连通图中长度为n环 给定一个无向连通图和一个数n,计算图中长度为n的环的总数。长度为n的循环仅表示该循环包含n个顶点和n条边。我们必须统计存在的所有这样的环。 为了解决这个问题,可以有效地使用DFS(深度优先搜索)。使用DFS,我们可以找到特定源(或起点)的长度…

字节抖音电商一面

字节抖音电商一面 问的很细&#xff0c;由项目一个小点入手&#xff0c;一直深问。 MVVN与原生js写的优势&#xff08;每个优势一定跟MVVN有关吗&#xff0c;细问&#xff09;http1,2,3的区别——出了个题&#xff0c;问10个请求在tcp的传输下&#xff0c;在不同的http里面各…

十一、MYSQL 基于MHA的高可用集群

目录 一、MHA概述 1、简介 2、MHA 特点 3、MHA 工作原理&#xff08;流程&#xff09; 二、MHA高可用结构部署 1、环境准备 2、安装MHA 监控manager 3、在manager管理机器上配置管理节点&#xff1a; 4、编master_ip_failover脚本写 5、在master上创建mha这个用户来访…