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

代码如下:

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');
相关推荐
无名之逆15 分钟前
搭建SSL邮件服务器
开发语言·网络·网络协议·http·https·ssl·request
等一场春雨21 分钟前
Java 21 使用新的日期和时间 API (java.time) 计算当前日期是某活动起始时间的第几天
java·开发语言
鹿屿二向箔37 分钟前
JavaScript (JS) 前端开发
javascript
AI向前看1 小时前
T-SQL语言的正则表达式
开发语言·后端·golang
Z3r4y1 小时前
【Web】极简&快速入门Vue 3
前端·javascript·vue.js·vue3
KeyPan1 小时前
【数据结构与算法:五、树和二叉树】
java·开发语言·数据结构·人工智能·算法·机器学习·计算机视觉
工业甲酰苯胺1 小时前
Java Web学生自习管理系统
java·开发语言·前端
Fre丸子_1 小时前
ffmpeg之yuv格式转h264
开发语言·qt·ffmpeg
晚上睡不着!1 小时前
Java程序命令行调用Python矩阵算法
java·开发语言·python·numpy
哥屋恩05281 小时前
C#中鼠标点击获取Chart图形上的坐标值
开发语言·c#