Ruhan Alpaydin ralpaydin@cs.bilgi.edu.tr

GNU/Linux üzerinde ses ve müzik işleme: Agnula/DeMuDi

Giriş :
Özgür yazılım ve açık kaynak kod (ÖY), ofis paketlerinden veritabanlarına, web sunumcularından grafik işleme programlarına uzanırken, ses ve müzik işleme programları özgür yazılım dünyasında ne yazık ki sesini az duyurabilen bir alan olarak kalmıştır. Halbuki, özgür yazılım dünyasının en kapsamlı  projesi olan GNU/Linux işletim sistemi üzerinde koşan ve bir müzisyenin rahatça sayısal bir ev stüdyosu olarak kullanabileceği çok sayıda özgür yazılım bulunmaktadır. Bu programlar, ses sentezleme ve işlemeden tutun, müzik yazmaya, karıştırmaya ve CD yakmaya kadar çeşitlilik göstermektedir.

ÖY'ın müzik dünyası için önemi, müzisyenin kopya yazılımlarla çalışmak zorunda kalmaması, bu yazılımların başka yazılımlarla kolaylıkla iletişebilir olması, yazılım kodlarının ve yazılımın ürettiği veri formatlarının açık olması sayılabilir. Bu yazılımların kodlarının değiştirilebilmesi, bilgisayarla programcılık derecesinde ilgili olmayan birçok müzisyen için önemli bir kriter değilken, bu programların başka programlar ile rahat iletişmesi kullanıcıya kolaylık ve rahatlık sağlar; kullanıcıyı kısıtlamaz. Bu nedenle, başka alanlarda olduğu gibi müzik teknolojileri alanında da ÖY özgürleştiricidir.

GNU/Linux, Unix işletim sisteminin kişisel bilgisayara (gündelik hayatta PC olarak adlandırdığımız bilgisayar tipi) adapte edilmiş halidir ve ÖY'lar bütününden oluşur. Unix veya GNU/Linux işletim sistemlerinin temel özelliklerine ve kullanımına hızlı bir giriş için bkz. [Ek-1]. GNU/Linux işletim sisteminin ses ve müzik kullanımı için geliştirilen dağıtımı ise Agnula/DEMUDI'dir. Burada, Agnula : A GNU Linux Audio; DEMUDI ise DEbian MUltimedia DIstribution (Debian Çokluortam Dağıtımı) karşılığıdır. Bu dağıtımın temelindeki Debian, ÖY felsefesine en fazla sadık kalan, gelişkin bir paketleme sistemine sahip GNU/Linux dağıtımıdır.

Bu makalede, ÖY tabanlı Agnula/DeMuDi sisteminin mimarisi ve üzerinde koşan ses ve müzik işleme programlarına kısa bir giriş yapılacaktır. Böylelikle, GNU/Linux işletim sistemini ses ve müzik işleme amacıyla kullanmak isteyen kullanıcı Agnula/DeMuDiyüklemesinden sonra, bu makaleyi adım adım takip ederek, kişisel bilgisayarını küçük bir stüdyo haline getirebileceğine inanıyoruz. Yazıda, bazı kısımlar, örneğin Emacs ile MusicXML dosyaları hazırlanması, başka kaynaklarda olmadığı için, detaylıca anlatılmıştır. Sistem üzerinde yüklü gelen tüm ses ve müzik uygulamalarına girilmemiş, ancak sistemin gücünü gösterecek farklı işlevlerdeki örnek uygulamalar ve birbirleri ile etkileşimlerine detaylarıyla değinilmiştir. 

GNU/Linux'un sayısız dağıtımı vardır: Pardus, Mandrake, Red Hat, Fedora Core (FC), SuSe, Gentoo ilk akla gelenlerdir. FC dağıtımını ses ve müzik üretimi amaçlı  kullanmak için http://ccrma.stanford.edu/planetccrma/software adresinde FC için derlenmiş ses ve müzik yazılım paketleri bulunmaktadır. Bu paketler FC kurulu sisteme, http://ccrma.stanford.edu/planetccrma/software adresinde anlatıldığı gibi yüklenmelidir. FC ortamı için derlenmiş bu paketler, Agnula/DeMuDi'yle gelmeyen, Debian ortamına adapte edilmemiş bazı paketleri de içerir. Bu makalede, koşan bir Agnula/DeMuDi sistemi üzerinde edindiğimiz deneyimler aktarılacaktır.

