AMOS THE CREATOR

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.