You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用videojs-wavesurfer或wavesurfer.js生成多峰值颜色波形图

videojs-wavesurfer波形峰值多色显示实现方案

可以实现该效果。videojs-wavesurfer基于wavesurfer.js封装,完全继承了底层库的波形样式自定义能力,可根据需求实现按振幅高度、按时间段两种多色显示逻辑。

按振幅高度实现波峰多色(对应示例效果)

核心原理是通过Canvas渐变对象映射不同振幅高度的颜色,波峰高的区域对应一种颜色,波谷低的区域对应另一种颜色,实现峰值变色效果,示例代码如下:

  1. 定义渐变生成函数,根据波形高度设置不同色阶:
function generateMultiColorWave() {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  // 垂直渐变对应波形垂直方向的振幅高度
  const gradient = ctx.createLinearGradient(0, 0, 0, 120);
  // 低振幅(波谷)显示绿色
  gradient.addColorStop(0, '#34D399');
  // 中振幅显示黄色
  gradient.addColorStop(0.5, '#FBBF24');
  // 高振幅(波峰)显示红色
  gradient.addColorStop(1, '#EF4444');
  return gradient;
}
  1. 初始化videojs时传入自定义颜色配置:
const videoPlayer = videojs('videoElement', {
  controls: true,
  plugins: {
    wavesurfer: {
      backend: 'MediaElement',
      waveColor: generateMultiColorWave(),
      // 其余基础配置按需设置即可
      barWidth: 2,
      barGap: 1,
      barRadius: 2,
      cursorWidth: 1
    }
  }
});

按时间段实现不同区域多色

如果需要给不同时间区间的波形设置独立颜色,可配合wavesurfer的regions插件实现:

const videoPlayer = videojs('videoElement', {
  controls: true,
  plugins: {
    wavesurfer: {
      backend: 'MediaElement',
      waveColor: '#9CA3AF',
      plugins: [
        // 引入regions插件配置分段颜色
        WaveSurfer.regions.create({
          regions: [
            {
              start: 0,
              end: 5,
              waveColor: '#EF4444',
              drag: false,
              resize: false
            },
            {
              start: 5,
              end: 15,
              waveColor: '#FBBF24',
              drag: false,
              resize: false
            }
          ]
        })
      ]
    }
  }
});

注意事项

如果配置后样式未生效,可监听waveReady事件后手动调用videoPlayer.wavesurfer.drawBuffer()重新渲染波形即可。

内容的提问来源于stack exchange,提问作者Dinesh Nadimpalli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:57:03