RSS

Lisp ve müzik – eksikliklerin giderilmesi…

31 Oct

Le Guin’in kitabındaki “O, O, Yeowe” ezgisini Common Music’te biraz problemli olarak gerçekleştirmiş olduğumu fark eden ve Bilgi Üniversitesinde Müzik ve Linux dersini veren Ruhan İkeda hocamdan bugün güzel birkaç e-posta ile Common Music kod önerileri geldi.

İkeda’nın açıklamaları sonucunda olarak ortaya çıkması gerekenin şu olduğunu anladım (çıkan MIDI dosyası buradan indirililebilir: yeowe.midi):


;; notalar
(define yeowe-initial '(F4 G4 G4 AF4 F4 AF4 AF4 F4 G4 G4 E4 F4))

;; yukaridaki notalarin bir oktav altindaki notalar
(define yeowe-final
 (loop for i in yeowe-initial collect (note (/ (hertz i) 2.0) :hz)))

;; nota uzunluklari
(define yeowe-duration '(2 1.5 .5 2 2 1 .5 .5 1 .5 .5 2))

;; parcayi calacak MIDI olaylarini üretecek Common Music fonksiyonu
(defun yeowee (keynumlist durlist amp)
 (process for i below (length keynumlist)
          output
          (new midi :time (now)
                    :keynum (nth i keynumlist)
                    :amplitude amp
                    :duration (nth i durlist))
                    wait (nth i durlist)))

;; üretilen MIDI eventlerini yeowe.midi dosyasına yazan ve ayni zamanda parcayi calan fonksiyon
(events (yeowee yeowe-final yeowe-duration .9) "yeowe.midi")

Common Music Notation ile parçayı düzgün dizmeye biraz daha yaklaştım, şu anda notasyon olarak sadece sol anahtarının altındaki 8 (8vb (ottava bassa)) ve en başta, sol anahtarının hemen sağında parantez içindeki bemol eksik (ancak bununla aynı anlama gelen gösterilimi kullandım, dolayısı ile işlevsel olarak eksik sayılmaz). Neyse ki fermata işaretini kolayca bulabildim CMN dokümantasyonu sağolsun:


(cmn (size 24)
     (text-connecting-pattern '(0 1))
     (curvy-flags t)
     (title "O Yeowe")
     (staff treble
	    (f4 h  (text- "O,"))
	    (g4 q. (-text- "O,"))
	    (g4 e  (-text- "Ye"))
	    (af4 h  (-text- "o"))
	    (f4 h  (-text- "we"))
	    (af4 q  (-text- "Ge"))
	    (af4 e  (-text- "ri"))
	    (f4 e  (-text- "do"))
	    (g4 q  (-text- "nen"))
	    (g4 e  (-text- "ol"))
	    (e4 e fermata  (-text- "mu"))
	    (f4 h  (-text- "yor"))
	    double-bar))

Yukarıdaki CMN kodunun ürettiği .eps dosyası da şöyle bir şey:

Advertisements
 
Leave a comment

Posted by on October 31, 2006 in General, Lisp, Music, Programlama

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: