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

瀏覽器節拍器背後的數學
無論是實體或數位節拍器,都從相同的算術推導出其間隔。一分鐘有 60 秒,而 BPM 的數值告訴你這一分鐘內必須容納多少拍,因此以秒為單位的間隔正好就是 60 除以 BPM。Online Metronome 直接實作了這個除法。它將 BPM 驗證為介於 30 到 240 之間的整數,然後用 60 除以它,並依此結果排程下一次回呼。由於這個計算過程與舞臺節拍器或數位硬體機型所使用的相同,因此長時間下來的平均節奏不會從你所設定的值偏離。
下表顯示在工具完整的 30–240 範圍內,代表性 BPM 數值所對應的精確間隔。
| BPM | 間隔(秒) | 60 秒內的敲擊次數 |
|---|---|---|
| 30 | 2.0000 | 30 |
| 40 | 1.5000 | 40 |
| 60 | 1.0000 | 60 |
| 90 | 0.6667 | 90 |
| 120 | 0.5000 | 120 |
| 160 | 0.3750 | 160 |
| 200 | 0.3000 | 200 |
| 240 | 0.2500 | 240 |
這些不是測量值,而是直接由公式計算出來的結果。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 設定好以進行穩定的練習
- 在練習過程中會一直停留在前景的瀏覽器分頁中,開啟 Online Metronome。
- 在 BPM 欄位中輸入介於 30 到 240 之間的整數。請勿加上小數點、符號、空格或單位;介於 30 到 240 之間、未含額外字元的整數,是唯一被接受的值。
- 從 1 到 12 中選擇一個符合你正在練習的拍號的每小節拍數。
- 按下 Start。瀏覽器會建立或重複使用一個 AudioContext,並立即排程第一次敲擊。
- 留意第一拍較高的音高,接著讓小節中的其餘各拍以較低的音高敲擊。
- 開始演奏。若你正戴著耳機,請讓分頁維持在前景,並先把裝置音量調低。
- 結束時,請在離開頁面前按下 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 便是無需安裝軟體或上傳音訊即可取得此功能的簡便方式。