Amiga Dünyası sayı 25, sayfa 70

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 70

Gürkaynak Merhabalar. Bir yazı, normal olarak giriş, gelişme ve sonuç bölümlerinden oluşmalıdır. Ne var ki bu ay köşemiz, bu köşeyi yazmak ne zor, af dileme ve asıl yazı kısımlarından oluşuyor. Evet efendim yazıyı hazırlamak zor, bir konuyu mümkünse bir ayda yazıp bitirmemiz gerekiyor. Bu da her ay yani bir konu bulma zorunluluğu getiriyor. Konu anlatılıyor, bir de örnek verilmesi gerekiyor. Ancak bu örneğin Amiga Basic'te çalışması şart, öyle fazla da uzun olmamalı (Yoksa hayat boyu o programı kimse okuyup yazmaz.) En önemlisi çalışmalı. Sözü buraya kadar uzatmamın sebebi bu. Amiga Basic, Microsoft firması tarafından Amiga'ya uyarlanmış bir Basic. Korkarım fazla başarılı olamamışlar. Amiga ile uğraşan bir ekip tarafından yazılmamış olması, bu kullanışsız olmasının temel sebeplerinden biri. Yavaş, kullanışsız olması o kadar değil, ancak bazen insanı yarı yolda da bırakabiliyor (Aynı şey PC Basic'lerinde de söz konusu). Düşünün her şeyi tasarlıyor, hesaplıyorsunuz, el kitabından fonksiyonların nasıl kullanılacaklarını bulup programı hazırlıyorsunuz, o da ne, program isteneni etmiyor. İlk olarak programda kendi hatalarınızı aramak durumundasınız. Ancak buna rağmen hatalı programlar olacaktır. Bu ne yapmalı, size en temiz çözümü önereyim (İnsan ruh sağlığı açısından); bu programı bir süre unutmak. Bir zaman sonra yeniden, ama başka bir teknikle aynı program üzerinde çalışmaya başlarsınız. Aslında size bu ay sevimli bir oyunum olacaktı, ancak (ancağı mancağı yok işte, beceremedik) yukarıda belirttiğim sendroma düştüm. Diyeceksiniz ki, bu kadar kötüledin bu dili, niye bu dille ilgili örnek veriyorsun? Çünkü Basic, şirketten de insanı programcılığa alıştıran en basit dil. Göstermek istiyorum ki bu kadar basit bir dille bile oldukça sevimli ve kullanışlı işler çıkarabiliriz. Her ne ise, artık yazımızın harbi kısmına başlayabiliriz. Madem bu ay oyun yazmayacağız, başka bir konu arama girişimlerine başladım. Daha önce de bazı alıntılar yaptığım Amir R. Amir'in Profesyoneller için Basic (Orjinali Almanca) kitabından ilginç bir program örneği buldum. Bu ay Amiga ile ses yapacağız. Hemen üzülmeyin lütfen, Sound emri ile fazla ilgilenmeyeceğiz: Biz daha çok Soundtracker, Noistracker gibi programların kullandığı örneklenmiş sesleri kullanacağız. Sadece kullanmakla kalmayıp, bu işlerin neyini, nasılı da mele ya Umarım herkes mutludur. İşin sıkıcı fizik kısmı şu: Ses aslında bir titreşimden ibarettir. Bir titreşimin ses açısından önemli iki parametresi vardır. Bunlardan ilki genliktir. Salınım'ın diyebileceğimiz bu değer, sesin volumünü belirler (yani sesin ne kadar sesli olduğunu). İkinci parametre ise frekans adını alır ve saniyede oluşan titreşim sayısına eşittir, birimi ise Hertz'tir (Hz). İnsan kulağı 20 ile 20.000 arasındaki titreşimleri ses olarak algılayabilir. Kısaca ses dediğimiz, bu 20 ile 20.000 Hz arasındaki titreşimlerden ibarettir. Peki bizim sevgili bilgisayarımız sesi nasıl üretebilir? Ses sesler kullanır. Örneklemek demek, bir sesin genliğini belirli aralıklarla kaydetmek demektir. Eğer siz bu örneklenen sesi aynı hızla geri verirseniz ve yeteri kadar sıklıkla örnekler orijinal sese çok yakın sesler elde edersiniz. Amiga bu örnek ses değerleri için 8 bit kullanır. Yani bir andaki örnek ses değeri 0 ile 255 arası bir değer alır (Mesela Compact diskler 16 bit ile çalışırlar ve her örnekleri 0 ile 65535 arasında bir değer alır, dolayısı ile ses kalitesi çok daha olur.). Şimdi basit bir aritmetik kullanalım. Diyelim ki saniyede 10000 örnek almak istiyoruz, 10 saniyelik bir kayıt için 100 Kbyte'a yakın hafıza gerekir. Örnek sayısı düşerse, bu defa sesin anlaşılırlığı Peki bu 10000 örnek/sn'lik sesi biz daha yavaş çalarsak, yavaşlatılmış plak gibi ses bas- Hızlandırırsak da fare sesi gibi incelir. le diyeyim helal olsun, bayağı bir teori kazandınız. Artık ses olayı nedir biliyor Gelelim biraz ne yapabileceklerimize, ses örneklemek bizim konumuz değil. Eğer bir Sound varsa, istediğiniz her sesi alabilirsiniz; şayet yoksa, piyasada bol miktarda örneklenmiş ses mevcut, bunları kullanabilirsiniz. Mutlaka duyanlarınız olmuştur, Amiga'nın en önemli yapı taşları özel olarak geliştirilen entegreleridir. Agnus, Denise ve Paula adı altındaki bu üç temel entegre Amiga'nın başarısında büyük sahibidir. Bu üçlü'nün yaptığı en önemli olay, 68000'den bağımsız olarak hafızaya erişebilmek (DMA, Direct Access) ve ses, disket çıkışlarını kontrol etmektir. Ne var ki bu entegreler, hafızanın her yerine doğrudan ulaşamazlar. Ancak Chip Memory adı verilen e hareket edebilirler. Bu üç entegreye ne yapacaklarını söylemek mümkün. Bunların çalışmalarını kontrol eden bir hafıza bölgesi var, bu sabit hafıza bölgesine Poke yardımı ile bazı emirler yazmak olası (Daha önce de belirtmiştim, Amiga'da $4 dışındaki adresleri sabit kabul etmel YANLI: Bu yaptığımız YANLIŞ, ancak çalıştığı sürece mesele yok!). Bakalım bizlere ses için neler lazım ? 1. Chip RAM'da bulunan ve sesi oluşturan byte dizisi 2. Bu dizinin ne uzunlukta olduğu 3. Bu sesin volumünün değeri (Kısık sesli, son ses) 4. Bu dizinin ne hızla çalınacağı, Bu kadar basit. Yapmamız gerekenleri de özetleyelim: 1, Disketten veya RAM:'dan ses datasını yüklememiz lazım. Bu datayı muhakkak Chip RAM'a kopyalamalıyız, kopyaladığımız yerin başını bilmeliyiz. 2. Yüklenen ses datasının uzunluğunu öğrenmeli 3. Sesi hangi hız ve volümde çalacağımızı belirtmeli 4. Tüm bu bilgileri Kontrol register'larına yüklemeli ve sonra sesi çaldırtmalıyız. Artık işi çıkarıp yavaş Be inle dökme zamanı geldi. İlk ihtiyacınız olan DMA Register'ları ve adresleri olacaktır. Amiga'nın 4 adet ses kanalı olduğundan, tüm register'lardan dörder adet mevcuttur. Bu sayede dört farklı sesi farklı özelliklerle mümkün. AUDXLCH : x numaralı ses kanalına gönderilecek datanın başlangıç adresi buraya LONG olarak (POKEW emri ile) yazılmalı; AUDXLEN : x numaralı kanalda çalınan sesin uzunluğu, WORD olarak WORD cinsinden yazılmalıdır. Bildiğiniz gibi iki byte bir word edecektir, dolayısı ile dosya yarısı bu değeri size verir. Dikkat ederseniz, buraya uzunluk WORD olarak girilecektir. Bu yüzden bir kanaldan çalabileceğiniz en uzun ses, 131070 byte'çık olacaktır. Bu uzunlukta ses sizi tatmin etmeli, yok yetmediyse bunu le ve yolu var, ancak konu dışına taşmadan bu kadarı ile yetinelim. AUDXxVOL : x numaralı kanalın ses yükseklik (Volüm) değeri, Bu değer 0 ile 64 arasında bir sayı olmalı ve WORD olarak ile) yazılmalıdır. 0 ile sesin duyulmamasını 64 ile son ses çıkmasını sağlayabilirsiniz. AUDXPER : x numaralı kanaldaki sesin çalınma hızını belirler, maalesef burada Hz cinsinden hızı belirlemek mümkün değil. Bu sayı WORD olarak girilmeli, dolayısıyla teorik maksimum 65535, ancak 1000 değeri neredeyse her sample için çok yavaş ve 1 değeri de en hızlı kaçıyor, kısacası bu sayıyı 1 ile 1000 arasında tutmalısınız. DMACON: Bu register'a yazarak istenen ses kanalını açıp kapatmak mümkün. Buraya aç 1 0 numaralı kanalı kapa 32770 1 numaralı kanalı aç 1 numaralı kanalı kapa 32772 2. numaralı kanalı aç

4 2 numaralı kanalı kapa â 3 numaralı kanalı kapa 382776 3 numaralı kanalı

DMACON'un adresi ise HEX DFF096 veya Türkçe 14676118 (14 676 118). Buraya da POKEW komutu ile erişeceğiz. 0 numaralı kanalı açabilmek için, POKEW 14676118&,32769& ve sonra yeterince dinledikten sonra POKEW ile de kanalı kapayacağız. Belirtmeme gerek yok bu emri kullanmadan önce diğer register'larda mantıklı değerler olması şart. İşte öbür yi listesi ADI. HEXADRES Decimal Adres AUDOLCH 14676128 AUDILCH DEFOBO 14676144 AUD2LCH DEFOCO 14676160 AUD3LCH DFFODO 14676176

Klavyeyle gezinmek için ← ve → tuşları.