瀏覽器節拍器的精準度奠基於一個簡單的公式:60 除以 BPM 得到每一次敲擊的秒數,再加上瀏覽器排程器所帶來的時間抖動。在 60 BPM 時,間隔正好是一秒;120 BPM 時是半秒;240 BPM 時則是四分之一秒。這些數字來自於每分鐘拍數的定義,因此任何誠實的工具所回報的長期節奏都會與你輸入的數值一致。各個工具之間的差異,在於每一次實際敲擊有多接近其理論時間。被放在背景的分頁、忙碌的 CPU 執行緒、省電模式、藍牙音訊路徑,或是作業系統本身的時脈,都可能將已排程的回呼延遲幾毫秒。Online Metronome 透過 Web Audio API 來排程每一次敲擊,因此比 JavaScript 的 setInterval 計時器擁有更緊密的時序,但它終究只是瀏覽器的時鐘,而不是取樣精準的錄音室等級時鐘。在長時間穩定的平均節奏與精確的瞬時敲擊位置之間的這種區別,正是線上節拍器精準度問題的核心,也正是它能告訴一位音樂人這個工具是否足以應付眼前工作的關鍵。

online metronome accuracy
Online Metronome 精準度:瀏覽器分頁中的時序

瀏覽器節拍器背後的數學

無論是實體或數位節拍器,都從相同的算術推導出其間隔。一分鐘有 60 秒,而 BPM 的數值告訴你這一分鐘內必須容納多少拍,因此以秒為單位的間隔正好就是 60 除以 BPM。Online Metronome 直接實作了這個除法。它將 BPM 驗證為介於 30 到 240 之間的整數,然後用 60 除以它,並依此結果排程下一次回呼。由於這個計算過程與舞臺節拍器或數位硬體機型所使用的相同,因此長時間下來的平均節奏不會從你所設定的值偏離。

下表顯示在工具完整的 30–240 範圍內,代表性 BPM 數值所對應的精確間隔。

BPM間隔(秒)60 秒內的敲擊次數
302.000030
401.500040
601.000060
900.666790
1200.5000120
1600.3750160
2000.3000200
2400.2500240

這些不是測量值,而是直接由公式計算出來的結果。60 秒內的敲擊次數欄位就是 60 除以間隔。表格無法顯示的是抖動——也就是每一次個別敲擊落在該理想時間附近的微小變化。瀏覽器端的精準度,是數學讓位於排程現實之處。

影響瀏覽器分頁中時序精準度的因素

瀏覽器並不是即時作業系統。當你要求它在 0.5 秒後排程一個回呼時,底層的排程器會嘗試履行這個請求,但有幾個常見的狀況會讓實際呼叫被推遲。

  • 背景分頁。大多數瀏覽器會對你沒有在查看的分頁中的計時器進行節流,因此當你在閱讀其他分頁時,正在執行的節拍器可能會遺失拍點或拉長間隔。
  • 省電模式。使用電池的筆電、處於低耗電模式的手機,以及某些桌機的電源設定檔,同樣會降低計時器的解析度。
  • 忙碌的主執行緒。如果該分頁正在解碼音訊、渲染複雜的網頁,或執行吃重的 JavaScript,下一個已排程的回呼便可能必須等到執行緒空閒時才能執行。
  • 藍牙與無線音訊。音訊路徑本身就會增加延遲,而這份延遲在封包之間並非完全穩定。
  • 作業系統的排程。macOS、Windows、Linux 以及行動作業系統,都各自執行一套瀏覽器所繼承的時脈管理機制。
  • 音訊緩衝區大小。較小的緩衝區代表較低的延遲,但會帶來更大的 CPU 壓力;較大的緩衝區則讓播放更穩定,但會產生一個播放端無法縮小的固定偏移量。

對大多數的練習工作而言,以上這些都不構成問題。節奏會維持得夠接近你所設定的 BPM,讓你能夠練熟一首曲子、進行音階練習,或排練節奏訓練。真正會受到影響的,是在你需要與其他裝置進行取樣精準對齊的場合——例如同一台機器上執行的 DAW、硬體合成器,或是你匯入的背景音軌。這些工作流程需要瀏覽器無法提供的共用時鐘。

Online Metronome 如何產生每一次敲擊

