2016-06-25 40 views
0

我想把音頻輸入+ beatdetektor的例子放在一起,這樣我就可以計算通過我的線路(甚至是麥克風輸入)播放的音軌的BPM。使用javascript檢測音頻輸入的bpm?

不幸的是,我不明白應該如何使用「process」方法中的「time」參數(特別是在那種情況下,我不一定知道軌道何時更改等)。

這裏有一些代碼,我試圖解決這個難題使用可愛的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

根據the documentation on the BeatDetektor library,所述process()函數以參數。

我的猜測是參數是自歌曲開始以來的秒數,而不是絕對日期。現在你傳遞了自1970年以來的毫秒數。我不知道有那麼長的歌曲。

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

它看起來像你將不得不跟蹤歌曲的開始時間,然後計算調用process()函數後經過了多少時間。處理有一個方便的millis()函數可能會幫助你。