- Küçük mobil ekranlarda A4 PDF’yi büyüterek çalan müzisyenler için, web üzerinde akışkan ve duyarlı nota görselleştirmesine ihtiyaç var
Scribe prototipi
- Geçmişte, JSON’dan SVG üreten Scribe adlı bir müzik renderer’ı prototip olarak geliştirildi
- Asıl hedef duyarlı bir müzik renderer’ı üretmekti, ancak karmaşık çok geçişli bir yerleşim motoru yazmak gerektiğinden ilerlemek zordu
- Daha sonra projeye CSS Grid eklenince, bunun Scribe’ın uğraştığı yerleşim sorunlarına çözüm olabileceği düşünüldü
.stave sınıfı
Portede perde yerleştirme
.bar sınıfı ve vuruşlar
Vuruşlara sembol yerleştirme
- Bu kez
data-beat özniteliği kullanılarak öğelere vuruş atanır ve CSS kurallarıyla vuruşlar grid sütunlarına eşlenir
- CSS eşlemesi, her 1/24 vuruş için bir kuraldan oluşur
- Öznitelik
^= başlangıç seçicisi kullanıldığında kurallar hataya toleranslı hale gelir
.stave sınıfıyla birlikte kullanıldığında, data-beat değeri 1 ile 5 arasında bir vuruşa, data-pitch ise nota adına ayarlanarak semboller vuruşa ve perdeye göre yerleştirilebilir
Akışkan ve duyarlı nota görünümü
- Bu tür birden fazla ölçü bir flexbox kapsayıcısına konduğunda duyarlı bir nota görünümü elde edilebilir
- Hâlâ eksik çok şey var, ancak başlangıç için iyi bir temel
- Şimdiden çevrimiçi müzik renderer’larından çok daha zarif satır kırımı yapabiliyor
Notalar arasındaki boşluk
- Zaman olarak birbirine daha yakın gerçekleşen nota başları biraz daha yakın render edilir
- Bu, küçük
column-gap tarafından oluşturulan ince ve kasıtlı bir etkidir; sembol öğelerinin yuvalara oturduğu bir tür zamansal “eter” işlevi görür
- Nota başı yoksa sütunların kendi genişliği 0’dır, ancak zaman olarak daha uzak olaylar arasında daha fazla sütun aralığı bulunduğundan (vuruş başına 24 adet) daha büyük mesafe oluşur
- Sembollerin kenar boşlukları ayarlanarak tutarlı aralık kontrol edilebilir
Anahtar ve ölçü işaretleri
- Dikey ve yatay aralıklar için ayrı sınıflar kullanılmasının nedeni, birini diğerine dokunmadan değiştirebilmektir
- Aynı melodiyi fa anahtarıyla göstermek için
.stave sınıfını, aynı data-pitch özniteliğini bas portesi satırlarına eşleyen bass-stave sınıfıyla değiştirmek yeterlidir
- CSS ile
data-duration="5" değerini .bar içindeki 120 grid şablon sütununa eşleyerek aynı porteye 5/4 ölçü işareti verilebilir
Akorlar ve sözler
- CSS Grid kullanılarak nota ızgarası içinde başka semboller de hizalanabilir
- Akorlar, sözler, dinamik işaretler gibi öğeler zamanlanmış olaylarla hizalanıp genişletilebilir
Nota sapları
- Nota sapları, akorlar ve bazı uzun suslar,
data-duration özniteliğinin grid-column-end aralık değerine eşlenmesiyle sütunlar üzerine yayılabilir
Ölçeklendirme
- Tüm sistem
em birimiyle boyutlandırıldığı için, yalnızca font-size değiştirilerek ölçeklenebilir
Flex ve Grid’in sınırları
- Bu mükemmel bir sistem değil. Sınırları şunlar:
- CSS, satır kırılırken yeni anahtar/ton işaretini otomatik yerleştiremez
- Yeni satırdaki yeni notaya bağ kirişi bağlanamaz
- Eğik nota saplarında doğru konum ancak Grid yerleştirmeden sonra bilinebildiği için hizalama zordur
- Tamamlamak için biraz düzenleme amaçlı JavaScript gerekir, ancak CSS yerleşim işinin çoğunu üstlendiğinden JavaScript tarafında yapılacak yerleşim işi çok azalır
Özel öğe
- Bu yeni CSS sistemi etrafında bir yorumlayıcı yazıldı ve bir öğeye sarıldı
- Henüz üretime hazır değil, ancak duyarlı lead sheet render edebilmesi ve davul notasyonu yazabilmesi onu ilginç ve kullanışlı kılıyor
- İçeriğin verisinden,
src özniteliğiyle getirilen dosyadan veya öğenin .data özelliğine ayarlanan JS nesnesinden nota render eder
- Mevcut geliştirme sürümü bir web sayfasına dosya olarak eklenip denenebilir
Gelecek planları
- Scribe 0.3 iyileştirmelerine ek olarak, uzun vadede araştırılmak istenen özellikler:
- SMuFL yazı tipi desteği - nota sembollerinde kullanılan yazı tipini değiştirme
- İç içe dizi desteği - çok partili eserleri etkinleştirme
- Bölünmüş porte render etme - tek bir porteye birden fazla parti yerleştirme
- Çoklu porte render etme - hizalanmış birden fazla porteye birden fazla parti yerleştirme
GN⁺ görüşü
- Web’de notaları akışkan ve duyarlı biçimde render etmek, hem müzisyenler hem de müzik meraklıları için çok faydalı görünüyor. Küçük ekranlarda PDF notayı yakınlaştırıp uzaklaştırma zahmetini azaltabilir
- CSS’in Grid ve Flex yerleşimlerini kullanan yaklaşım ilgi çekici. Karmaşık bir yerleşim motoru olmadan yalnızca CSS ile oldukça fazla şey yapılabildiğini gösteren iyi bir örnek
- Ancak notanın doğası gereği, yalnızca CSS ile sınırların olduğu alanlar da var. Satır kırılırken anahtar veya ton işaretinin otomatik yerleştirilmesi ya da bağ kirişlerinin otomatik bağlanması gibi müzikal bağlamı anlamayı gerektiren noktalarda JavaScript desteği gerekecek
- Lead sheet render etme ve davul notası desteği gibi pek çok şeyin şimdiden uygulanmış olduğu söyleniyor; bu yüzden yakında yeterince kullanılabilir bir seviyeye gelebilir. Açık kaynak yapılır ve geliştirme sürerse, MuseScore gibi mevcut nota editörlerine iyi bir alternatif olabilir
- Planlanan SMuFL yazı tipi desteği, çok partili ve çoklu porte render desteği gibi özellikler hayata geçerse nota ifadesinin olgunluğu ciddi biçimde artacaktır. Umut vadeden bir proje
2 yorum
Bunu yapmanızın bir sebebi olmalı.
Hacker News görüşleri
stickytablo başlığına benziyor ve nota dışında da kullanılabilir[...]) söz dizimi etkileyici bulunmuş. Örnek:.stave > [data-pitch^="A"][data-pitch$="5"] { grid-row-start: A5; }<scribe-music>custom element'i de umut verici görünüyor