RSS

Emacs Lisp ve müzik; 21. yüzyılın Smalltalk'u: Squeak

24 Jun

Bir süredir Csound ile uğraşıyorum, bunu yaparken de .orc (ORChestra) ve .sco (SCOre) dosyalarını düzenlemek için gerçek programcı editörlerinden biri olan GNU Emacs’ı kullanıyorum.

Csound mantığı — nasıl ki POV-Ray ortamında bazı komut dosyaları düzenlenip sonra da grafik elde etmek için bu komut dosyaları “render” ediliyorsa — birtakım ses primitiflerini (Csound terminolojisine göre opcode) kullanarak .orc ve .sco uzantılı metin dosyalarını düzenleyip sonra da bunları csound komutu ile komut satırından”render” etmeye dayanıyor. Bunun sonucunda .sco ve .orc dosyaları işleniyor ve .wav, .aif gibi çeşitli formatlarda ses dosyaları diske yazılıyor, sonra da bunları sox paketinin bir parçası olan play komutu ile ya da herhangi bir uyumlu ses çalıcı ile dinlemek mümkün hale geliyor.

Yukarıdaki süreç, yukarıdaki gibi yapılırsa, ne kadar zahmetli olduğu tahmin edilebilir, editöre git, csound dosyalarını düzenle, komut satırına git, ilgili csound komutunu ver. Farklı dosya setine geçtiysen onunla ilgili csound komutunu ver, vs. Emacs Lisp gibi basit bir dil ile kolayca programlanabilen bir editör olan Emacs dururken bu işkence biraz azaltılamaz mı?

Emacs Lisp: ilaç niyetine, günde bir öğün.



(defun csound-play ()
  "Plays the current buffer."
  (interactive)
  (let ((orc-file (concat (substring (buffer-name)
				     0 (- (length (buffer-name)) 4)) ".orc"))
	(sco-file (concat (substring (buffer-name)
				     0 (- (length (buffer-name)) 4)) ".sco")))
    (start-process "csound" "csound" "/usr/bin/csound"
		   "-d" "-o" "devaudio" "-W"
		   orc-file sco-file)))

(defun csound-stop ()
  "Kills the current csound process by killing the associated buffer."
  (interactive)
  (kill-buffer "csound"))

(global-set-key [f6] 'csound-play)
(global-set-key [f7] 'csound-stop)

Malum, o esnada .orc ya da .sco dosyalarından hangisinin olduğu “buffer”da olduğum belli olmayacağı için kod biraz uzadı.

Sonuç: Emacs içinde csound dosyalarını düzenler ve yaratıcılık gezilerine çıkarken Emacs içinden ayrılmaya gerek kalmadı, F6 tuşu ile mevcut dosyayı dinlemek, F7 tuşu ile de çalmayı yarıda kesmek mümkün hale geldi. Üstelik artık diske uzun uzun .wav ya da .aif dosyaları yazmak ve yer kaybına yol açmak gibi bir durumdan da kurtulmuş oldum.

Gelecek planları: Common Lisp ve SLIME tadını yakalayabilmek için bir kısım Csound entsrümanı seçildiğinde bunların ilgili .sco dosyasında yerlerini tespit edip sadece o kısımları çaldıran ya da bir .sco dosyasında seçilmiş bir ses dizisi bölümünü çaldıran Emacs işlevselliği geliştir (geçici dosya kullanarak filan?). Ya da bunu yapan bir csound-mode bul! 😉

Yukarıdaki Emacs Lisp kodunun ilk hallerine bakıp “duuur öyle yapma, haaayııırr!” şeklinde teknik yorumlarda bulunan ve beni aydınlatan cs-lisp Türkçe Lisp e-posta listesinin deneyimli Emacs Lisp programcıları olan üyelerinden Alphan Bayazıt‘a ve Bülent Murtezaoğlu’na teşekkürler.

Bu arada birkaç ay sonra 1. yılını dolduracak cs-lisp e-posta listesindeki üye sayısı 60 kişiyi geçmiş. Ayrıca Türkçe Emacs Viki kılavuzu da yavaş yavaş güzel bir bilgi dağarcığı olmaya başlamış.

Lisp demişken sıkı Lispçilerden ve bilgi işlem tarihinin öncülerinden Alan Kay’in Smalltalk’unun günümüzdeki hali Squeak’i tanıtan çok güzel bir makale buldum: Squeak, the Smalltalk of the 21st. Century.

Makalede örnek olarak verilmiş 2 satırlık Smalltalk kodu:


Speaker man say: 'Hello World'.

Speaker woman say: 'Hello World'.

Hayır, İngilizce cümleler değil, Smalltalk kodu. Hayır dalga geçmiyorum.

Alan Kay’in bir alıntısı ile bitireyim bu girdiyi.

The real romance is out ahead and yet to come. The computer revolution hasn’t started yet. Don’t be misled by the enormous flow of money into bad defacto standards for unsophisticated buyers using poor adaptations of incomplete ideas.

Advertisements
 
Leave a comment

Posted by on June 24, 2006 in General, Lisp, 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: