# Anladığım kadarıyla Grace'te process içine process koymak doğru bir dizayn değil. Galiba her sprout edilen process için ayrı bir Juce thread'i açılıyor. Muhtemelen de thread açmak öyle zıt diye olan bir iş değil, 120 bpm'de vuruş başına iki yeni process açmaya çalışınca da senkronizasyon bozuluyor. Bütün işi tek process'le halletmek lazım.
(define-process (ritim2 n tempo)
(run with
patdur = (make-cycle '(.1 .05 .1 .05 .05)) and
pattimes = (make-weighting '((1 10) (2 2) (3 1))) and
rate = (/ (/ 60 tempo) 4)
repeat n
do
(loop
with times = (next pattimes)
with dur = (next patdur)
for i from 0 below times by 1
do
(send "cs:i" 1 (* i (/ rate times)) dur))
(wait rate)))
# Görüldüğü üzere her beat için (ikinci bir process yerine) ayrı bir loop açıyoruz. Tek bir (send ) ile işimizi hallediyoruz.
# patdur noise uzunluklarını içeren cycle. 5/8'lik havasını o veriyor.
# pattimes da her beat'te kaç davul vuruşu olacağını içeren olasılık dağılımı. En çok bir vuruş, az 2 vuruş, çok az üç vuruş. Muhtemelen bunu birinci dereceden bir Markov chain yapmak daha iyi olacak. 3 vuruş çalındıktan sonra tekrar 3 vuruş gelme ihtimali daha da azalsın deyu.
(sprout (ritim2 400 120) 0 1)
(stop 1)
# (sprout )'un son argümanı id. sonra stop'la durdurabilmek için...
# Örnek bir çıktı şuradan dinlenebilir.
Hiç yorum yok:
Yorum Gönder