Carillon Tekbir

What would you compose for a fantastic carillon, which has midi port ?
 A fantastic piece, which allows you to explore the carillons sonic capabilities?
I didn't do that. Since the carillon has religional/cultural functions and it always chimes a sound icon; i focused on sound icon concept in this work. I structured the piece basically as 'A - interpolation from A to B - B'. The A is the well known gong tune: E C D G C D E C... and the B is also a very well known sound icon, but in a very different cultural context. I took the Tekbir of Itri as B. Itri is an Istanbulian composer from 17th century.
To acquire an interpolation between two different tunes i used the technique dynamic markov. Our decision maker for next note is a first order markov chain, but the probabilities of every notes are changing as a function of time.  This piece is composed for McFarland Carillon at Urbana. If you wanna hack  this code and generate the result by yourself, download and install Grace: http://commonmusic.sourceforge.net/

=>  t o  l i s t e n   c l i c k  h e r e  <=


Sevgili arkadaşlar,
geçen haftalarda midi girişi olan otomatik gong kulesi için "manalı" bir parça yaptım. Bildiğiniz üzre gong kulelerinde hep şu ezgi duyulur (mi do re sol do re  mi do ...). İşte bu duysal ikonu aldım başka bir duysal ikonla (Itri - Tekbir) ilişkiye soktum. Melody morphing diyebiliriz yaptığım şeye. Birinci ezgi çalar, ondan sonra iki ezgi arasındaki ara değerler dinamik markov zinciri tekniğiyle hesaplanır, ve hedef ezgiye bağlanırız. Aşağıda kullandığım iki duysal ikonun markov tablolarını ve dinamik olarak (yani zamanın bir fonksiyonu olarak) bu iki tablo arasındaki değerleri üreten ve yani bizi hedef ezgiye götüren Lisp kodunu da veriyorum. Bu kodu Grace [http://commonmusic.sourceforge.net/] adlı şahane uygulamayı bilgisayarınıza kurarak siz de çalıştırabilir/hackleyebilirsiniz. Bu kaydı geçen hafta yaptım. Ancak gong kulesinden tekbir'i duyan kimse koşarak yanımıza gelmedi.
=>  t ı k l a  d i n l e  <=

;;;First order markov table for traditional gong tune;;;
;;;Gong   c     d     e     g;;;
;;;            c -----   0.5   0.5 -----;;;
;;;            d 0.333 ----- 0.333 0.333;;;
;;;            e 0.667 0.333 ----- -----;;;
;;;            g   1.0 ----- ----- -----;;;


;;;First order markov table of Itri's Tekbir;;;
;;;Tekbir   b   b-f     c   d-f   e-f   e      f     g;;;
;;;             b ----- -----   1.0 ----- ----- ----- ----- -----;;;
;;;          b-f ----- ----- ----- ----- -----   1.0 ----- -----;;;
;;;             c ----- 0.067 0.667   0.2 0.067 ----- ----- -----;;;
;;;          d-f 0.167 ----- 0.667 ----- ----- 0.167 ----- -----;;;
;;;         e-f ----- ----- -----   0.5   0.5 ----- ----- -----;;;
;;;         e   ----- ----- -----   0.4 -----   0.4   0.2 -----;;;
;;;            f ----- ----- ----- ----- -----   0.5 -----   0.5;;;
;;;           g ----- ----- ----- ----- ----- -----   1.0 -----;;;



;;;This is the Lisp code, which produce data (notes and durations) according to Markov tables as a function of time;;;
(define (m-kette len)
  (begin
                (define a1-t 1) ;;goes to 0;;
                (define a2-t .667) ;;goes to 0;;
                (define a3-t .333)  ;;goes to 0;;
                (define a4-t 0)  ;;goes to .067;;
                (define a5-t 0)  ;;goes to .667;;
                (define a6-t 0)  ;;goes to .2;;
                (define a7-t 0) ;;goes to .5;;
                (define a8-t .09) ;; goes to .167;;
                (define a9-t .1) ;;goes to .429;;
                (define 1-a1-t 0) ;;goes to 1;;
                (define r-.25 0) ;;goes to .5;;
                (define r-.5 .75) ;;goes to .5;;
                (define r-.75 0)
                (define r-1 0)
                (define r-1.5 .25)
                (define Tal 1)  ;;time interval;;
                (define Ev 0)  ;;blurring parameter for time intervals;;
                (process with Tala = (make-weighting `(
                                                       (,(promise (vary .25 Ev)) ,(promise r-.25))
                                                       (,(promise (vary .5 Ev)) ,(promise r-.5))
                                                       (,(promise (vary .75 Ev)) ,(promise r-.75) :max 1)
                                                       (,(promise (vary 1 Ev)) ,(promise r-1))
                                                       (,(promise (vary 1.5 Ev)) ,(promise r-1.5) :max 1)
                                                       ("1R" 1 :max 1)))
                         with Raga = (make-graph `(
                                                    (55 ,(make-weighting `((60 ,(promise a1-t)) (67 ,(promise 1-a1-t)))) 55)
                                                    (60 ,(make-weighting `((62 ,(promise a2-t)) (64 ,(promise a3-t))
                                                                           (58 ,(promise a4-t)) (60 ,(promise a5-t) :max 4) (61 ,(promise a6-t)) (63 ,(promise a4-t)))) 60)
                                                    (62 ,(make-weighting '((64 .3) (55 .5) (60 .3))) 62)
                                                    (64 ,(make-weighting `((60 ,(promise a1-t) :max 4) (65 ,(promise a8-t)))) 64)                                                             
                                                    (58 ,(make-weighting `((63 ,(promise 1-a1-t)) (60 ,(promise a1-t)))) 58)
                                                    (59 60 59)
                                                    (61 ,(make-weighting `((59 ,(promise a8-t)) (60 .667) (63 ,(promise a8-t)))) 61)
                                                    (63 ,(make-weighting `((61 ,(promise a9-t)) (63 ,(promise a9-t)) (65 .143) (62 ,(promise a3-t)))) 63)
                                                    (65 ,(make-weighting `((63 .5) (67 .5) (62 ,(promise a3-t)))) 65)
                                                    (67 65 67))
                                                  )
                         for i to len
                         for x = (/ i len)
                         do
                         (set! Ev (interp x '(0 0 1 1)))
                         (set! r-.25 (interp x '(0 0 1 .5)))
                         (set! r-.5 (interp x '(0 .75 1 .5)))
                         (set! r-.75 (interp x '(0 0 1 .5)))
                         (set! r-1 (interp x '(0 0 1 .35)))
                         (set! r-1.5 (interp x '(0 .25 1 .5)))
                         (set! Tal (next Tala))
                         (set! a1-t (interp x '(0 1 1 0)))
                         (set! a2-t (interp x '(0 .667 1 0)))
                         (set! a3-t (interp x '(0 .333 1 0)))
                         (set! a4-t (interp x '(0 0 1 .067)))
                         (set! a5-t (interp x '(0 0 1 .667)))
                         (set! a6-t (interp x '(0 0 1 .2)))
                         (set! a7-t (interp x '(0 0 1 .5)))
                         (set! a8-t (interp x '(0 .09 .8 .167)))
                         (set! a9-t (interp x '(0 .1 .8 .429)))
                         (set! 1-a1-t (interp x '(0 0 1 1)))
                         (send "mp:midi" :key (if (equal? Tal "1R") 0 (next Raga)) :dur (if (equal? Tal "1R") 1 Tal))
                         (wait (/ (if (equal? Tal "1R") 1 Tal) 1.25)))))

(sprout (m-kette 340)) ;;runs the code, sends midi messages;;

Comments

Popular Posts