使用javascript检测音频输入的bpm?

时间:2016-06-25 14:40:29

标签: javascript audio p5.js

我正在尝试将音频输入+ beatdetektor示例放在一起,这样我就可以计算通过我的线路播放的曲目的BPM(甚至麦克风输入)。

不幸的是,我并不确切地理解应该如何使用“process”方法中的“time”参数(特别是在那种情况下,我不一定知道轨道何时发生变化等)。 / p>

以下是我使用可爱的p5.js库试图解决这个难题的一些代码,请让我知道如何调整它以达到预期的效果。

<script src="js/p5-zip/p5.js"></script>
<script src="js/p5-zip/addons/p5.sound.js"></script>

<script src="js/beatdetektor-master/beatdetektor.js"></script>

<script>

  // beatdetektor stuff

  bd_med = new BeatDetektor(85,169);

  vu = new BeatDetektor.modules.vis.VU();
  kick_det = new BeatDetektor.modules.vis.BassKick();

  // p5 stuff
  mic = new p5.AudioIn();
  mic.start();
  fft = new p5.FFT();
  fft.setInput(mic);

  funk = function(){
    spectrum = fft.analyze();

    bd_med.process( (new Date).getTime(), spectrum)
  }

  // analyse with 60 frames, we could maybe use requestAnimationFrame here
  setInterval( funk, 1000/60 )

</script>

1 个答案:

答案 0 :(得分:0)

根据the documentation on the BeatDetektor libraryprocess()函数在中采用参数。

我的猜测是,这个参数是自歌曲开始以来的秒数,而不是绝对日期。现在你自1970年以来以毫秒为单位通过。我不知道任何那么久的歌曲。

Here是使用process()函数模拟30秒歌曲的示例。

您似乎必须跟踪歌曲的开始时间,然后计算调用process()功能时经过的时间。处理有一个方便的millis()功能,可以帮助你。