AMOS THE CREATOR
Retro bilgisayar
Merhaba arkadaşlar. Bu ay, AMOS'un ses komutlarını anlatmaya başlayacağım. Fakat bundan önce sizlere AMOS update disketi hakkında bilgi vermek istiyorum. Bu disketi kullanarak, elinizdeki AMOS programını update etmeniz mümkün. Böylece AMOS'taki bazı bug'lardan kurtulmuş olacaksınız. Bundan başka programa bir takım yeni özellikler de getirilmiş. Şimdi bunları inceleyelim:
İlk olarak AMOS'un bazı hatalarına bakalım. AMOS'un ilk şeklindeki 'help accessory' ve 'garbage collection', programın crash etmesine neden oluyordu. Bundan başka 'dir', 'hard', 'scan', 'plot', 'val', 'def fn', 'close workbench', 'sqr', 'log', 'I sprite', 'I bob', 'amal play', 'amplay', 'amal or', 'errn', 'control+c', 'control+s', 'get fonts', 'menu to x,y', 'unpack', ve 'set tab' komutlarında da hatalar vardı. Ayrıca Amiga Genlock ile beraber kullanıldığında iyi resim alınamıyordu. Programın yeni şeklinde bütün bu hatalar düzeltilmiş. Bundan başka programın 'file selector'ü de düzeltilmiş. Programın getirdiği diğer yenilikleri daha sonra anlatacağım. Şimdi ses komutlarına geçiyorum.
KOMUT: Boom KULLANILIŞ:
Boom
Bu komut yardımıyla, bir patlama sesi yaratılır. Örneğin; Boom:Print "fire"
KOMUT: Shoot
KULLANILIŞI:
Shoot
Bu komut ateş etme sesi verir.
KOMUT: Bell KULLANILIŞI:
Bell [f]
Bu komut yumuşak bir ses verir. Sesin tizliği ya da pesliği 'f' ile ayarlanır, f'nin alabileceği değerler, '1' ile '96' arasındadır. '1' kalın, '96' da ince bir ses verir.

Rem**
AMIGA
DÜNYASI
**
Rem** AMOS DEMO PROGRAM **
Rem** Written by Burak Ozdemir **
Rem** AMOS Copyright 1990 **
Rem**
Mandarin/Jawx
**
For F=l To 50 Step 2
For 1=1 To 20
Bell I+F
Wait 5
C,;>
Next I
NextF
Ses komutlarına daha fazla devam etmeden önce, sizlere biraz da Amiga'nın ses kanallarından söz etmek istiyorum. Amiga'nın donanımı gayet rahat bir şekilde dörde kadar sesi aynı anda verebilecek kapasitededir. Bu, çok zengin ses efektleri yapılmasına olanak verir.
Her ses, ses kanallarından birine verilir. Ses kanalı numaraları, '0' ile '3' arasındadır. Bu sesler Amiga tarafından birleştirilir ve ses çıkışlarına yollanır.
AMOS'un ses komutları ile, bu kanallardan herbirine ulaşmanız mümkündür. Bunları 'voice' parametreleri ile ayarlayabilirsiniz. Her bit, bir kanalı ifade eder. Bitlerin dizilişi aşağıdaki gibidir:
Bit 0 Birinci kanal Bit 1 İkinci kanal Bit 2 Üçüncü kanal Bit 3 Dördüncü kanal Bu sıraya göre 'Voice' parametresini ayarlayarak, aynı anda birden fazla kanala da ulaşmanız mümkündür. Buna örnek olarak aşağıdaki listeyi verebilirim:
Parametre Değeri Kanallar 15 0,1,2,3 9 0,3 8 3 6 1,2 4 2 2 1 1 0
Şimdi komutlarımıza devam edelim.
KOMUT: Volume KULLANILIŞI:
Volume [s,] şiddet
Bu komut, kanalların her birine ait ses yoğunluğunu belirler. Ses şiddeti 0 ile 63 arasında değerler alabilir. Sayı büyüdükçe ses şiddeti de artar. Eğer 's' parametresi verilmemişse, verilen ses şiddeti bütün kanallar için geçerli olur. Fakat isteğe göre verilen bu parametre yardımıyla kanallara teker teker ulaşmanız mümkündür.

Rem**
AMIGA
DÜNYASI
**
Rem** AMOS DEMO PROGRAM **
Rem** Written by Burak Ozdemir **
Rem** AMOS Copyright 1990 **
Rem**
Mandarin/Jawx
Print "Bu program random sesler üretir."
Print "seslerin şiddeti mouse ile ayarla-
nir"
Do
V=Y Mouse
V=287-V
V=(V*63)/256
Volume V
Bell(Rnd(96))
Loop
DERLEYİCİLER
KOMUT: Play KULLANILIŞI:
Play [s,] ton, g
Bu komut, istediğiniz bir notayı çalabilmenizi sağlar, 'g' parametresi, programın bir sonraki komuta geçmesi için ne kadar bekleyeceğini belirtir. Bunun birimi de, her zamanki gibi dikey karartma periyodu cinsindendir. 'ton' parametresi ile, notaları seçebilirsiniz. Bunun için aşağıdaki tablodan faydalanabilirsiniz.
Oktav 0 1 2 3 4 5 6 7 Ton C 1 13 25 37 49 61 73 85 C# 2 14 26 38 50 62 74 86 D 3 15 27 39 51 63 75 87 D# 4 16 28 40 52 64 76 88 E 5 17 29 41 53 65 77 89 F 6 18 30 42 54 66 78 90 F# 7 19 31 43 55 67 79 91 G 8 20 32 44 56 68 80 92 G# 9 21 33 45 57 69 81 93 A 10 22 34 46 58 70 82 94 A# 11 23 35 47 59 71 83 95 B 12 24 36 48 60 72 84 96
Aşağıdaki örnek programda play komutu kullanılmıştır.

