2017-09-01 10 views
1

私は今のところ、hereというものと同じ(现在) "拍数"(BPM)計算機を作成しようとしています。しかし、何らかの理由で、私がテスト・ソングのそのリンクでBPM電卓を使用すると、実際のBPMの0.05以内で終わる、7キー・ストローク内の85.94の実際の値の1 BPM以内になり、一方、私の(本質的に同じコード化された)Vue.jsバージョンでは、はるかに高い(182 - > 126 - > 110)開始し、そこから降りるが、60回のキー押下後でも〜2 BPM、完全な歌、それは約0.37 BPMでまだオフだった。ここでVue.jsのタイミング計算がプレーンJavaScriptのバージョンと一致しません

the plain-JavaScript version at that linkのコードです:

var count = 0; 
var msecsFirst = 0; 
var msecsPrevious = 0; 

function ResetCount() 
    { 
    count = 0; 
    document.TAP_DISPLAY.T_AVG.value = ""; 
    document.TAP_DISPLAY.T_TAP.value = ""; 
    document.TAP_DISPLAY.T_RESET.blur(); 
    } 

function TapForBPM(e) 
    { 
    document.TAP_DISPLAY.T_WAIT.blur(); 
    timeSeconds = new Date; 
    msecs = timeSeconds.getTime(); 
    if ((msecs - msecsPrevious) > 1000 * document.TAP_DISPLAY.T_WAIT.value) 
    { 
    count = 0; 
    } 

    if (count == 0) 
    { 
    document.TAP_DISPLAY.T_AVG.value = "First Beat"; 
    document.TAP_DISPLAY.T_TAP.value = "First Beat"; 
    msecsFirst = msecs; 
    count = 1; 
    } 
    else 
    { 
    bpmAvg = 60000 * count/(msecs - msecsFirst); 
    document.TAP_DISPLAY.T_AVG.value = Math.round(bpmAvg * 100)/100; 
    document.TAP_DISPLAY.T_WHOLE.value = Math.round(bpmAvg); 
    count++; 
    document.TAP_DISPLAY.T_TAP.value = count; 
    } 
    msecsPrevious = msecs; 
    return true; 
    } 
document.onkeypress = TapForBPM; 

// End --> 

そしてここでは、私のバージョンです:

computed: { 
    tappedOutBpm: function() { 
     let totalElapsedSeconds = (this.timeOfLastBpmKeypress - this.timeOfFirstBpmKeypress)/1000.0 
     let bpm = (this.numberOfTapsForBpm/totalElapsedSeconds) * 60.0 
     return Math.round(100*bpm)/100; 
    }, 
}, 
methods: { 
    tapForBPM: function() { 
     let now = new Date; 
     now = now.getTime(); 
     // let now = window.performance.now() 
     if (this.timeOfFirstBpmKeypress === 0 || now - this.timeOfLastBpmKeypress > 5000) { 
      this.timeOfFirstBpmKeypress = now 
      this.timeOfLastBpmKeypress = now 
      this.numberOfTapsForBpm = 1 
     } else { 
      this.timeOfLastBpmKeypress = now 
      this.numberOfTapsForBpm++ 
     } 
    } 
} 

答えて

0

私は、我々のコードの両方をステップでそれを考え出しました。

問題は、私は、すぐにユーザーが実際にそれがではありません最初の時間は、私が数えたいをタップしますが、を打つ、とキーをタップとして1にタップ数を設定したということでした最初のビートはでなく、タップである必要がありますが、は2つで:ビートの開始と終了です。だから私は何をする必要がありますnumberOfTappedOutBeatsに変数の名前を変更し、1ではなく、最初のタップの後に0に設定します。

関連する問題