【音频可视化】通过canvas绘制音频波形图

前言

这两天写项目刚好遇到Ai对话相关的需求,需要录音功能,绘制录制波形图,写了一个函数用canvas实现可视化,保留分享一下,有需要的直接粘贴即可,使用时传入一个1024长的,0-255大小的Uint8Array类型音频数据源

<canvas ref="canvasRef" width="800" height="200"></canvas>
const drawWaveform = (audioArray) => {const canvas = canvasRef.value;if (!canvas || !audioArray) return;const ctx = canvas.getContext('2d');if (!ctx) return;const width = canvas.width;const height = canvas.height;const bufferLength = audioArray.length;// 清除画布ctx.clearRect(0, 0, width, height);// 设置线条样式ctx.strokeStyle = '#4f35b5';ctx.lineWidth = 2;ctx.beginPath();const sliceWidth = width / bufferLength;let x = 0;for (let i = 0; i < bufferLength; i++) {const value = audioArray[i] / 255.0;  // 将0-255的值归一化为0-1const y = value * height;if (i === 0) {ctx.moveTo(x, y);} else {ctx.lineTo(x, y);}x += sliceWidth;}ctx.stroke();
};

通过requestAnimationFrame调用即可

示例:

// 持续更新波形
const updateWaveform = () => {ensureRecorder(() => {audioArray.value = recorder!.getRecordAnalyseData();drawWaveform(audioArray.value);animationFrameId = requestAnimationFrame(updateWaveform);});
};

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

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

相关文章

豆包MarsCode 合伙人计划限时招募中,推广最高赢万元现金!

豆包MarsCode 合伙人计划正式上线啦&#xff01;作为官方推出的推广激励项目&#xff0c;豆包MarsCode 编程助手号召和鼓励所有用户向我们推荐新用户。 现在正式开启首轮合伙人招募&#xff0c;诚邀各位有意愿推广普及 AI 编程产品的伙伴成为我们的合伙人&#xff0c;全国限量…

jmeter输出性能测试报告(常见问题处理与处理)

问题1&#xff1a;报错 WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows R 意思是&#xff1a;报没有权限 处理&#xff1a; 操作非gui生成测试报告的方法 cmd界面进入到 jmeter的bin目录 jmeter –n –t -l -e –o …

对后端返回的日期属性进行格式化(扩展 Spring MVC 的消息转换器)

格式化之前 格式化之后&#xff1a; 解决方式 方式一 在属性中加上注解&#xff0c;对日期进行格式化 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//JsonFormat(pattern &quo…

“校友会综合服务平台:连接校友与母校的桥梁”

在当今信息化时代&#xff0c;校友会作为校友与母校之间的重要桥梁&#xff0c;其功能与服务不断拓展和深化。为了更好地满足校友的需求&#xff0c;构建一个高效、便捷的校友服务体系&#xff0c;我们开发了一款基于FastAdmin ThinkPHP Uniapp技术架构的校友会综合服务平台。…

什么是汽车中的SDK?

无论是在家里使用预制菜包做一顿大厨级别的晚餐&#xff0c;还是使用IKEA套组装配出时尚的北欧风桌子&#xff0c;我们都熟悉这样一种概念&#xff1a;比起完全从零开始&#xff0c;使用工具包可以帮助我们更快、更高效地完成一件事。 在速度至关重要的商业软件领域&#xff0…

Linux中各种查看

查看命令 ls ls &#xff1a;简单列出当前目录下的文件和子目录。 ls 目录路径 &#xff1a;列出指定目录下的内容。 ls -l &#xff1a;以长格式显示详细信息&#xff0c;包括文件权限、所有者、大小、修改时间等。 ls -a &#xff1a;显示包括隐藏文件&#xff08;以 . 开…

利用FnOS搭建虚拟云桌面,并搭建前端开发环境(一)

利用FnOS搭建虚拟云桌面&#xff0c;并搭建前端开发环境 一 飞牛FnOS官方文档一、安装FnOS【Win11系统】1.下载VirtualBox2.下载FnOS镜像3.创建虚拟机4.启动完成后&#xff0c;会进入这样一个界面&#xff0c;这个基本上后续就后台了 本人在网上冲浪了很久&#xff0c;一直也没…

DGX的优势

NVIDIA DGX 的 AI 领导力 文章目录 前言一、概述推动跨行业的 AI 创新二、优势客户体验到哪些好处?1. 利用生成式 AI 释放研究人员的潜力2. 加快现代应用程序的上市时间3. 利用 AI 改善客户体验三、性能性能很重要1. 为世界上最先进的超级计算机提供动力2. 打破世界纪录3. 提高…

