限制波浪的高度 wavesurfer.js

问题描述

在文档中写了波形条的高度。 大于 1 的数字会增加波形条的高度。是否有可能将波形条限制为 1 或更低?

由于我自己无法找到解决方案,因此将不胜感激

enter image description here

解决方法

深入理解后,我创建了自己的自定义函数来优化波浪的高度

 export const optimizeWavebar = (wave) => {
  let refine = { ...wave };
  var length = 150;
  var start = 0;
  var end = 150;

  let surfer = refine.backend.getPeaks(length,start,end);

  let cloned = [...surfer];

  let max = cloned.sort((a,b) => b - a);

  let height = max[0] > 0.6 ? 0.8 : 3;
  let filteredForm = max[0] > 0.6 ? max[0] : 0.2;

  return {
    data: surfer.map((index) =>
      index >= filteredForm
        ? filteredForm
        : index <= -filteredForm
        ? -filteredForm
        : index
    ),height: height,};
};

 const getRefinedPeak = async (wave,url) => {
    return new Promise((res,rej) => {
      const unOptimized = _.cloneDeep(wave);

      unOptimized.load(url);
      unOptimized.on("ready",function () {
        let response = optimizeWavebar(unOptimized);
        wave.params.barHeight = response.height;
        return res(response.data);
      });
    });
  };

  useEffect(() => {
    if (currentTrack && waveformRef.current) {
      setPlay(false);
      const options = formWaveSurferOptions(
        waveformRef.current,"#BFC9CA",true,4.5
      );

      wavesurfer.current = WaveSurfer.create(options);

      const refinedWavebars = getRefinedPeak(
        wavesurfer.current,currentTrack.url
      );

      refinedWavebars.then((res) => {
        wavesurfer.current.backend.setPeaks(res);
        wavesurfer.current.drawBuffer();
        wavesurfer.current.getArrayBuffer(currentTrack.url,(data) =>
          wavesurfer.loadArrayBuffer(data)
        );
        wavesurfer.current.load(currentTrack.url);

      });
    }

    return () => {
      wavesurfer.current?.destroy();
      setEnableBtn(true);
    };
  },[currentTrack.id]);