Takafumi Horiuchi

Metronom yang berdenyut

Gambaran umum

Lingkaran di tengah layar berdenyut mengikuti waktu setiap klik dan mencerminkan kuat-lemahnya bunyi. Saya membuat metronom iPhone tanpa iklan, akun, atau layar pengaturan.

Layar metronom. Lingkaran putih di tengah layar hitam, empat titik ketukan di atas, serta 120 BPM dan −/+ di bawah. Lingkaran membesar lalu kembali pada setiap ketukan.
Layar ini bergerak di dalam halaman dengan persamaan yang sama seperti aplikasi (120 BPM, empat ketukan per birama). Ketuk lingkaran untuk menghentikannya.

Saya membuatnya untuk latihan saksofon tenor saya sendiri. Buka dan langsung mulai; ketukan tetap terlihat saat bunyinya sulit terdengar. Semuanya saya kerjakan sendiri, dari konsep dan desain hingga implementasi dengan SwiftUI dan sintesis bunyi klik.

Kontrol — sentuh yang ingin diubah

Layar hanya berisi titik ketukan, lingkaran, dan angka tempo. Tanpa menu atau teks petunjuk: sentuh langsung objek yang ingin diubah.

Layar saat berhenti. Lingkaran abu-abu muda dengan segitiga putar di tengah, empat titik di atas, 120 BPM dan −/+ di bawah, serta ⓘ kecil di kiri atas.
ⓘ
Membuka halaman bantuan.
Titik ketukan
Ketuk untuk menambah satu ketukan, dari satu hingga tujuh ketukan per birama. Geser untuk menambah atau mengurangi jumlah ketukan.
Lingkaran
Ketuk untuk mulai atau berhenti. Tekan lama, lalu ketuk mengikuti lagu untuk menentukan tempo.
Tempo
Seret untuk menaikkan atau menurunkan tempo. Gerakkan perlahan untuk penyesuaian yang lebih halus. Ketuk − atau + untuk mengubahnya sebesar 1 BPM.
Layar saat berhenti. Teks di layar hanya angka dan “BPM”.

Denyut: Menyesuaikan waktu dan kuat-lemah setiap klik

Waktu denyut lingkaran diatur agar selaras dengan klik menggunakan latensi keluaran yang dilaporkan iOS. Earphone Bluetooth dapat menimbulkan jeda sekitar 0,1–0,3 detik. Besarnya pemuaian lingkaran sebanding dengan volume klik: klik ketukan pertama bernada lebih tinggi dan lebih keras, dengan denyut yang tampak lebih besar.

Grafik klik dan ukuran lingkaran selama satu birama empat ketukan. Kurva langsung naik pada setiap klik, mencapai 1,25 kali ukuran diam pada ketukan pertama dan 1,15 pada ketukan 2–4, lalu turun sedikit di bawah 1 sebelum kembali.
Klik (bidang terisi) dan ukuran lingkaran (garis) selama satu birama pada 120 BPM, dengan empat ketukan per birama. Lingkaran mencapai ukuran terbesar 0,02 detik setelah klik dimulai, lalu menyusut sedikit melewati ukuran diamnya sebelum kembali stabil, seperti jeli.

Thread audio menjadwalkan setiap ketukan dengan ketelitian tingkat sampel. Perhitungan waktunya menghindari kesalahan kumulatif, sehingga penyimpangan tetap dalam 0,5 sampel bahkan setelah satu jam pemutaran terus-menerus.

Cakupan dan kondisi perhitungan di balik angka 0,5 sampel tersebut masih perlu dikonfirmasi. Angka itu tidak boleh dibaca sebagai ukuran waktu ketika bunyi sampai ke pendengar atau ukuran sinkronisasi dengan tampilan.

Tempo lewat ketukan — hening saat mengetuk

Tekan lama lingkaran dan ia mulai bergetar seperti jeli. Ketuk mengikuti lagu atau tempo di kepala: bagian yang disentuh melesak, bergoyang, lalu kembali. Getaran memberi umpan balik tempo.

