 Ŀ
 Ŀ
                                                                         
                        QuickBasic ve Ses Kart                          
                                                                         
 ٳ
  PS 26  Eyll'95                                      Grol Demir        
 



         Geen sayda; "retilen bir maln kalitesi yannda bu maln sunumu
  da nemlidir. Bilgisayar  alannda  son  yllarda  grsel  ve iitsel
  anlamda bir seri gelimeler olmutur. Gnmz programclnda yaplan
  programlara grafik ve ses zellikleri eklemeye ihtiya duyulmaktadr. Bu
  yazmzda programlarn grsel sunumlarnn glendirilmesi amacyla,
  bilgisayarda resim teknolojisine (skc ayrntlara girmeden) bilgimiz
  dahilinde ksaca deinilecektir." eklinde bir giri yapm ve basic
  zerinden resim kullanmna rnekler vermitik. Bu saymzda ise ayn
  dnceye paralel olarak ses kart hakknda basic dili asndan ve sadece
  sound blaster ve uyumlu kartlar ile snrl tutularak bilgiler verilecektir.


 Ŀ
ĴSistemde Ses Kart olup olmadnn aratrlmas
 


         Bilgisayarn ses kullanmak iin sahip olduu i hoporlrn adresi
  &H61 olup, bu adres her bilgisayar iin sabittir (&H iareti basic'de
  hexedesimal yani 16 tabanl say ifadesi iin kullanlmaktadr).
  Ses kart ise ses kartnn markas ve trne gre deiik adresleri
  kullanr. Bulabildiim kadaryla;


              Ŀ
                  Ses kart cinsi  Kulland adres
              Ĵ
                  Sound Blaster       &H210        
                    "     "           &H220        
                    "     "           &H230        
                    "     "           &H240        
                    "     "           &H250        
                    "     "           &H260        
                  Roland              &H300        
                     "                &H310        
                     "                &H320        
                     "                &H330        
                     "                &H340        
                     "                &H350        
                     "                &H360        
                  Ad lib              &H388        
                  Disney              LPT1         
                    "                 LPT2         
                    "                 LPT3         
              
  eklinde adresler kullanlmaktadr.

         Bir programn sistemde ses kart olup olmadn bulabilmesi iin
  yapmas gereken ey bu adreslere tek tek bakmaktr.Sound blaster iin bu
  adreslere baklrken aadaki  portdan yararlanlr;

        Taban+6    Ses kartn resetlemek iin,
        Taban+14   Tepki gelip gelmedii anlamak iin,
        Taban+10   Gelen tepkinin saysal deerini renmek iin kullanlr.

  Yaplacak ilemi ksaca zetleyelim:

        Taban+6 adresine nce 1 deerini gnder,biraz bekle, sonra 0 deerini
  gnder. Taban+14 adresinde bir deiiklik olup olmadna bak eer oldu ise
  bu kez de Taban+10  adresindeki deeri al, burdaki deer 170 ise sistemde
  baklan adresde ses kart var demektir.

  Aada verilen basic kodu olas btn adreslerde ses kartn arar.

ķ
   DIM Adres(6)                                                     
   Adres(1) = &H210                                                 
   Adres(2) = &H220                                                 
   Adres(3) = &H230                                                 
   Adres(4) = &H240                                                 
   Adres(5) = &H250                                                 
   Adres(6) = &H260                                                 
                                                                    
   FOR I = 1 TO 6                                                   
       GOSUB Seskartara                                             
   NEXT                                                             
                                                                    
   IF Sbase=0 THEN                                                  
      PRINT "Ses kart yok..."                                      
   ELSE                                                             
      PRINT "Ses kart adresi";HEX$(Sbase)                          
   END IF                                                           
                                                                    
   END                                                              
                                                                    
   Seskartara:                                                      
      Taban = Adres(I)                                              
      GOSUB SesKartTetikle                                          
      GOSUB SesKartVarveyaYok                                       
      IF Var = 1 THEN Sbase = Taban                                 
   RETURN                                                           
                                                                    
   SesKartTetikle:                                                  
   'lk deerler gnderiliyor                                       
      A = INP(Taban + &HE)                                          
      OUT Taban + 6, 1                                              
      A = INP(Taban + 6)                                            
      A = INP(Taban + 6)                                            
      A = INP(Taban + 6)                                            
      OUT Taban + 6, 0                                              
   RETURN                                                           
                                                                    
   SesKartVarveyaYok:                                               
   Var = 0                                                          
   FOR Y3 = 1 TO 10                                                 
       IF INP(Taban + &HE) AND 128 <> 0 THEN                        
          IF INP(Taban + &HA) = 170 THEN                            
             Var = 1                                                
             EXIT FOR                                               
          END IF                                                    
       END IF                                                       
   NEXT Y3                                                          
   RETURN                                                           
