2016-06-25 7 views
0

Ich versuche, ein Audio-Eingang + Beatdetektor Beispiel zusammenzustellen, so dass ich die BPM eines Tracks durch meine Linie (oder sogar Mikrofon-Eingang) spielen könnte.Erkennen von BPM der Audioeingabe mit Javascript?

Leider habe ich nicht genau verstanden, wie der "time" -Parameter von der "process" -Methode verwendet werden soll (speziell in diesem Fall, wo ich nicht unbedingt weiß, wann sich die Spur ändert, usw.).

Hier ist ein Code, den ich zusammengestellt habe, um dieses Puzzle mit der schönen Bibliothek p5.js zu lösen. Bitte lassen Sie mich wissen, wie ich das optimieren könnte, um den gewünschten Effekt zu erzielen.

<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> 

Antwort

0

Nach the documentation on the BeatDetektor library die process() Funktion nimmt ein Argument in Sekunden.

Meine Vermutung wäre, dass das Argument die Sekunden seit dem Beginn des Liedes ist, kein absolutes Datum. Im Moment verteilst du die Anzahl der Millisekunden seit 1970. Ich kenne keine Songs, die so lang sind.

Here ist ein Beispiel für die Verwendung der process()-Funktion, um 30 Sekunden eines Songs zu simulieren.

Es sieht so aus, als müssten Sie die Startzeit des Songs verfolgen und dann berechnen, wie viel Zeit vergangen ist, wenn Sie die process()-Funktion aufrufen. Verarbeitung hat eine handliche millis() Funktion, die Ihnen helfen könnte.