Membangun mesin suara dari awal adalah sebuah ritual peralihan. Anda ingin memahami jam. Waktunya. Logika mentah yang mengubah keheningan menjadi ritme. Sequencer adalah logika itu. Itu adalah sebuah kotak. Anda menempatkan catatan. Anda bergerak maju.
Kebanyakan tutorial melewatkan bagian yang sulit. Mereka menunjukkan kepada Anda sebuah perpustakaan. Mereka menunjukkan kepada Anda GUI. Mereka tidak menunjukkan kepada Anda cara menangani arus tersebut. Kesalahan pengaturan waktu muncul saat Anda melacak waktu secara manual.
Mari kita perbaiki.
Kami sedang membangun sequencer langkah dasar. Ini akan berjalan dalam satu putaran sederhana. Ini akan memicu suara. Ini akan menjaga waktu tanpa melihat ke depan. Pendekatan ini mencegah perasaan “berombak” yang Anda dapatkan saat menggunakan setTimeout untuk loop panjang.
Konsep Inti: Pengaturan Waktu Berbasis Langkah
Sequencer bekerja pada langkah-langkah. Bukan detik. Tangga.
Jika tempo Anda 120 BPM, setiap ketukan berdurasi 0,5 detik. Jika Anda memiliki 16 langkah, setiap langkah adalah 0,125 detik. Keajaiban terjadi ketika Anda mengunci interval ini.
“Waktu bukanlah aliran yang berkesinambungan dalam sequencer. Ini adalah rangkaian peristiwa yang terpisah. Sinkronisasi dengan peristiwa ini adalah segalanya.”
Kita memerlukan cara untuk menghitung kapan setiap langkah terjadi. Bukan dengan menebak. Secara matematika.
Menyiapkan Jam
Anda memerlukan titik referensi. Waktu mulai.
Dalam JavaScript, Tanggal.sekarang() atau kinerja.sekarang() memberi Anda milidetik. Anda menggunakan ini untuk menghitung penyimpangan.
- Tentukan temponya.
- Hitung durasi langkah.
- Mulai satu putaran.
Ini kerangkanya. Itu tidak cantik. Ini berhasil.
Kode ini dasar. Ini menggunakan setTimeout. Itu tidak sempurna. Tapi ini adalah permulaan.
Mengapa Ini Penting
Mengapa membangunnya sendiri?
Perpustakaan seperti Tone.js atau pembungkus Web Audio API sangat bagus. Mereka menangani penjadwalan yang rumit. Mereka mengkompensasi latensi.
Namun Anda tidak mempelajari cara kerjanya dengan menggunakannya. Anda belajar dengan melihat di mana mereka gagal.
Saat setTimeout menyimpang, irama Anda bergetar. Kedengarannya manusiawi. Kedengarannya salah.
Menangani Arus
Pemeriksaan if (nextStepTime < Date.now()) sangat penting.
Dia






