Enam bingkai kontur setelah satu ketukan di tepi atas. Tepi melesak pada 0,03 detik, mulai kembali pada 0,08 detik, sedikit berubah bentuk vertikal dan horizontal pada 0,17 dan 0,3 detik, lalu kembali bulat pada 1,3 detik.
Kontur setelah satu ketukan di tepi atas, digambar dari persamaan yang sama seperti aplikasi. Garis putus-putus adalah lingkaran sempurna.
Versi pengembangan aplikasi. Lingkaran berwarna abu-abu dalam mode tempo lewat ketukan. Di bawahnya ada panel berbahasa Jepang “Penyetelan jeli”, dengan penggeser dan penjelasan, termasuk “Elastisitas (kecepatan osilasi): 3,6 siklus/detik” dan “Viskositas (peredaman): 0,10”.
Saya menyetel goyangan melalui panel yang hanya tersedia dalam versi pengembangan. Saya menyesuaikan sepuluh parameter, termasuk elastisitas dan viskositas, menggunakan penggeser sambil mengetuk lingkaran untuk merasakan hasilnya. Setelah membandingkan preset “puding”, “warabi mochi”, dan “lebih cair”, saya memilih “jeli” sebagai standar: pantulan yang hidup dan mereda dalam sekitar 0,9 detik.

Aplikasi sengaja tidak berbunyi saat Anda mengetuk. Respons bunyi langsung akan terdengar terlambat lewat Bluetooth dan bertumpuk dengan klik metronom. Setelah ketukan berhenti, klik dengan tempo tersebut mulai nyaris tak terdengar, lalu mencapai volume biasa dalam enam detik.

Setelah lima ketukan, titik getaran perlahan mengecil, sementara batang klik tumbuh dari tingkat nyaris tak terdengar selama enam detik.
Lima ketukan pada 120 BPM, lalu berhenti. Dari bawah: ketukan, getaran (lebih kecil berarti lebih lemah), dan klik (lebih tinggi berarti lebih keras). Volume naik merata dalam desibel, sehingga bunyi lirih tidak tiba-tiba melonjak.

Bunyi — memilih nada yang tetap terdengar di antara suara saksofon

Klik disintesis dari gelombang sinus, tanpa berkas audio rekaman. Saya membuat halaman pembanding dan membandingkan bunyinya melalui pengeras suara iPhone sebanyak tiga kali sambil memainkan saksofon tenor. Saya memilih 1875 Hz dan 1250 Hz, yaitu 1,25 kali frekuensi awal. Keduanya berada di atas rentang konsentrasi energi terkuat saksofon dan di bawah rentang yang cenderung terdengar menusuk.

Sumbu frekuensi dari 100 Hz hingga 10 kHz. Energi saksofon tenor terkonsentrasi pada bagian rendah; rentang yang cenderung terdengar menusuk berada pada 2,5–4 kHz. Klik 1250 Hz dan 1875 Hz terletak di antaranya. Frekuensi awal 1000 Hz dan 1500 Hz ditunjukkan dengan garis putus-putus.
Bidang berarsir menunjukkan rentang konsentrasi energi saksofon tenor, yang menurun ke arah kanan. Arsiran garis menandai rentang 2,5–4 kHz yang cenderung terdengar menusuk. Garis putus-putus menunjukkan frekuensi awal (1000 dan 1500 Hz); garis utuh menunjukkan frekuensi yang dipilih. Tinggi garis mewakili volume.

Bunyi yang lebih tinggi dan panjang, atau dengan tambahan harmonik, lebih mudah terdengar. Meski begitu, saya memilih dalam rentang yang mempertahankan karakter elektronik yang lembut dan netral.

Menjaga kesederhanaan: Fitur yang tidak saya sertakan

Saya meniadakan pilihan yang dapat membuat pengguna ragu. Untuk setiap fitur, saya memeriksa apakah aplikasi tetap dapat berfungsi tanpanya sebelum menghapusnya.

Iklan, pelacakan, dan akun
Sejak awal saya memutuskan untuk tidak menyertakannya. Aplikasi tidak memulai permintaan jaringan.
Layar pengaturan
Semuanya selesai dalam satu layar.
Pilihan warna bunyi
Dua bunyi sudah cukup: satu untuk ketukan beraksen dan satu untuk ketukan tanpa aksen. Pilihan tambahan dapat menimbulkan keraguan.
Penggeser volume
Tombol volume perangkat sudah cukup.
Mode terang
Satu layar dengan latar hitam.
Delapan ketukan atau lebih per birama
Hitung 12/8 dalam empat ketukan dan 9/8 dalam tiga.
Subdivisi (not seperdelapan, triol, seperenam belas)
Fitur ini tidak diperlukan untuk fungsi utama aplikasi, tetapi menjadi tambahan pertama yang akan saya pertimbangkan.
Mengetik angka tempo
Tombol −/+ dan gerakan menyeret sudah cukup.

Dibuat dengan SwiftUI tanpa pustaka eksternal, aplikasi ini berjalan pada iPhone dengan iOS 17 atau lebih baru. Nama bahasa Inggrisnya adalah No Ads Simplest Metronome. Petunjuk lengkap dan kebijakan privasi tersedia di halaman bantuan (bahasa Inggris).