ͼ

        Tabii ki bu yntem sadece ses kartnn olup olmad ve eer varsa
  kulland adresi bulur. Ses kartnn kulland adres yannda ayrca IRQ'su
  da bulunmak isteniyor ise SESBUL.BAS isimli basic kaynak kodunu tetkik etmek
  gerekecektir.(Ad geen program bu saymz ile verilmektedir).


 Ŀ
ĴSes Kartnda ilenen sesin zellikleri
 

         Ses kart yoluyla  tip ses ilenebilir.

         a) FM : Frekans Modulatr. En basit ve temel ses tipidir. Temel
  mant hoperlre belirli aralklarla akm gndermeye dayanr.Ses
  kartlarnn yan sra, i hoperlr de ayn yntemle ses retir. Basic'den
  rneklersek;

         'SOUND frekans,Zaman
         SOUND 300,18

  eklindeki bir komutla retilen sesdir.

         Yukardaki komutda '300' sesin frekans, 18 ise sesin saniyenin
  1/18.2 cinsinden sresidir.Bu komutla i hoperlre saniyede 300 defa olmak
  zere yaklak bir saniye akm gnderilmekte ve bu yol ile ses elde
  edilmektedir. Frekans deitirilerek deiik sesler elde edilebilir.nsan
  sesi ise yaklak olarak 30-4000 frekanslar arasna olduundan FM yntemi
  ile insan sesi programlanmas zor da olsa rneklenebilir.

         FM sesi bunlardan ibaret deildir.Ses kartnn Pc'ye yerleik
  hoparlrle kyaslanmayacak stnlkleri vardr. Sesin azaltlp oaltlmas
  sadece bir stnle rnektir.

         b) MIDI : Mzik aletleri arasnda iletiim salamak iin
  gelitirilmi bir standartdr. Oldukca kapsaml bir konu olup ksaca yle
  zetlenebilir; birden fazla mzik aleti MIDI ara kablosuyla birbirine
  balanr gnderici alet alnmas gereken notann bilgisini midi hattna
  gnderir, alc alet de bu notay alar.

         Gnmzde birden fazla aletin birbirine fiziken balanmas zordur.
  Bunun yerine bir gnderici alet ounlukla bir org kullanlr ve alc
  aletlerin sesleri rneklenerek elekronik bir devre halinde bu orga monte
  edilir. Siz orgda "do" notasna bastnzda bu midi bilgisine evrilerek
  bahsedilen seslerin rneklendii elektronik devreye gidecek ve seilen
  alc alete (diyelim ki bir gitar) ait bu notann rneini bulacak ve
  baslan tua denk gelen gitardaki "do" notasn karacaktr.

         MIDI ile sadece mzik aletlerine ait sesler karlabilir.Bilgisayar
  dier mzik aletleri ile gnderici ve alc olarak iletiim kurabilir.Sadece
  mzik yapmak iin midi esiz bir yoldur. Midi yoluyla yaplan ses retimi
  programlar oldukca ksadr.

        c) VOICE: Doadaki seslerin ister insan sesi, isterse mzik aleti
  sesi, ne sesi olursa olsun rneklenmesi yntemidir.nsann duyabilecei
  btn sesler rneklenebilir.

        Sesler analog zelikte olduklarndan girite sesin saysal hale
  getirilmesi iin ADC biriminden gemesi gerekir.ADC birimi (Analog to
  Digital Convertor), gelen sesi say ile ifade edebilecek hale dntrr.
  Bunun iin iki l kullanr.

        i)Sesin idddeti : Baran bir insan iin yksek, fslt iin dk
  bir deerdir. Ses kaynann volme (dmesi) eklinde de ifade edilebilir.

        ii)rnekleme Frekans : Sesin iddetinin saniyede ka kere llecei
  bilgisidir.

        Ses kaynandan gelen sesler ADC vastasyla saniyede belirlenen
  frekans kadar sesin iddeti llmek suretiyle saysal verilere
  dntrlr ve herhangi bir ortamda (disk, memory vb) saklanr.

        Saklanan bu verinin sese dntrlmesi iin de bu kez DAC (Digital
  to Analog Convertor) birimi kullanlr. DAC birimi, ADC birimin yapt iin
  tersini yapar. Yapt i zetle: saysal veriler deerindeki elektrik
  akmlarn hoperlre belirlenen frekans hznda srasyla gndermektir.

        Voice ses yntemi ile btn sesler rneklenebilir. Programlanmas da
  son derece basittir.Dezavantaj saklanan verilerin ok byk boyutlarda
  olmak zorunda olmasdr.

        rnein 10000 frekansda bir saniyelik gitar sesi 10000 byte yer
  tutar. Oysa ayn sesi midi yntemiyle (alet tipi + nota bilgisi) 2 byte ile
  ifade edebilirsiniz.

        Programlama admlarnn basitiinden dolay Voice sesin mikrofondan
  alnp kaydedilmesi ve tekrar ayn sesin retilmesi olayna bir bakalm.


 Ŀ
