fix(metronome): 修复第二拍延迟两倍间隔的 bug

drift correction 逻辑写反了:
  drift = now - nextTickAt   (此时为负数,下一拍还在未来)
  nextDelay = intervalMs - drift    = 2 × intervalMs

正确做法直接计算"目标时刻距现在还有多久":
  nextDelay = nextTickAt - now  

现象:点击开始,第一拍立即响,但第二拍要等两倍拍间隔才响。
现在第一拍响完就立刻按 BPM 节奏进入第二拍。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-25 11:44:06 +08:00
co-authored by Cursor
parent 71a3c63182
commit 8f14f3190e
+1 -2
View File
@@ -142,8 +142,7 @@ export function useMetronome(options: MetronomeOptions = {}) {
beatIndex.value++
nextTickAt += intervalMs.value
const drift = Date.now() - nextTickAt
const nextDelay = Math.max(0, intervalMs.value - drift)
const nextDelay = Math.max(0, nextTickAt - Date.now())
timer = setTimeout(tick, nextDelay)
}