基本上,我试图通过圆波纹爆炸来进行音频可视化。我不确定如何准确命名它,但是它看起来像这样:https://codepen.io/alek/pen/EyyLgp,除了我正在寻找更多类似的名称,当您单击一个圆圈时,它会出现,扩展和消失。它不一定必须是实心圆。

这是我的音频可视化的js代码(注意:我确实从Nick Jones-网站https://codepen.io/nfj525/pen/rVBaab那里获取了代码,我将他的出色音频可视化归功于他)

let file = document.querySelector("choose-file");
let audio = document.querySelector("audio-player");

file.onchange = function() {
  let files = this.files;
  audio.src = URL.createObjectURL(files[0]);
  audio.load();
  audio.play();
  let context = new AudioContext();
  let src = context.createMediaElementSource(audio);
  let analyser = context.createAnalyser();

  let canvas = document.querySelector("canvas");
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
  let ctx = canvas.getContext("2d");

  src.connect(analyser);
  analyser.connect(context.destination);

  analyser.fftSize = 256;

  let bufferLength = analyser.frequencyBinCount;
  console.log(bufferLength);

  let dataArray = new Uint8Array(bufferLength);

  let WIDTH = canvas.width;
  let HEIGHT = canvas.height;

  let barWidth = (WIDTH / bufferLength) * 2.5;
  let barHeight;
  let x = 0;

  function renderFrame() {
    requestAnimationFrame(renderFrame);

    x = 0;

    analyser.getByteFrequencyData(dataArray);

    ctx.fillStyle = "#000";
    ctx.fillRect(0, 0, WIDTH, HEIGHT);

    for (let i = 0; i < bufferLength; i++) {
      barHeight = dataArray[i];

      let r = barHeight + (25 * (i/bufferLength));
      let g = 250 * (i/bufferLength);
      let b = 50;

      ctx.fillStyle = "rgb(" + r + "," + g + "," + b + ")";
      ctx.fillRect(x, HEIGHT - barHeight, barWidth, barHeight);

      x += barWidth + 1;
    }
  }

  audio.play();
  renderFrame();
};

因此,目前这种音频可视化效果是根据音乐创建矩形,但是我想改为将其改为圆形。因此,在 Canvas 上,圆圈将随机出现在屏幕上,并具有这种波纹,爆炸效果,消失并出现一个新的圆圈。我以为也许可以用fillRect()代替arc(),但是我意识到背后还有更多逻辑。有谁知道如何将矩形更改为圆形?

最佳答案

通常我使用的是p5.js,我认为p5.js对于类似的东西非常有用,如果您要使用它,这只是一个建议,此链接为:ojita

关于javascript - 尝试使用Canvas上的圆形波纹和JavaScript进行音频可视化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48681639/

10-11 12:55