ĴVoice tipi sesin kaydedilmesi
 

         Ses kartnn bir adreste olmas gerektii ve nasl bulunacan
  belirtmitik. Vereceimiz rneklerde kullanacamz Taban+? ifadesindeki
  Taban=Ses kartnn bulunduu adresi, ?=Taban adresine ilave edilecek deeri
  ifade edecektir.

         Taban+6 ifadesi, &H220 adresinde bulunan ses kartnda &h226 adresini
  belirtmektedir.

  imdi yapmamz gerekenlere bir gz atalm.

              1 - Ses kartn resetlemek :

         Taban+6 adresine 1 deerini gnderiyoruz,3.3 mikrosaniye bekliyoruz,
  ayn adrese (Taban+6) bu kez 0 deerini gnderiyoruz, Taban+&HE adresindeki
  deeri okyoruz, bu deerin 128 ile AND mantksal ilemi sonucu sfr ise
  ses kartnn resetlenmesi tamamdr.


ķ
  'Ses Kart resetleme                                                 
  Taban = &H220                                                        
  OUT Taban + 6, 1                                                     
  A = INP(Taban + 6)                                                   
  A = INP(Taban + 6)                                                   
  A = INP(Taban + 6)                                                   
  OUT Taban + 6, 0                                                     
                                                                       
ͼ

              2 - ADC'nin programlanmas ve sesin alnmas :

              Bu olay assembly bir program modl ile anlatalm.

ķ
 KucukDongu:                                                              
 mov dx,220h       ;Taban adresi dx'e aktarlyor                         
 add dx,0eh        ;Taban+&HE adresindeki deer ah'de saklanyor          
 in al,dx                                                                 
 mov ah,al                                                                
                                                                          
 sub dx,2          ;Taban+&HC adresine &H20 deeri gnderilerek           
 mov al,20h        ;Analogdan saysala eviri yap komutu veriliyor        
 out dx,al                                                                
                                                                          
 mov cx,150        ;rnekleme frekans iin bekleme salanyor            
 Frekans:                                                                 
 loop Frekans                                                             
                                                                          
 MinikDongu:                                                              
 in al,dx          ;Taban+&HC adresindeki deer yorumlanyor              
 and al,80h        ;Ses Kart hazr olana kadar bekleme salanyor        
 jne MinikDongu                                                           
                                                                          
 add dx,2          ;Taban+&HE adresindeki eski deerle                    
 VeriGeldimi:      ;ayn adresdeki yeni deer kyaslanyor                
 in al,dx          ;deiiklik varsa ses geldi demektir.                  
 cmp al,ah                                                                
 jz VeriGeldimi                                                           
                                                                          
 sub dx,4          ;Taban+&HA adresinden gelen sese ait deer             
 in al,dx          ;okunuyor, bu deerin bir dosyaya yazlmas ilemi     
                   ;gerekir iken ihmal edilmitir                         
                                                                          
 Jmp KucukDongu    ;Olay tekrarla                                        
                                                                          
