我正在尝试将音频输入+ 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>
答案 0 :(得分:0)
根据the documentation on the BeatDetektor library,process()
函数在秒中采用参数。
我的猜测是,这个参数是自歌曲开始以来的秒数,而不是绝对日期。现在你自1970年以来以毫秒为单位通过。我不知道任何那么久的歌曲。
Here是使用process()
函数模拟30秒歌曲的示例。
您似乎必须跟踪歌曲的开始时间,然后计算调用process()
功能时经过的时间。处理有一个方便的millis()
功能,可以帮助你。