- Bagi musisi yang bermain sambil memperbesar PDF A4 di layar ponsel kecil, dibutuhkan rendering notasi musik yang luwes dan responsif di web
Prototipe Scribe
- Sebelumnya dibuat prototipe renderer musik bernama Scribe yang menghasilkan SVG dari JSON
- Tujuan awalnya adalah membuat renderer musik yang responsif, tetapi kemajuannya sulit karena harus menulis mesin layout multi-pass yang kompleks
- Setelah CSS Grid diperkenalkan ke proyek, terlihat bahwa ini bisa menjadi jawaban untuk masalah layout yang ditangani Scribe
Kelas .stave
Menempatkan tinggi nada pada paranada
Kelas .bar dan ketukan
Menempatkan simbol pada ketukan
- Kali ini atribut
data-beat digunakan untuk menetapkan ketukan ke elemen, lalu aturan CSS dipakai untuk memetakan ketukan ke kolom grid
- Peta CSS terdiri dari satu aturan untuk setiap 1/24 ketukan
- Dengan menggunakan selektor atribut awal
^=, aturan ini menjadi toleran terhadap galat
- Bila digunakan bersama kelas
.stave, simbol dapat ditempatkan berdasarkan ketukan dan tinggi nada dengan mengatur data-beat ke nilai antara 1 hingga 5 dan data-pitch ke nama nada
Notasi musik yang luwes dan responsif
- Dengan menaruh beberapa birama seperti ini ke dalam kontainer flexbox, kita bisa mendapatkan notasi musik responsif
- Masih banyak yang belum ada, tetapi ini adalah fondasi yang baik untuk memulai
- Pemenggalan barisnya sudah jauh lebih elegan dibanding renderer musik online yang ada
Jarak antar not
- Kepala not yang terjadi pada waktu yang lebih berdekatan dirender sedikit lebih rapat
- Ini adalah efek halus dan disengaja yang dihasilkan oleh
column-gap kecil, semacam 'eter' waktu tempat elemen simbol masuk ke slot
- Kolom itu sendiri akan memiliki lebar 0 jika tidak ada kepala not, tetapi antara peristiwa yang jarak ketukannya lebih jauh ada lebih banyak celah antarkolom (24 per ketukan), sehingga tercipta jarak yang lebih besar
- Spasi yang konsisten dapat dikendalikan dengan menyesuaikan margin simbol
Tanda kunci dan tanda birama
- Alasan memakai kelas terpisah untuk jarak vertikal dan horizontal adalah agar salah satunya bisa diganti tanpa menyentuh yang lain
- Untuk menampilkan melodi yang sama dalam kunci bass, cukup ganti kelas
.stave dengan kelas bass-stave yang memetakan atribut data-pitch yang sama ke baris paranada bass
- Dengan memetakan
data-duration="5" lewat CSS ke 120 kolom template grid milik .bar, tanda birama 5/4 dapat diberikan pada paranada yang sama
Akor dan lirik
- Dengan CSS Grid, simbol lain juga dapat disejajarkan di dalam grid notasi musik
- Akor, lirik, dinamika, dan lain-lain dapat disejajarkan serta diperluas mengikuti event yang memiliki penandaan waktu
Ekor not
- Ekor not, akor, dan beberapa tanda diam panjang dibuat membentang melintasi kolom dengan memetakan atribut
data-duration ke nilai rentang grid-column-end
Pengubahan ukuran
- Seluruh sistem diberi ukuran dalam satuan
em, jadi ukurannya dapat diubah hanya dengan mengganti font-size
Batasan Flex dan Grid
- Ini bukan sistem yang sempurna. Batasannya:
- CSS tidak dapat secara otomatis menempatkan tanda kunci/tanda mula baru saat terjadi pemenggalan baris
- Tidak dapat menghubungkan garis beam ke not baru di baris berikutnya
- Ekor not yang miring sulit disejajarkan karena posisi tepatnya baru diketahui setelah Grid menempatkannya
- Untuk benar-benar menyelesaikannya, dibutuhkan sedikit JavaScript pembersih, tetapi karena CSS menangani sebagian besar pekerjaan layout, pekerjaan layout yang harus dilakukan di JavaScript menjadi jauh lebih sedikit
Elemen kustom
- Sebuah interpreter ditulis di sekitar sistem CSS baru ini dan dibungkus dalam sebuah elemen
- Meski belum siap produksi, sistem ini menarik dan berguna karena sudah bisa merender lead sheet responsif dan menuliskan notasi drum
- Notasi musik dirender dari data konten, file yang diambil lewat atribut
src, atau objek JS yang diatur pada properti .data milik elemen
- Build pengembangan saat ini bisa dicoba dengan mengimpor file ke halaman web
Rencana ke depan
- Selain peningkatan di Scribe 0.3, fitur yang ingin diteliti dalam jangka panjang:
- Dukungan font SMuFL - mengganti font yang digunakan untuk simbol notasi musik
- Dukungan sequence bertingkat - mengaktifkan lagu multi-part
- Rendering paranada terbelah - menempatkan beberapa part pada satu paranada
- Rendering multi-paranada - menempatkan beberapa part pada beberapa paranada yang sejajar
Pendapat GN⁺
- Merender notasi musik yang luwes dan responsif di web tampaknya akan sangat berguna bagi musisi maupun penggemar musik. Ini bisa menghilangkan ketidaknyamanan melihat partitur PDF sambil zoom in/out di layar kecil
- Pendekatan yang memanfaatkan layout Grid dan Flex milik CSS terasa menarik. Ini adalah contoh bagus yang menunjukkan bahwa cukup banyak hal bisa diselesaikan hanya dengan CSS tanpa mesin layout yang kompleks
- Namun, karena sifat notasi musik, ada bagian-bagian yang tetap memiliki keterbatasan bila hanya mengandalkan CSS. Untuk hal-hal yang perlu memahami konteks musikal, seperti menempatkan tanda kunci/tanda mula secara otomatis saat pemenggalan baris atau menghubungkan beam secara otomatis, bantuan JavaScript tetap dibutuhkan
- Karena sudah cukup banyak yang diimplementasikan, seperti rendering lead sheet dan dukungan notasi drum, tampaknya ini bisa segera ditingkatkan menjadi cukup layak pakai. Jika di-open-source-kan dan pengembangannya berlanjut, ini bisa menjadi alternatif yang baik untuk editor notasi musik yang sudah ada seperti MuseScore
- Jika fitur yang direncanakan seperti dukungan font SMuFL, dukungan multi-part, dan rendering multi-paranada terwujud, kualitas representasi notasi musik akan meningkat secara signifikan. Ini proyek yang patut dinantikan
2 komentar
Pasti ada alasan Anda melakukan ini, kan
Opini Hacker News
[...]) terasa mengesankan. Contoh:.stave > [data-pitch^="A"][data-pitch$="5"] { grid-row-start: A5; }<scribe-music>juga menjanjikan