Takafumi Horiuchi

會搏動的節拍器

概要

畫面中央的圓配合每次喀噠聲搏動,並呈現節拍的強弱。我製作了這款無廣告、不需帳號,也沒有設定頁面的 iPhone 節拍器。

節拍器畫面。黑色螢幕中央是白色圓,上方有四個表示節拍的點,下方排列著 120 BPM 和 −/+。圓隨每一拍膨脹,再恢復原狀。
這個互動畫面使用與 App 相同的公式,以 120 BPM、每小節四拍運作。輕點圓即可停止。

我為自己的次中音薩克斯風練習製作了這個工具。打開 App 就能立即開始,即使喀噠聲不易聽清,也能看見節拍。規劃、設計、SwiftUI 實作與節拍聲合成,都由我獨立完成。

操作:直接觸碰想改變的項目

螢幕上只有節拍的點、圓和速度數字。沒有選單,也沒有說明文字;想改變什麼,就直接觸碰它。

停止時的畫面。中央是淺灰色圓,疊著播放三角形。上方有四個點,下方有 120 BPM 和 −/+,左上角有一個小小的 ⓘ。
ⓘ
開啟支援頁面。
節拍圓點
輕點可增加一拍,每小節可設定一至七拍。也可以滑動增減拍數。
圓
輕點開始或停止。長按後,可跟著歌曲敲擊來設定速度。
速度
拖曳可調快或調慢速度,慢慢移動可做精細調整。輕點 − 或 +,每次改變 1 BPM。
停止時的畫面。螢幕上的文字只有數字和「BPM」。

搏動:配合節拍聲的時間與強弱

App 依據 iOS 回報的音訊輸出延遲,調整圓的搏動時間,使其與節拍聲對齊。藍牙耳機可能帶來約 0.1–0.3 秒的延遲。圓的膨脹幅度與節拍聲的音量成正比:第一拍音高較高、音量較大,搏動幅度也明顯較大。

一小節四拍的點擊音與圓的大小曲線。每次點擊時,大小曲線立即上升;第一拍達到原來的1.25倍,第2–4拍達到1.15倍,隨後略微低於1倍,再恢復。
120 BPM、每小節四拍時,一個小節內的節拍聲(填色區域)與圓的大小(線條)。圓在聲音開始後 0.02 秒達到最大,接著像果凍一樣收縮至略小於靜止大小,再恢復平穩。

音訊執行緒以取樣點為精度安排每一拍。時間計算避免了誤差累積,即使連續播放一小時,偏差仍在 0.5 個取樣點以內。

「0.5 個取樣點」這項數值的適用範圍與計算條件仍待確認。它不應被解讀為聲音抵達聆聽者的時間測量,也不代表與螢幕顯示同步的精度。

敲擊定速:敲擊時保持安靜

長按圓,它就會像果凍一樣晃動。跟著歌曲或心中想要的速度敲擊:觸碰處會凹陷、晃動,再彈回原狀,並以觸覺回饋讓你感受節奏。

在圓的上緣敲擊一次後的六格輪廓。0.03秒時上緣凹陷,0.08秒開始恢復,0.17秒和0.3秒時縱橫略有變形,1.3秒時恢復正圓。
在圓的上緣敲擊一次後的輪廓,使用與 App 相同的公式繪製。虛線表示正圓。
開發中的 App 畫面。敲擊定速模式下,圓為灰色,下方開啟日文的「果凍調整」面板,包含「彈性(振盪速度):每秒 3.6 次」與「黏性(振盪衰減方式):0.10」等滑桿及說明。
我用僅在開發版本中提供的面板調整晃動方式。一邊拖動滑桿改變彈性、黏性等10個數值,一邊實際敲擊圓來確認手感。也比較了「布丁」「蕨餅」和「偏液體」的效果,最後選用回彈明顯、約0.9秒平息的「果凍」作為預設值。

App 刻意在敲擊時保持無聲。若每次敲擊都播放聲音,藍牙的延遲就會變得可聞,並與節拍器的喀噠聲重疊。停止敲擊後,App 以你設定的速度播放節拍聲,從幾乎聽不見的音量開始,在六秒內逐漸提高至正常音量。

五次敲擊後,表示震動的點逐漸縮小,點擊音的直條則從幾乎聽不見的高度開始,在6秒內逐漸升高。
以120 BPM敲擊5次後停手。從下往上依序是敲擊、震動(越小越弱)、點擊音(越高越響)。音量按分貝均勻增加,不會從微弱聲音突然變響。

聲音:選擇薩克斯風演奏中仍聽得見的音高

點擊音由正弦波合成,不使用音訊檔案。我製作了試聽比較頁面,一邊吹次中音薩克斯風,一邊透過 iPhone 揚聲器進行了3輪比較,最後選擇1875 Hz和1250 Hz,即原始頻率的1.25倍。它們高於薩克斯風能量最集中的頻段,又低於容易刺耳的頻段。

從100 Hz到10 kHz的頻率軸。次中音薩克斯風的頻段位於低頻側,2.5–4 kHz為容易刺耳的頻段。1250 Hz和1875 Hz的點擊音位於兩者之間,原始的1000 Hz和1500 Hz以虛線標出。
填色區域是次中音薩克斯風能量集中的頻段(越往右越弱),斜線區域是容易刺耳的2.5–4 kHz。虛線為原始聲音(1000/1500 Hz),實線為最後選擇。線條高度表示音量。

音高較高、持續時間較長,以及加入泛音的版本都比較容易聽見。但我最後仍選擇保有柔和、中性電子音色的聲音。

保持簡單:省略的功能

我省略了可能讓人猶豫的選項。每移除一項功能前,都先確認 App 沒有它是否仍能正常發揮作用。

廣告、追蹤與帳號
從一開始就排除這些項目。App 本身不會發起網路請求。
設定頁面
所有操作在一個畫面內完成。
音色選擇
重音拍與非重音拍各一種聲音就足夠了,更多選項反而容易讓人猶豫。
音量滑桿
裝置本身的音量鍵已經足夠。
淺色模式
只保留一個黑色畫面。
每小節八拍以上
12/8拍按4拍數,9/8拍按3拍數。
細分節拍(八分音符、三連音、十六分音符)
這些並非 App 核心功能的必要條件,但會是我最優先考慮新增的功能。
輸入速度數值
−/+和拖曳已經足夠。

使用 SwiftUI 實作,無外部函式庫。支援執行 iOS 17 或更新版本的 iPhone。英文名為 No Ads Simplest Metronome。完整使用說明與隱私權政策見支援頁面(英語)。