misafir, FM’de İşitsel programlama notları başlıklı güzel bir yazı yazmış.
Yazıyı görünce Debian GNU/Linux ortamımda kullandığım Common Music sistemini açtım ve biraz oynadım. “misafir”, 440 Hz’lik “La” sesi ile ilgili örnek vermiş. Buradan yola çıkarak Common Music ortamında bunun neye benzediğine bir bakalım. Öncelikle hangi “tuning” içindeyiz, hangi skaladayız ona bir bakalım:
<pre>
CM> *scale*
#<tuning "chromatic-scale">
</pre>
Aksi belirtilmediği sürece tanımlı olan (default) kromatik skala içindeyiz demek ki. Şimdi de şu 400 Hz denen şeyin ismine cismine bir bakalım:
<pre>
CM> (note 440 :hz)
A4
</pre>
A4 yani A notası. C-D-E-F-G-A-B yani Do-Re-Mi-Fa-Sol-La-Si gösterimine göre “La” notası. Sağındaki 4 ise 4. oktavda olduğunu gösteriyor. Pekiyi ama bu nota MIDI klavyede kaçıncı tuşa karşılık geliyor daha doğrusu tuş numarası nedir? Bunu da bir öğrenelim:
<pre>
CM> (keynum 'A4)
69
</pre>
Bu kadar teorik bilgiden sonra bunları birleştirip belki biraz da ses alsak iyi olur:
<pre>
CM> (let ((my-sound (new midi :keynum 69 :time 1 :duration 1)))
(events my-sound "my-sound.mid"))
</pre>
Kodu çalıştırır çalıştırmaz ince bir “La” sesi duymak mümkün. Kodu çalıştırmak derken kodu yazdığımız editörden çıkmak, bir şeyler yapmak, sonra oluşan ses dosyasını bir başka program ile dinlemek gibi cefakarane şeyler yapmamıza gerek yok, doğrudan kod editörünün içinden dinlemek mümkün, ne de olsa yüksek etkileşimli bir ortamda çalışıyoruz (Emacs, Common Music ve Common Lisp bu kadar mı entegre? Evet, bu kadar entegre, tabii daha fazlası da var
)
Peki ya daha karmaşık bir şeyler yapmak istersek, madem konu sinüs fonksiyonundan açıldı, mesela MIDI tuşlarını sinüs eğrisi üzerine tasvir etsek (“mapping”). Yani piyano notalarımız sinüs eğrisinin hükmünde, o eğri ile birlikte bir alçalsa bir artsa. Bunun için önce bir Common Music fonksiyonu tanımlayalım:
<pre>
(define (play-sine len cycs key1 key2 rhy dur amp)
(let ((maxx (- len 1))
(maxr (* 2 pi cycs)))
(process for x from 0 to maxx
for r = (rescale x 0 maxx 0 maxr)
for a = (sin r)
for k = (rescale a -1 1 key1 key2)
output
(new midi :time (now)
:keynum k
:amplitude amp
:duration dur)
wait rhy)))
</pre>
Şimdi de bu fonksiyonu çalalım:
<pre>
(events (play-sine 80 4 20 100 .1 .1 .6)
"sine.mid")
</pre>
Elde ettiğimiz ses dosyası böyle bir .mid dosyası olacaktır. Aynı fonksiyonu kullanıp üst üste iki klavye bindirmek ve aralarına da biraz faz farkı koymak istersek:
<pre>
(events (list (play-sine 80 4 20 100 .1 .1 .6)
(play-sine 60 5.7 50 80 .1 .1 .6))
"sine.mid"
'(0 2))
</pre>
O zaman da şöyle bir .mid dosyası elde ederiz. Common Music ile bu tür şeyleri ve çok daha fazlasını esnek ve yüksek etkileşimli bir ortamda yapmak, diğer ses sistemleri ile CM’yi entegre olarak kullanmak mümkün.
Bu arada Common Music’in yaratıcısı ve en sıkı çalışan geliştiricisi müzisyen/programcı Taube’nin kitabı ile ilgili detaylı bir yorum Computer Music Journal dergisinde çıkmış, okumakta fayda var: Heinrich K. Taube: Notes from the Metalevel: Introduction to Algorithmic Music Composition.
Not: Yazı ile ilgili yorum yollamak isteyenler yazının başındaki FM haberinin altına yorum ekleyebilir yahut emres at bilgi nokta edu nokta tr adresinden benimle temas kurabilirler.
Benzer Yazılar / Similar Posts:
- Lisp ve müzik – eksikliklerin giderilmesi…
- Bilgi Üniversitesi’nde Müzik ve GNU/Linux Dersi
- Bir müzik sizin için ne zaman değerli olur? Bilgi teorisi, estetik değerler ve kodlama üstüne…
- Allegro CL 8.0 Express Edition; Notes from the Metalevel, CSound; ZF – Lis(t|p) Comprehensions
- Ursula K. Le Guin, Özgürlük ve Müzik Üstüne
- Emacs ile caz çalmak mümkün mü?
- xmms-ruby: ikinci bölüm
- El yakıyor: yeni SLIME+Emacs ve Lisp programlama videosu (aka SLIME kicks ass!)
- Computer Music Programming: Carillon Tekbir
- Hacker’s Delight, Notes from the Metalevel
Leave a reply