Apache Flink 和 Apache Kafka

Apache Flink 和 Apache Kafka 都是大数据生态系统中非常重要的工具&#xff0c;但它们的作用和应用场景有所不同。下面将分别介绍两者的主要特性和它们之间的异同点。 Apache Kafka 作用&#xff1a; 消息队列&#xff1a;Kafka 主要作为消息队列使用&#xff0c;用于解耦生…

ES6总结

1.let和const以及与var区别 1.1 作用域 var&#xff1a; 变量提升&#xff08;Hoisting&#xff09;&#xff1a;var 声明的变量会被提升到其作用域的顶部&#xff0c;但赋值不会提升。这意味着你可以在声明之前引用该变量&#xff08;但会得到 undefined&#xff09;。 con…

CSS元素显示类型

display 属性是 CSS 中最重要的属性之一&#xff0c;主要用来控制元素的布局&#xff0c;通过 display 属性您可以设置元素是否显示以及如何显示。 根据元素类型的不同&#xff0c;每个元素都有一个默认的 display 属性值&#xff0c;例如<div>默认的 display 属性值为 …

电脑端视频通过PCIE到FPGA端转UDP网络视频输出,基于XDMA+PHY芯片架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我这里已有的以太网方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存UDP视频组包发送UDP协议栈MAC数据缓冲FIFO组Tri Mode E…

STM32编码器接口

一、概述 1、Encoder Interface 编码器接口概念 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号&#xff0c;根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT自增或自减&#xff0c;从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用…

C#垃圾回收机制详解

本文详解C#垃圾回收机制。 目录 一、C#垃圾收集器定义 二、C#中的垃圾收集器特点 三、垃圾回收触发条件 四、常见的内存泄漏情况 五、高性能应用程序的垃圾回收策略 六、最佳实践和建议 七、实例 一、C#垃圾收集器定义 int、string变量,这些数据都存储在内存中,如果…

Nginx应用配置实战

Nginx通用部署 Nginx常见参数介绍 Nginx 配置文件中的指令和参数决定了它的行为。下面详细介绍一些常见的 Nginx 参数&#xff0c;以帮助你更好地理解和配置 Nginx。 1. worker_processes worker_processes auto;作用&#xff1a;设置 Nginx 处理请求的工作进程数量。auto …

[搜索] 质数

题目描述 给定 n n n 个正整数&#xff0c;将它们分组&#xff0c;使得每组中任意两个数互质。至少要分成多少个组&#xff1f; 在满足最少的组数的情况下&#xff0c;使得元素个数最多的那一组的元素个数尽可能的少。 输入格式 第一行 1 1 1 个数 n n n。 接下来 n n n…

CSS 3D转换

在 CSS 中&#xff0c;除了可以对页面中的元素进行 2D 转换外&#xff0c;您也可以对象元素进行 3D转换&#xff08;将页面看作是一个三维空间来对页面中的元素进行移动、旋转、缩放和倾斜等操作&#xff09;。与 2D 转换相同&#xff0c;3D 转换同样不会影响周围的元素&#x…

CVE-2024-36971漏洞修复----Debian 10.13 内核升级

CVE-2024-36971漏洞修复---Debian 10.13 内核升级 1. 下载内核2. 安装依赖包3. 二进制安装3.1 上传3.2 解压3.3 修改配置文件3.4 编译3.5 安装内核及模块 4. 重启服务器并确认升级成功 1. 下载内核 到kernel.org下载新版的Kernel 由于开发那边不想让Kernel跨大版本,所以就升级…

IDEA使用技巧

在使用IntelliJ IDEA&#xff08;简称IDEA&#xff09;这类集成开发环境&#xff08;IDE&#xff09;时&#xff0c;掌握一些高效的使用技巧和安装合适的插件可以显著提升开发效率。以下将从IDEA的使用技巧和插件推荐两个方面进行详细阐述。 一、IDEA使用技巧 1. 快捷键操作 …

docker tar包安装 docker-26.1.4.tgz

一、docker安装 1.先将docker安装包&#xff08;docker-26.1.4.tgz&#xff09;拷贝到DM系统中。 下载地址 Index of linux/static/stable/x86_64/ 1.先将docker安装包&#xff08;docker-26.1.4.tgz&#xff09;拷贝到DM系统中。 2.解压docker安装包 tar zxf docker-26.1.…