如何限制wavesurfer.js的波形条高度不超过1或更低?
如何限制wavesurfer.js波形条高度为1或更低
当然可以实现!要把wavesurfer.js的波形条高度限制在1或更低,你可以根据场景选择两种靠谱的方法:
方法一:通过核心配置参数直接控制
这是最简便的方式,结合两个关键配置就能达成目标:
- 设置
barHeight为1或更小的数值(比如0.5、0.8),这个参数直接控制波形条的基础高度比例 - 开启
normalize: true,它会自动将音频的波形数据归一化到0-1的范围,确保波形条的最大高度不会超出你设置的barHeight值
示例代码:
const wavesurfer = WaveSurfer.create({ container: '#waveform', waveColor: '#4F4A85', progressColor: '#383351', barWidth: 2, barHeight: 1, // 这里设为1或更小的数值 normalize: true, // 关键配置:归一化波形数据到0-1范围 barGap: 1 });
方法二:自定义波形渲染(更灵活的精准控制)
如果基础配置还满足不了你的需求,比如需要针对特定波形点做高度限制,可以通过drawWaveform钩子自定义渲染逻辑,强制把每个波形条的高度限制在1的比例内:
wavesurfer.on('drawWaveform', (ctx, waveform) => { // 遍历所有波形数据点 waveform.forEach((point, index) => { const x = index * (wavesurfer.params.barWidth + wavesurfer.params.barGap); // 强制将高度比例限制在1以内,再乘以基础barHeight const limitedHeightRatio = Math.min(point.y, 1); const height = limitedHeightRatio * wavesurfer.params.barHeight; const y = (wavesurfer.getHeight() - height) / 2; ctx.fillStyle = wavesurfer.params.waveColor; ctx.fillRect(x, y, wavesurfer.params.barWidth, height); }); });
额外提示
如果你的音频文件本身振幅超过1,normalize: true会自动将所有振幅缩放到0-1的范围,从根源上避免波形条被过度拉伸。
内容的提问来源于stack exchange,提问作者Muhammad Anas Khan
相关产品推荐
相关产品推荐

