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

使用javascript读取波形文件数据,并生成动态的波形图

代码如下:

// HTML5 Canvas 动态波形生成器
// 使用JS读取波形文件并生成动态波形// 创建Canvas并设置上下文
const canvas = document.createElement('canvas');
canvas.width = 800;
canvas.height = 400;
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');// 波形数据
let waveform = [];// 加载波形文件数据
async function loadWaveformData(url) {try {const response = await fetch(url);if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}const arrayBuffer = await response.arrayBuffer();const audioContext = new AudioContext();const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);waveform = audioBuffer.getChannelData(0); // 获取左声道数据console.log('Waveform data loaded:', waveform);drawWaveform();} catch (error) {console.error('Error loading waveform data:', error);}
}// 动态波形绘制参数
const waveParams = {sampleRate: 800, // 每帧波形的采样点数offset: 0, // 动态偏移speed: 2 // 波形滚动速度
};// 动态绘制波形
function drawWaveform() {ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.beginPath();const step = Math.max(1, Math.floor(waveform.length / waveParams.sampleRate)); // 每步采样间隔const centerY = canvas.height / 2;for (let i = 0; i < canvas.width; i++) {const sampleIndex = (waveParams.offset + i * step) % waveform.length;const sampleValue = waveform[Math.floor(sampleIndex)];const y = centerY + sampleValue * centerY; // 将样本值映射到画布高度if (i === 0) {ctx.moveTo(i, y);} else {ctx.lineTo(i, y);}}ctx.strokeStyle = '#007BFF';ctx.lineWidth = 2;ctx.stroke();waveParams.offset += waveParams.speed; // 波形滚动requestAnimationFrame(drawWaveform);
}// 加载波形文件(将 `example.wav` 替换为你的文件路径)
loadWaveformData('example.wav');
http://www.lryc.cn/news/512236.html

相关文章:

  • 服务器系统维护与安全配置
  • 大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!
  • Spring Boot自定义注解获取当前登录用户信息
  • js创建二维空数组
  • AF3 checkpoint_blocks函数解读
  • 下载并使用CICFlowMeter提取网络流特征(Windows版本)
  • 深入了解JSON-LD:语义化网络数据的桥梁
  • 分布式 IO 模块助力冲压机械臂产线实现智能控制
  • webrtc源码编译【linux/安卓】
  • 亚矩阵云手机
  • Flink状态编程
  • 【Django篇】--动手实现路由模块化与路由反转
  • 多元统计分析练习题3
  • windows remote desktop service 远程桌面RDS授权激活
  • 6-pandas数据读取
  • 【Logback详解】
  • Flume的概念和原理
  • 初始nginx
  • vulnhub靶场 Empire LupinOne
  • 6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]
  • 使用Lodash工具库的orderby和sortby进行排序的区别
  • CSS面试题|[2024-12-24]
  • flask-admin 在modelview 视图中重写on_model_change 与after_model_change
  • Excel粘贴复制不完整的原因以及解决方法
  • 【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)
  • Cocos Creator 3.8.5 正式发布,更小更快更多平台!
  • Python中构建终端应用界面利器——Blessed模块
  • Android 15 状态栏闹钟图标不显示问题修复
  • 数据采集背后的效率革命:如何优化你的爬虫性能
  • 【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题