Makalenin hedeflediği okur, GNU/Linux işletim sistemini kullanarak ses ve müzik üretimini sayısal ortama taşımak isteyen müzisyenlerdir. Unix ve GNU/Linux'a yabancı okuyucuların, ilk olarak, Ek 1: Unix/Linux ortamına giriş bölümü ile bu makaleyi okumaya başlamalarını tavsiye ederiz.

Agnula/DeMuDi ses mimarisi :

Bilgisayar üzerindeki ses kartının işlevsel şeması aşağıdaki gibidir :
Analog, yani kulağımızın duyacağı ses dalgaları halindeki ses 'Analog Ses Çıkışı'ndan çıkmadan önce DAC (Sayısal Analog Çevrimci) ile analog hale çevrilir. DSP (Sayısal Sinyal İşleme) ses sentezler/üretir. ADC (Analog Sayısal Çevrimci) ise sesi analog halinde alır ve bilgisayarın kullanacağı sayısal hale çevirir. Mikrofon Analog Ses Girişi'ne, hoparlör ise Analog Ses Çıkışı'na bağlanmalıdır.


Ses kartı, günümüzde, kişisel bilgisayarlarda, standart donanım birimi olarak gelmektedir. Agnula/DEMUDI dağıtımı, sesi ses kartı ve ses işleyen programlar arasında dolaştıran JACK (Jack Audio Connection Kit, Jack Ses Bağlantı Birimi) motoruna sahiptir. Sesi kan olarak düşünürsek, JACK, kan damarlarını birbirine bağlayan kalp gibidir. JACK da bir yazılım parçasıdır ve ses kartına bağlıdır. JACK'ın devamlı olarak atan kalbi jackd adlı jack sunumcusudur. Bu sunumcuyu aradan çıkartarak direkt olarak ses kartına ses göndermek mümkündür; herhangi bir GNU/Linux sürümünde yapılabileceği gibi. Ancak yanyana çalışan bir sürü ses ve müzik uygulaması JACK ile iletişimi gerektirir. Koordinasyonu ve bağlantıları JACK sağlar.

Örnek bir konfigürasyon: Sanal MİDİ klavyesi

Kişisel bilgisayarımızı bir müzik aleti olarak kullanmayı düşünelim ve örnek bir düzenek oluşturalım. JACK'ı, ses sentezleyicisi olan Fluidsynth'i ve klavyeyi bir MIDI klavyesi olarak kullanmamızı sağlayanMidi Virtual Keyboard uygulamalarının iletişimi ve ses oluşturması aşağıdaki şemadaki gibidir:
MIDI sanal klavye ile MIDI müzik olayları (MIDI music events) oluşturulur ve FluidSynth sentezleyicisi aracılığı ile seçilen bir sese eşlenir. FluidSynth bunun dışında çeşitli ses efektlerini de gerçek zamanlı olarak işleme sokar. Örneğin, sese belli özelliklerde yankı eklemek, ses fontunu değiştirmek, hatta gerçek zamanda MIDI müzik olayları göndererek akışı değiştirmek mümkündür. JACK, ses kartı ve sentezleyici program olan FluidSynth arasındadır, sesi FluidSynth'ten alır ve ses kartına gönderir. 

Bu konfigürasyonun detayları için bkz. Ek 2.


Çalıcılar :
Çalmak, bir dosyadaki ses bilgisini okuyup, yorumlayıp analog sese dönüştürülmektir.  GNU/Linux üzerindeki farklı çalıcıları, işledikleri dosya formatları, arabirimleri, işlevleri açısından aşağıdaki gibi sınıflandırmak mümkündür:
Çalıcı Dosya formatları Arabirim İşlev Diğer notlar
aplay S8 U8 S16_LE S16_BE U16_LE U16_BE  S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE  FLOAT64_BE  IEC958_SUBFRAME_LE  IEC958_SUB-FRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM  (kimi dosyalara destek donanıma bağlı) komut satırı dosya(ları) çalar aşağı seviye (donanıma yakın) dosya çalımı
[aiff desteklenmiyor]
Duali, kayıt için 'arecord'
cplay ogg, mp3, wav, raw, aiff komut satırı dosya veya dosya listesini çalar  
play ogg, mp3, wav, raw, aiff komut satırı tek bir dosya çalar Duali, kayıt için : 'rec'
mpg321 mp3 komut satırı yerel veya uzak adresteki dosyaları çalar (URL adresleme)  
timidity midi komut satırı ve GUI sürümleri midi dosya listelesini çalar (JACK koşuyor olmamalı)

Kaydediciler :