Online Metronome 完全在目前的瀏覽器分頁中執行。它不會上傳音訊、要求麥克風存取權限,也不會為了發聲而聯繫伺服器。每一次敲擊都是一個新建立的振盪器,搭配一條短暫的增益包絡曲線,並透過 Web Audio API 的 AudioContext 來排程。每小節的第一拍以 1320 Hz 播放,其餘各拍則以 880 Hz 播放,讓敲擊聲本身就帶有一個耳朵能鎖定的重音記號,而不需要額外調整任何設定。這些頻率只是用來標示第幾拍是第一拍的產品提示,並非對於標準化 concert pitch、音名、調律系統或理想練習音色的主張。

增益從保守的 0.2 開始,以指數衰減至 0.001,歷時 50 毫秒;振盪器在 60 毫秒後停止,以避免舊節點在記憶體中堆積。視覺化的計數器會依所選的小節長度安全地循環,確保顯示的拍點永遠與實際發聲一致。間隔僅由驗證過的 BPM 計算一次,下一次的 JavaScript 回呼便依此間隔排程。Web Audio 排程——詳述於 W3C 的 Web Audio API 規格——比單純的 setInterval 計時器更為緊密,但仍會受到上述相同的節流與延遲狀況影響。依據 MDN 對於 OscillatorNode 的說明文件,每一次敲擊都是一個全新的節點,當其包絡曲線結束時,音訊內容會自動將其清理掉。

將 Online Metronome 設定好以進行穩定的練習

  1. 在練習過程中會一直停留在前景的瀏覽器分頁中,開啟 Online Metronome。
  2. 在 BPM 欄位中輸入介於 30 到 240 之間的整數。請勿加上小數點、符號、空格或單位;介於 30 到 240 之間、未含額外字元的整數,是唯一被接受的值。
  3. 從 1 到 12 中選擇一個符合你正在練習的拍號的每小節拍數。
  4. 按下 Start。瀏覽器會建立或重複使用一個 AudioContext,並立即排程第一次敲擊。
  5. 留意第一拍較高的音高,接著讓小節中的其餘各拍以較低的音高敲擊。
  6. 開始演奏。若你正戴著耳機,請讓分頁維持在前景,並先把裝置音量調低。
  7. 結束時,請在離開頁面前按下 Stop。Stop 會關閉音訊內容、清除下一個已排程的敲擊、重設視覺化的拍點計數器,並將工具回復到停止狀態。

在 Start 之後編輯任一數值,會在新值生效前先停止播放,如此可避免顯示的節奏與實際運作的計時器之間產生落差。

在 60 秒內驗證敲擊速度

若你想知道瀏覽器實際提供的是什麼樣的表現,可以進行一次一分鐘的計數,並與時鐘或手機碼錶做比對。建議使用 120 BPM 以便計算:間隔為 60 除以 120,等於每 0.5 秒一次敲擊,60 除以 0.5 等於一分鐘內有 120 次敲擊。啟動節拍器,在第一次可聽見的敲擊時同步啟動碼錶,然後一路數到碼錶顯示 60.0 秒為止。這個計數會直接告訴你實際得到的節奏:120 次代表 120 BPM,118 次代表工具大約慢了 1.7%,122 次則代表大約快了 1.7%。

請在前景、且該分頁中沒有其他開啟內容的狀態下進行測試,以取得最乾淨的讀數。若改在背景分頁中重複,你很可能會看到計數下滑,因為瀏覽器正在對計時器進行節流。這單一項測試——在 60 BPM(每秒一次敲擊)再以 180 BPM(每 0.333 秒一次敲擊)各做一次——便能為你勾勒出瀏覽器、裝置與音訊路徑在穩定節奏工作上的實際表現。

線上節拍器無法取代的事物

線上節拍器對自身的定位是坦誠的。Online Metronome 適用於一般練習、音階、節奏訓練、視奏,以及粗略的節奏參考。它並非聽力防護裝置、經校準的聲壓來源、醫療器材,也不是臨床等級的計時儀器。它不主張具備 DAW 同步、MIDI 時脈輸出、節拍速度分析(tap-tempo)、延遲校準、細分拍型態、 swing、polyrhythm,或錄音對齊功能。背景分頁、省電模式、忙碌的主執行緒、藍牙延遲、瀏覽器政策,以及作業系統的排程,都可能讓可聽見的敲擊發生延遲。若你的工作需要與 DAW 的時間軸進行取樣精準的對齊,請改用 DAW 內建的節拍器。若你只是需要一個穩定、節奏已知的脈衝來作為練習依據,那麼 Online Metronome 便是無需安裝軟體或上傳音訊即可取得此功能的簡便方式。