Patternler
Patternler, Frekans’ta zaman içindeki müzikal akışı tarif eden temel yapılardır. Bir pattern, belirli bir zaman aralığını girdi olarak alıp o aralıkta gerçekleşecek eventleri üretebilir. Eventlerin zamana nasıl yerleşeceği patternin yapısına bağlıdır.
Bu sayfada bir zaman aralığından event üretme işlemine querying diyeceğiz.
Örnek:
const pattern = sequence("c3", ["e3", "g3"])
const events = pattern.queryArc(0, 1)
console.log(events.map((e) => e.show()))
silenceBu örnekte sequence fonksiyonuyla bir pattern oluşturuyoruz ve 0 ile 1 arasındaki zaman aralığı için query ediyoruz. Bu sayılar cycle adı verilen zaman birimlerini temsil eder. Bir cycle’ın süresi tempoya bağlıdır; varsayılan olarak saniyede bir cycle çalışır.
Üretilen eventler şunlardır:
[
'[ 0/1 -> 1/2 | c3 ]', //
'[ 1/2 -> 3/4 | e3 ]',
'[ 3/4 -> 1/1 | g3 ]',
];
Her eventin bir değeri, başlangıç zamanı ve bitiş zamanı vardır. Zaman burada kesir olarak gösterilir. Yukarıdaki durumda eventler sırayla yerleşir: c3 ilk yarıyı, e3 ve g3 ise birlikte ikinci yarıyı kaplar.
Bu zaman yerleşimi sequence fonksiyonunun sonucudur. sequence, argümanlarını bir cycle içine eşit olarak böler. Eğer argümanlardan biri dizi ise aynı kural cycle’ın o parçası içinde uygulanır. Örnekte e3 ve g3, tüm cycle’ın ikinci yarısı içinde eşit olarak bölünmüştür.
query fonksiyonu yalnızca patterne erişmenin bir yolu değildir; fonksiyonel programlama mantığında patternin kendisi gibi düşünülebilir. Teoride pattern doğrudan değiştirilmez; onun yerine eski patterni çağıran yeni bir pattern oluşturulur. Bu yeni pattern, sorguyu eski patterne göndermeden önce değiştirebilir ve dönen eventleri kullanıcıya iletmeden önce düzenleyebilir. Zaman ve yapı dönüşümlerinin büyük bölümü bu mantıkla çalışır.
Yukarıdaki örnekler canlı kod editöründe günlük kullanımın tam karşılığı değildir. Editörde genellikle patternin kendisini yazarsın; querying işlemini scheduler üstlenir. Scheduler patterni düzenli aralıklarla sorgular, üretilen eventleri de ses sentezi veya başka tetikleyiciler olarak sıraya koyar.
Patternleri hizalayabilir ve birleştirebiliriz.