Kaydediciler, çalıcıların yaptığı işin dualini yaparlar. Şöyle ki, bir kaydedici analog sesi sayısal hale çevirir, istenilen formatta bir dosyaya kaydeder. Kaydedicileri de aşağıdaki gibi sınıflandırmak mümkün:  
Kaydedici Dosya formatları Arabirim İşlev Diğer notlar
arecord S8 U8 S16_LE S16_BE U16_LE U16_BE  S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE  FLOAT64_BE  IEC958_SUBFRAME_LE  IEC958_SUB-FRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM  (kimi dosyalara destek donanıma bağlı) komut satırı dosya(ları) çalar aşağı seviye (donanıma yakın) dosya çalımı
[aiff desteklenmiyor]
Duali, çalım için 'aplay'
rec ogg, mp3, wav, raw, aiff komut satırı tek bir dosya çalar Duali, çalım için : 'play'

Eğer ses kartınıza takılı bir mikrofon varsa, aşağıdaki komut,
arecord -d 10 -f cd -t wav /evdizinim/sesdosyaları/ilk.wav
sonraki 10 saniyeyi CD kalitesinde (16 bit çözünürlüklü stereo bir ses dosyasına, 44.1 kHz örnekleme hızı ile)
/ev dizinim/ sesdosyaları/ilk.wav adlı wav dosyasına  kaydedecektir.  Aynı işi rec kaydedicisini kullanarak :
rec -c 2 -r 44100 -s w -t wav /evdizinim/sesdosyaları/ilk.wav
şeklinde yaparız.

play ve aplay ile de kaydedilmiş dosyalar çalınıp dinlenebilir.

Sentezleyiciler:

Ses sentezleme ile, özellikle akustik sesler dışındaki seslerin müzik (özellikle elektronik müzik) amaçlı kullanılmalarını, varolan akustik ve doğal seslerin, ses dalgası ölçeğinde değiştirilerek sentetik seslerin oluşturulmasını anlıyoruz.

Fluidsynth:

Fluidsynth, ilk bölümde değindiğimiz bir sentezleyiciydi. (Fluidsynth komut satırından kullanılır ve GUI giydirilmiş hali Qsynth'dir). Fluidsynth SoundFont2 ses fontlarını kullanır. (Ses fontunu tıpkı yazı fontu gibi, sese karakteristiğini veren, mesela onu flüt ya da obua sesi yapan parametrelerin toplamı olarak düşünebiliriz.) Fluidsynth, MIDI girdi ve çıktılarını audio dosyasına çevirerek, verilen ses fontu karakteristiğinde JACK'a gönderir. Fluidsynth, MIDI girdilerini, MIDI çıktıları (MIDI olayları) üreten bir MIDI aletinden alır. Fluidsynth koşuyorken, çıkan sesi, komutlar vererek, gerçek zamanda kontrol etmek mümkündür.

Dosya formatları ve çevrimi :

Ses (ingilizcesi 'sound'), audio (ingilizcesi 'audio') ve müzik arasındaki farkı dosya formatları bağlamında netleştirelim: Müzik dosyası deyince beş çizgili ve anahtarlı notasyonun kodlanmasını anlıyoruz. Ses dosyası, çoğu zaman sentezlenmiş bir enstruman, veya bir müziğin parçası olarak kullanılmak üzere oluşturulmuş bir ses parçasıdır. Audio dosyası ise, bir grafik dosyasının işitsel konturpuanı olarak düşünülebilir. Audio dosyası müzik de içerebilir, konuşma da, bir takım sesler de.      
Format Tip Platform Çalıcı Diğer notlar
mp3 Audio Hepsi cplay, play, mpg321 (kayıplı) Sıkıştırılmış, açık (ve özgür) değil
ogg Audio Hepsi cplay, play mp3 formatının açık ve özgür olanı. mp3 gibi kayıplı sıkıştırılmış.
wav Ses/Audio Hepsi cplay, play Microsoft'un ses formatı ancak başka platformlarda da yaygın.
Atası olan format riff.
snd Ses/Audio Hepsi play CCRMA common paketleri ses formatı
au Ses/Audio Sun cplay,play Sun'ın ses formatı
aiff Ses/Audio Apple, SGI cplay, play Atası olan format iff.
riff Ses/Audio     iff'den farkı bilgiyi little-endian tutması. wav dosyası da bir riff dosyası.
iff Ses/Audio Amiga, Apple   En eski ses formatlarından.
sf Ses/Audio     IRCAM programlarına özel ses dosyaları
raw Ses/Audio Hepsi cplay, play İşlenmemiş (çıplak) ses formatı.
midi Müzik Hepsi playmidi, timidity En yaygın ve eski müzik saklama formatı (müzik olayları olarak tutuluyor).
ly Müzik Hepsi U/D TeX tabanlı müzik formatı
MusicXML Müzik Hepsi U/D Kanonik müzik bilgisi saklama formatı


Tablodaki 'platform' alanı ile, bu dosya tipinin içkin sayıldığı ortamı anlıyoruz.
Ses dosyalarını bir formattan başka formata çevirmek mümkündür. Bu sox programı ile yapılır (SOund eXchange, ses değiştokuşu). Tablodaki formatların neredeyse tamamını tamamına dönüştürebiliyor.
        sox -v 1.5 dosya.au -r 11000 dosya.wav maske
au formatından wav formatına dosyayı değiştirirken, sesin yüksekliğini arttırıyor ve örnekleme hızını 11000'e çıkartıyor. Ayrıca 'maske' adlı ses efektini uyguluyor.

soxmix ise birden fazla ses dosyasını alıp, kaynaştırıp, tek bir ses dosyası haline getiriyor. Dosyalar aynı formatta ve örnekleme hızında olmak zorunda.
        soxmix kisim1.wav kisim2.wav ikisesli.wav
Bu şekilde, komut satırından kayıt yapmak, kaydedilenleri karıştırmak, karıştırırken çeşitli ses efektlerinden geçirmek ve tek bir ses dosyası haline getirmek mümkündür.

Notasyon ve basım :

Beş çizgili ve anahtarlı, grafiksel müzik gösterimini yazmanın en kolay yolu, WYSIWYG (What You See Is What You Get (Ne görüyorsanız onu elde edersiniz), grafiksel olarak görünenin birebir kaydı.) bir editördür.  Müzik notasyonunu birebir kodlayan bir format yerine müzik aletleri arasındaki sayısal müzik iletişim dili olan MIDI yaygın olarak kullanılmaktadır. Halbuki, MIDI, müzik olaylarının özelliklerini kesikli (discrete) kümelere izdüşümlendirmektedir.

 

MusicXML

XML (eXtensible Markup Language), bilgi saklamanın platform bağımsız ve okunabilir evrensel formatıdır [10]. MusicXML ise müzik bilgisinin XML dilinde yani context-free gramer olarak ifade edilmiş halidir. Müzik saklama formatı olan MusicXML, kanonik bir müzik formatıdır. Farklı müzik programları, sentezleyiciler, yazma (editing and notation) programları, bazıları da gizli olan farklı formatlar kullanırlar. Bunların MusicXML ihrac ve ithal etmeleri birbirleri ile konuşabilmelerini kendisi de bir XML dosyası olan XSL (eXtensible Style Sheet) çeviricisi mümkün kılar. Sözgelimi, MIDI bilgisi bir DTD (Document Type Definition, belge tipi tanımı) olarak tanımlanabilir. midi2XSL dosyaları ile MIDI bilgisi işleyen programlar başka müzik formatlarına çevrilebilir.
Aşağıdaki dosya 'Cuccurucucu Paloma' (Caetano Veloso) şarkısının başlangıcının MusicXML olarak kodlanmış halidir:
<?xml version="1.0"?>
<!DOCTYPE score-partwise SYSTEM "/usr/share/emacs/21.3/lisp/tei-emacs/xml/dtds/music/partwise.dtd" []>
<score-partwise>
 <movement-title> Cuccurucucu Paloma (first line of the song) </movement-title>
 <identification>
 <creator type="composer">Caetano Veloso
  </creator>
  <rights>Caetano Veloso</rights>
  <encoding>
   <encoder>Ruhan Alpaydın</encoder>
   <encoding-date>2004-01-26</encoding-date>
  </encoding>
  <miscellaneous>
   <miscellaneous-field name="background information">This song appears in the Almadovar movie 'Hable Con Ella' (Talk to Her).
   </miscellaneous-field>
  </miscellaneous>
</identification>
 <part-list>
   <score-part id="P1">
   <part-name>Voice</part-name>
  </score-part>
 </part-list>
 <part id="P1">
  <measure number="1">
   <attributes>
    <time>
     <beats>2</beats>
     <beat-type>4</beat-type>
    </time>
    <clef>
     <sign>G</sign>
     <line>2</line>

...

Emacs ile MusicXML :

Müzik bilgisini MusicXML olarak bilgisayara girmek için Emacs ilk akla gelen editör. Gerekli ortam ve dosyalar :
  1. Emacs editörü
  2. tei (Text Encoding Initiative) kütüphanesi
  3. MusicXML DTD (Document Type Definition, belge tipi tanımı) dosyaları
İlk basamak olarak, Emacs için hazırlanmış olan tei kütüphenesini indirip, yükleyin. Bu kütüphane, XML dosyalarını yazmak ve işlemek için gerekli Emacs uzanım dosyalarını içerir. Bu dosyaların hepsi Lisp ile yazılmış ve değiştirilmeye müsaittir. Tei kütüphenesi, belge yazım DTDleri ile birlikte gelir (docbook, xhtml, vb.). Emacs'in XML modu, menüler ve otomatik tamamlamalar ile XML yazımını kolaylaştırır.

Tei kütüphanesini açın:
        tar -xzvf tei-emacs.tar.gz
.emacs dosyanıza aşağıdaki satırları ekleyin (Kendi sistemim için mutlak yol.)
        (setq teidir "/usr/share/emacs/21.3/lisp/tei-emacs")
        (add-to-list 'load-path (concat teidir "/elisp"))
        (load-library "tei-emacs-init")
İsterseniz yukarıdaki statik çağırma yerine, dinamik olarak, aşağıdaki komutu Emacs'den çağırarak yüklemeyi yapabilirsiniz:  
        M-x load-file /usr/share/emacs/21.3/lisp/tei/tei-emacs/elisp/tei-emacs-init.el
MusicXML dosyalarını indirin. Tei kütüphanesinin Emacs'e sağladığı menüyü MusicXML'i de kapsayacak şekilde değiştirmek için aşağıdaki satırları xmlsgml-setup.el dosyasındaki 'PSGML menus for creating new documents' kısmına ekleyin:
        ( "(XML) Music XML" 
         (concat
            "<?xml version=\"1.0\"?>
        <!DOCTYPE score-partwise SYSTEM \n\"" xmldir "/music/partwise.dtd\" []>"))
Bu dosyayı (xmlsgml-setup.el) yeniden derleyin :
        M-x byte-compile  /usr/share/emacs/21.3/lisp/tei-emacs/elisp/xml/xmlsgml-setup.el
Bu komut, xmlsgml-setup.elc dosyasını yaratacak. Tei kütüphanesini bir sonraki yüklemenizde 'DTDs->Insert' menüsü altında, başka DTD'ler yanında, MusicXML DTD'sini de göreceksiniz.
 

Lilypond

TeX temelli nota yazımı ve şekillendirme ('layout') programıdır ve TeX tabanlı yazılım paketlerinde olduğu gibi WYSIWYG değildir. Lilypond'un esas becerisi, LaTeX'in matematiksel formül şekillendirmesi gibidir. Müzik bilgisini kesin olarak kodlamakla kalmaz, basımevi çıktısı gibi güzel gözükmesini de sağlar. Örneğin, the-heart-asks-pleasure-first.ly önceden hazırladığımız bir lilypond dosyası olsun.
lilypond the-heart-asks-pleasure-first.ly
komutu ile, the-heart-asks-pleasure-first.ly dosyası üzerinde TeX motoru çalışır ve tıpkı tex uzantılı dosyalar gibi önce dvi dosyalarına, sonra da postscript ve pdf (ve png) dosyalarına çevrilirler. Lilypond ayrıca midi dosyası da oluşturur.
the-heart-asks-pleasure-first.tex
the-heart-asks-pleasure-first.pdf
the-heart-asks-pleasure-first.ps
the-heart-asks-pleasure-first.png
the-heart-asks-pleasure-first.midi
dosyalarının hepsini lilypond üretir.

Emacs ile Lilypond

Lilypond, yukarıdaki örnek gibi, komut satırından kullanılabilir. Ancak Emacs editörünün lilypond modu vardır ve bu  mod, Emacs menüsüne eklediği komutlar ile Lilypond yazımını ve derlemeyi grafikselleştirerek, kolaylaştırır.

Aşağıdaki örnek, lilypond dosyasının yapısı hakkında bilgi vermektedir. (Daha karmaşık örnekler için bkz. [6].)

 
              Aşağıdaki png dosyası ise yukarıdaki the-heart-asks-pleasure-first.png dosyasıdır:


Referanslar :

1. Agnula/DEMUDI web site., http://www.agnula.org
2. Debian web sitesi, http://www.debian.org
3. ÖY felsefesi üzerine kapsamlı bir makale, http://www.gnu.org
4. Lilypond için detaylı bilgi, http://www.lilypond.org
5. MusicXML için detaylı bilgi http://www.musicxml.org

 

 

 

Ek 1 : Unix'e giriş:

İşletim Sistemi nedir?

İşletim sistemi sabit bilgisayarda, donanım birimleri ile programlar arasındaki iletişimi sağlarlar. Donanım birimleri, sabit disk, fare, grafik ekran, dinamik bellek vb.dir. İşletim sisteminin kendisi de bir programdır ve bilgisayar açıldığında, bu program bilgisayarın belleğine yüklenir ve çalışmaya başlar. Bu noktadan sonra kullanıcı bilgisayarla iletişirken, aslında işletim sistemi ya da işletim sistemi üzerinde çalışan programlar ile iletişiyordur. Aşağıdaki resim, bu soyutlama tabakalarını gösterir:


Unix'in tarihçesi:
Unix, AT&T laboratuvarlarında 1960'ların sonunda geliştirilmiş bir işletim sistemidir. Solaris, BSD Unix, HP Unix, IBM AIX, SGI Irix Unix'in türevleridir. Ancak, Unix'e gücünü veren işletim sistemi tasarım prensipleri bu türevlerin hepsinde aynıdır. Unix, modüler, çok kullanıcılı ve çok süreçli (multitasking) bir işletim sistemidir.  Süreçlerin, kullanıcıların, dosya sisteminin ve aygıtların yönetimi büyük bir kesinlikle yürütülür.

Unix'den daha yeni olan işletim sistemleri, sözgelimi Windows, olduğu halde Unix halen en iyi işletim sistemidir. Apple bilgisayarlarının işletim sistemi olan MacOS X de Unix-tabanlı çekirdek üzerindedir.

Linux PC üzerindeki Unix'tir

GNU/Linux PC üzerinde koşan Unix olarak düşünülebilir. Aslında Linux bu işletim sisteminin çekirdeği GNU/Linux ise çekirdek ve diğer gereç ve programlar bütününün tamamıdır. Çekirdek işletim sisteminin en temel işlevlerini yerine getiren programdır. Diğer gereç ve programlar ise pencereleme sistemleri, derleyiciler, paket yönetimi, kabuklar, vb. dir.  GNU/Linux'daki en yaygın pencereleme sistemleri de KDE ve GNOME'dur.

GNU/Linux 80'li yıllarda geliştirilmiş ve 90'lı yıllardan itibaren çok yaygınlaşmıştır. Bu yaygınlığın nedeni işletim sisteminin sağlamlığı, hızı, özgürlüğü (özgür yazılım olması) ve parasız olmasıdır. Bu dört özellik de dağıtımdan dağıtıma bazı farklılıklar gösterebilir.

Unix'in modülerliği

Unix'in modüler yapısı süreçlerin, dosya sisteminin ve belleğin kontrolünü mümkün kılar. Süreçler paralel koşan programcıklar olarak düşünülebilir. Bu süreçler koşarlarken, aralarında birbirini doğurma ilişkisi olmadığı sürece, birbirlerini etkilemezler. Aynı şekilde diğer kaynakların işletim sistemi tarafından kullanılması büyük bir kesinlikle kontrol edilir. Örneğin,  bir dosyanın açılıp yazılıyor olması, başka bir dosyayı etkilemez. Hatta, bir dosyanın farklı kişiler tarafından paralel olarak okunması ve yazılması akla yatkın seri bir süreçle halledilir. Böylece farklı süreçlerin, farklı kullanıcıların kullandığı kaynaklar, işletim sisteminin mekanizmalarıyla yönetilir.

Komut satırı mı, grafiksel arayüz mü?

GUI (Graphical User Interface, Grafiksel Kullanıcı Arayüzü) kullanıcının yazılımla, çoğunlukla bir fare kullanarak ve grafiksel bir ekrandan, mesela menüden seçimler yaparak iletişmesidir. Komut satırı iletişimi ise kabuktan komutlar yazarak programla iletişmektir. Tarihsel olarak komut satırı görsel metafora kıyasla daha büyük olanaklar içerir. Sözgelimi bir kabukta kabuk programlama ile dosyaları işleyen program yazılabilirken, GNOME veya KDE'de fare ile dosyalar üzerinde ancak kes-kopyala-sil işlemleri yapılabilmektedir. Ancak komut satırı komutları hatırlamayı gerektirir. GUI ise kullanıcıya seçenekler sunar ve seçmesini ister. Bilgisayarcılar çoğunlukla daha sınırsız olan komut satırını tercih eder. Ancak bilgisayarla sadece uygulama programlarını kullanıcı düzeyinde ilişkisi olanlar, etkileşimin daha fazla olduğu GUI'yi tercih eder.

Unix öğrenme eğrisi

Unix'i (aynı anlama gelmek üzere GNU/Linux'u) öğrenmek demek Unix işletim sisteminin tasarım kriterlerini ve birimlerini bilmek demektir. Bu birimler : Dosya sistemi, bellek, süreçler ve girdi/çıktı (I/O, Input Output)'dir. Unix'i öğrenmek aynı zamanda Unix'in üzerinde koştuğu bilgisayar ile bir kabuk aracılığıyla iletişim kurmaktır. Unix'in öğrenmek başlangıçta, diğer işletim sistemlerine kıyasla, daha büyük bir çaba gerektirir. Ancak, biraz ustalaştıktan sonra, kullanıcıya diğer işletim sistemlerine nazaran daha fazla kontrol imkanı ve rahatlık verir. İlk aşama bir kabuğu etkin bir şekilde kullanabilmek ve bilgisayar üzerinde kabuk aracılığıyla:
  • Unix gereçlerini ve kabuk komutlarını kullanmak;
  • Rutin işlemlerin otomasyonunu sağlayan kabuk programcıkları (shell scripts) oluşturmak;
  • İstenilen uygulama programlarına ulaşmak ve onları kodlamak, derlemek, yüklemek

olarak düşünülebilinir.

Kabuk ortamı, bash ve bash komutları

Bash (Bourne Again SHell) GNU/Linux üzerinde en popüler kabuktur. Kabuk, komutları oku-hesapla döngüsüyle (read-eval loop) bekler ve yapar. Bilgisayarı açıp sisteme girdiğinizde bir terminal açılır ve hesabınızda tarif edilen kabuk sizi bir pencere ve oku-hesapla döngüsüyle karşılar.

Bash dışında Korn kabuğu ve C kabuğu da kullanılır. Sentaks farklılıklar içerse de ifade gücü açısından bu kabuklar arasında çok fark yoktur.

Temel Unix komutları :

Kabukta kullanılacak çok sayıda gereç vardır. Bunların herbiri küçük programlardır:
  • Dosya sisteminde dolaşmak için : ls, cd, pwd.
  • Dosya özelliklerini değiştirmek için : chmod, chown, chgrp.
  • Dosyanın içeriğini görmek için : more, less, wc.
  • Dosyaları silmek/kopyalamak vb. için : cp, mv, rm, ln.
  • Dosya sistemini görüntülemek için : df, mount.
  • Dosya aramak : find, which.
  • Bash'de yönetim : history, exit, bash.
  • Bash'deki ortam değişkenleriyle oynamak: printenv, export.
  • Sistem güvenlik yönetimi : last, who, w, passwd.
  • Süreç yönetimi : ps, kill, nice.
  • Sistem kapatması : shutdown, restart, poweroff, halt.
Bu komutların nasıl ve hangi parametrelerle çalıştığını, hangi dosyalardan etkilendiğini ve etkilediğini anlamak man komutu ile mümkündür.
          ruhan@demudi:~$man ls
ile dosya listeleyen ls komutunun açıklamasını görebilirsiniz. Her komut için böyle bir açıklama sayfası vardır.

Editörler :

Bilgisayar ile bir belge hazırlamak veya bir progam yazmak isteriz. Bunları yapmak için en rahat editör, Emacs'dir. Vi, Unix'deki ilk editördür. Emacs daha fazla etkileşimlidir. Genişletilebilme özelliği ise son derece güçlü ve özgündür.  Emacs'i kabuğunuzda koşturun ve ev dizininizde bir dosya yaratıp kaydedin. Aşağıdaki komutlar bunu yapar:
ruhan@demudi:~$emacs ilkdosya.txt
ruhan@demudi:~$ls -l
Aşağıdaki komutlar ise sırasıyla yarattığınız dosyayı başka bir dosyaya kopyalar, dosyanın içindeki harf, kelime ve satırları sayar, bulunduğunuz dizinde 'txt' uzantılı dosyaları listeler, yarattığınız ilk dosyanın içeriğini kabukta gösterir, komut tarihçenizi kabukta gösterir, ve yarattığınız dosyanın okuma-yazma-koşturma izinlerini değiştirir.

ruhan@demudi:~$cp ilkdosya.txt ilkdosya-kopya.txt
ruhan@demudi:~$wc ilkdosya.txt
ruhan@demudi:~$ls *.txt
ruhan@demudi:~$more ilkdosya.txt
ruhan@demudi:~$history
ruhan@demudi:~$chmod 700 ilkdosya.txt

Pencereleme ortamları : GNOME ve KDE

GNU/Linux üzerinde en başarılı pencereleme sistemleri GNOME ve KDE'dir. Bu sistemler kullanıcıya grafiksel arayüz sağlamakla kalmaz, kullanıcıların programlarına GUI eklemeleri için kütüphaneleri de sağlarlar. GNU/Linux kullanıcısı olarak bir oturumda istediğiniz herhangi pencereleme sisteminizi seçebilirsiniz. GNOME (GNU Network Object Modelling Environment) GNU'nun sistemidir. KDE, ÖY açısından GNU'dan daha az özgürdür.

Referanslar:

  1. Graham Glass, UNIX for Programmers and Users, Prentice Hall, 1993.
  2. http://www.gnome.org
  3. http://www.kde.org

Ek 2 : Sanal MİDİ klavyesi konfigürasyonu:

Qsynth Fluidsynth'in grafik arayüzü, QJackctl ise jackd'nin arayüzüdür.

Üç uygulamayı da açıyoruz :

  Uygulamaları tek tek inceleyelim :

JACK:

Aşağıda JACK programının arayüzü olan QJackCtl'i görüyoruz:   Start ve stop düğmeleri, jackd sunumcusunu kontrol eder. 'Connect' JACK ile diğer programları bağlayan 'damarlardır'. 


Aşağıda ise MIDI damarları:

Patchbay ise bu damarların bağlantılarını gösterir . JACK'ı kullanan yeni programlar açtıkça bu damarlara yenileri eklenecektir.
Qsynth'ı başlattıktan sonra Patchbay :



Virtual MIDI keyboard programını başlattıktan sonra ise Patchbay :

 

Qsynth:

JACK'ı başlattıktan sonra, qsynth'ı çalıştırıyoruz.

 

'Messages' sistemden geri besleme almak ve sorunları görmeye yardımcı olan bir pencere açıyor:


'Setup' dan bir ses fontu ekliyoruz :

 

Virtual MIDI keyboard :


Aşağıdaki XML dosyası JACK'ın FluidSynth ve Virtual Midi Keyboard ile yaptığı bağlantıları gösterir. Bu dosya , QJackctl'in Patchbay kısmında Virtual MIDI de uygulaması da başlatıldıktan sonraki bağlantılardır (Yukarıdaki Untitled4 olara kaydedilecek XML dosyası.)
<!DOCTYPE patchbay>
<patchbay version="0.2.15a" name="sanal-midi-konf" >
 <output-sockets>
  <socket exclusive="off" type="midi" client="Virtual Keyboard" name="Virtual Keyboard" >
   <plug>Virtual Keyboard</plug>
  </socket>
  <socket exclusive="off" type="midi" client="ES[0-9]+" name="ES1371" >
   <plug>ES[0-9]+</plug>
  </socket>
  <socket exclusive="off" type="midi" client="Midi Through" name="Midi Through" >
   <plug>Midi Through Port-0</plug>
  </socket>
  <socket exclusive="off" type="audio" client="qsynth" name="qsynth" >
   <plug>left</plug>
   <plug>right</plug>
  </socket>
  <socket exclusive="off" type="audio" client="alsa_pcm" name="alsa_pcm" >
   <plug>capture_1</plug>
   <plug>capture_2</plug>
  </socket>
 </output-sockets>
 <input-sockets>
  <socket exclusive="off" type="midi" client="FLUID Synth\([0-9]+\)" name="FLUID Synth (3976)" >
   <plug>Synth input port \([0-9]+:0\)</plug>
   <plug>Synth input port \([0-9]+:1\)</plug>
  </socket>
  <socket exclusive="off" type="midi" client="ES[0-9]+" name="ES1371" >
   <plug>ES[0-9]+</plug>
  </socket>
  <socket exclusive="off" type="midi" client="Midi Through" name="Midi Through" >
   <plug>Midi Through Port-0</plug>
  </socket>
  <socket exclusive="off" type="audio" client="alsa_pcm" name="alsa_pcm" >
   <plug>playback_1</plug>
   <plug>playback_2</plug>
  </socket>
 </input-sockets>
 <slots/>
 <cables>
  <cable output="qsynth" input="alsa_pcm" />
  <cable output="Virtual Keyboard" input="FLUID Synth (3976)" />
 </cables>
</patchbay>

 
   


  Yazıların hakları ve sorumluluğu yazarlara aittir © 2006 santralmüzik