Rem***************************
Rem**
AMIGA
DÜNYASI
**
Rem** AMOS DEMO PROGRAM **
Rem** Written by Burak Ozdemir **
Rem** AMOS Copyright 1990 **
Rem**
Mandarin/Jawx
Rem***************************
For 1=0 To 20 Step 2
Locate 0,0
Print "Bekleme suresi =";I
Play 1,37,1
Play 2,41,1
Play 4,44,1
Play 8,49,1
Wait Key
Next I
KOMUT: Set wave KULLANILIŞI:
Set wave d,s$
Bu komut yardımıyla, vermek istediğiniz sesin dalga şeklini ayarlayabilirsiniz. Dalga şekli, dergimizde daha önce çıkan yazılarımızdan birinde de anlatıldığı gibi sesin tınısını, yani karakterini belirler.
'd' parametresi, ses numarasını belirler. Bu parametrenin alabileceği en küçük değer iki'dir. Sıfır ve bir numaralı sesler zaten tanımlanmıştır. Sıfır numaralı ses bir çeşit gürültü sesidir. Bir numaralı ses ise bir sinüs dalgasıdır.
's$' parametresi, dalganın şeklini belirleyen bir string'dir. Bu string 256 tane sayı içerir. Sayıların değeri 0 ile 255 arasındadır. Bunun yapılması için ilk gereken şey, dalga şeklinin bilinmesidir. Bundan sonra matematiksel yollarla veya grafik üzerinden bakarak dalganın anlık değerleri, -128'den 127'ye kadar numaralanır. Bu tablo, s$ içine direkt olarak yerleşemez; çünkü bir byte'ın alabileceği değerler 0 ile 256 arasındadır. Bunu sağlamak için negatif sayılara 256 sayısını ekleyerek yeni bir sayı elde ederiz. Bundan sonra da, bu sayıları s$ içine yerleştiririz.
KOMUT: Wave KULLANILIŞI:
Wave d to k
Bu komut ile, set wave ile hazırladığımız dalga şekillerini ses kanallarına aktarabiliriz. Burada 'd' dalga numarası, 'k' de daha önce anlattığım 'voice' parametresidir.
Aşağıdaki programı son iki komutun kullanılışına örnek olarak yazdım. Bu programla değişik sesler elde edebilirsiniz. Program Fourier teoremine göre çalışır.
Rem***************************
Rem**
AMIGA
DÜNYASI
**
Rem** AMOS DEMO PROGRAM **
Rem** Written by Burak Ozdemir **
Rem** AMOS Copyright 1990 **
Rem**
Mandarin/Jawx
Rem***************************
Dim A(10)
Dim RAW#(256)
Print "Bu program"
Print "basit bir fourier sentezleyicisidir"
Print "sirayla vereceğiniz 10 tane katsayi"
Print "harmoniklerin yogunluklarini be-
lirler"
Do
For 1=0 To 9
Print "a";I;"=";
Input A(I)
Print
Next I
Cls
Print" Harmonikler hesaplaniyor"
Degree
K#=360.0/256.0
For 1=0 To 255
TEMP#=0
ForF=lTo 10
Q#=Sin(I*K#*F)
Q#=Q#*A(F-1)
TEMP#=TEMP#+Q#
Next F
RAW#(I)=TEMP#
If TEMP#<LB# Then LB#=TEMP#
If TEMP#>HB# Then HB#=TEMP#
Next I
SC#=Max(LB#,HB#)
SCALE#=126.0/SC#
Cls
Print
Print "genlik ayarlaniyor"
Print
For 1=0 To 255
RAW#(I)=RAW#(I)*SCALE#
PlotI,127+RAW#(I)/2
Next I
Print" negatif değerler düzeltiliyor"
For 1=0 To 255
If RAW#(I)<0 Then RAW#(I)=RAW#
(I)+255.2
S$=S$+Chr$(Int(RAW#(I)))
Next I
Set Wave 3,S$
Wave 3 To 1
Print "Tekrar denemek için Mouse tuşu-
na basin"
Do
Play 1,49,40
If Mouse Key>0 Then Exit
Loop
Cls
Loop
Bu aylık bu kadar sevgili okurlar. Gelecek ay görüşmek üzere hepinize iyi 'Wave'ler.