ͼ


         Sesin alnmas iin yaplmas gerekenler temel olarak bunlardr.
  Sesin dosyaya kaydedilmesi iin deiik yntemler kullanlabilir.Kaydedilen
  sesin daha sonra bir ses dosyas formatna (.Voc) evrilmesi de gerekir.Bu
  ilem direkt sesin kaydedilmesi safhasnda da yaplabilir.

          kinci olarak rnekleme frekans iin gereken beklemeyi salamak
  zere eitli yntemler kullanlabilir. rnekde ben 150 sabit saysn
  kullandm ama esas olan int 8 veya int 1ch kesmesinden yararlanmaktr. Ses
  kartnn kendi IRQ'sundan yararlanlmas ise farkllklar nedeniyle tercih
  edilmemektedir.

         Sesin bir dosyaya kaydedilmesi ve bu sesin sonradan bir .Voc dosya
  formatna evrilmesi olay Blaster.Bas isimli programda bulunmaktadr.


 Ŀ
ĴVoice tipi sesin dinlenmesi
 

         Bu olay da yine program ile anlatalm.

ķ
                                                                           
   mov dx,220h    ;Taban adresini dx'e aktaryoruz                         
   add dx,0ch     ;Kullanacamz port Taban+&HC adresi olacak             
                                                                           
   mov al,0d1h    ;Hoperlr ayoruz                                      
   out dx,al                                                               
                                                                           
   Musaitmi:      ;Ses kart hazr olana kadar bekleniyor                  
   in al,dx                                                                
   and al,80h                                                              
   jne Musaitmi                                                            
                                                                           
   mov cx,150      ; rnekleme frekansnda belirtilen sre kadar bekleniyor
   Bekle:                                                                  
   loop Bekle                                                              
                                                                           
   mov al,10h      ; DAC programlanyor, bundan sonra                      
   out dx,al       ; gelen saysal veriyi sese evir emri veriliyor        
                                                                           
   BeniBekle:      ;Ses kart hazr olana kadar bekleniyor                 
   in al,dx                                                                
   and al,80h                                                              
   jne BeniBekle                                                           
                                                                           
   mov al,ds:[si]  ; saysal veriyi alyoruz                               
   out dx,al       ; sesi hoperlre gnder                                 
   inc si          ; saysal veri ds:[si] 'de adresleniyor varsaylyor    
   jmp Musaitmi    ; olay tekrarla                                        
                                                                           
ͼ


        .Voc Dosya formatnda kaydedilmi bir sesin dinlenmesi olayna
  Blaster.Bas isimli programda ayrntl olarak deinilmitir.

         Ses kart programlanmas oldukca geni bir konudur. Piyasada ok
  eitli ses kartlar vardr. Dier taraftan ok eitli ses dosyas format
  bulunmaktadr. Ses kartnn anlatlmas iin yazlm kitaplar bile
  yeterince baarl deildir.

         Bu yazmz genelde bir bilinmeyen olan ses kartndan, basic dilinde
  dier programlarda da geerli bir .Voc dosya kaydetmek ve hangi program ile
  kaydedilmi olursa olsun bu .Voc dosyay dinlemek zerine yaplm Blaster
  isimli basic programndaki yaplanlar aklamak iin yazlmtr.

         Ama ses kart dnyasna basic dili ile bir adm atmaktr.

         Gelecek ay asenkron iletiim ve Trke iletiim program ile birlikte
  olmak dileiyle hoakaln.