Takafumi Horiuchi

會搏動的節拍器

概要

螢幕中央的圓與喀噠聲在同一瞬間、以相同強度搏動。我製作了一款沒有廣告、沒有帳號、沒有設定頁面的 iPhone 節拍器。

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

這是為自己練習次中音薩克斯風而做的工具。打開就能開始,即使聲音不易聽清,也能看見節拍。從企劃、設計,到 SwiftUI 實作與點擊音合成,都由我獨立完成。

操作——直接觸碰想改變的東西

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

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

搏動——同一瞬間,相同強度

圓在聲音傳到耳朵的瞬間膨脹,而不是在聲音送出的瞬間。藍牙耳機會產生約0.1–0.3秒延遲,App 利用 iOS 回報的輸出延遲加以補償。膨脹幅度與點擊音的音量成正比:第一拍音調更高、音量更大,圓也明顯膨脹得更大。

一小節四拍的點擊音與圓的大小曲線。每次點擊時,大小曲線立即上升;第一拍達到原來的1.25倍,第2–4拍達到1.15倍,隨後略微低於1倍,再恢復。
一小節的點擊音(填色)與圓的大小(線條)。120 BPM,每小節4拍。圓在聲音出現後0.02秒達到最大,像果凍一樣稍微收縮過頭,再靜止。

每一拍的時刻由音訊執行緒以取樣為單位決定。計算方式不會累積誤差,即使連續播放一小時,偏差也保持在0.5個取樣以內。

敲擊測速——敲擊時保持安靜

長按圓,它就會像果凍一樣顫動。跟著歌曲或腦海中的速度敲擊,觸碰的位置會凹下去,晃動後彈回。速度透過震動回饋給你。

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

敲擊時刻意不發聲。若敲下去就回傳聲音,藍牙會讓它延遲傳來,並與節拍器的聲音重疊。停止敲擊後,該速度的點擊音從幾乎聽不見開始,在6秒內升至正常音量。

五次敲擊後,表示震動的點逐漸縮小,點擊音的直條則從幾乎聽不見的高度開始,在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 不會主動連線。
設定頁面
所有操作在一個畫面內完成。
音色選擇
強拍、弱拍兩種聲音就夠了。選項會帶來猶豫。
音量滑桿
裝置本身的音量鍵已經足夠。
淺色模式
只保留一個黑色畫面。
8拍及以上
12/8拍按4拍數,9/8拍按3拍數。
細分節拍(八分、三連音、十六分)
不是 App 成立的必要條件,留作優先考慮的新增功能。
輸入速度數值
−/+和拖曳已經足夠。

使用 SwiftUI 實作,無外部函式庫。支援執行 iOS 17及以上版本的 iPhone。英文名為 No Ads Simplest Metronome,正在準備於 App Store 發布(2026年9月)。完整使用說明與隱私權政策見支援頁面(英語)。