SDL_Mixer SDL  ktphanesinde  ses  ve  mzik  kullanmn  kolaylatrmak  iin
gelitirilmi bir  ktphanedir. Ses  ve mzik  dosyalarn yklemek  ve  almak
zere iinizi kolaylatracak  birok fonksiyona  sahiptir. ncelikle  SDL_Mixer
ktphanesi ile kullanabileceiniz dosya formatlar;
- WAVE/RIFF (.wav)
- AIFF      (.aiff)
- VOC       (.voc)
- MOD       (.mod .xm .s3m .669 .it .med ve fazlas)
- MIDI      (.mid)
- OggVorbis (.ogg)
- MP3       (.mp3)
 
Hemen  kullanmn  anlatmaya  geiyorum.  Projenize  SDL_Mixer'  eklemek  iin
derleyiciye  -lSDLMixer  bayran  eklemeniz  gerekmektedir.  Include   etmeniz
gereken   tek bir  dosya  var, SDL_Mixer.h  dosyas. Bunun  dnda  SDL_Mixer'
kullanrken dikkat etmeniz  gereken birey daha  var. SDL_Mixer'  kullandnz
srada  SDL'in    kendi  iindeki  ses   sistemi   ile  ilgili   birka   komutu
kullanamyoruz. Bunlar;
SDL_OpenAudio 
    Yerine Mix_OpenAudio 'yu kullann.  
SDL_CloseAudio 
    Yerine Mix_CloseAudio 'yu kullann. 
SDL_PauseAudio 
    Yerine Mix_Pause(-1) ve Mix_PauseMusic'i kullann.
    Yerine Mix_Resume(-1) ve Mix_ResumeMusic'i kullann.
SDL_LockAudio 
    Bu ii SDL_Mixer sizin iin hallettii iin kullanmanz gerekmeyebilir.
    Yine de kullanmak problem yaratabilir.
SDL_UnlockAudio
    Bu ii SDL_Mixer sizin iin hallettii iin kullanmanz gerekmeyebilir.
    Yine de kullanmak problem yaratabilir. 


Aadaki komutlar ise rahatlkla kullanabilirsiniz.

SDL_AudioDriverName 
    Normal ekilde alacaktr. 
SDL_GetAudioStatus 
    Bu da sorunsuzca alacaktr, ama byk ihtimalle sessiz durumdayken
    bile SDL_AUDIO_PLAYING deerini dndrecektir.
 
SDL_Mixer iindeki fonksiyonlara  ve kullanmlara  gelirsek, nce  Mix_OpenAudio
ile balamalyz.  Bu  komut  ile  SDL_Mixer    ses  sistemini   amaya   yarar.
 
int Mix_OpenAudio(int frequency,  Uint16 format, int  channels,  int  chunksize)
 
frequency ses  ktsnn frekans  deerini belirtir.  Oyunlar   iin uygun  bir
deer olarak  MIX_DEFAULT_FREQUANCY  adyla   tanmlanm  olan  22050  deerini
kullanabilirsiniz. Ayrca  44100 deerinide  kullanabilirsiniz  ki bu  deer  CD
audio    frekans  deeridir.  Ama  bu  deer  daha  fazla  CPU   gc   tketir.

format   ses   ktsnn   formatn    belirtir.   zel   bir   durum    yoksa
MIX_DEFAULT_FORMAT deeri iinizi grr.
 
channels ses  ktsnn ka  kanall  olduunu belirtir.  Stereo iin  2,  mono
iin 1 deerini verin.
 
chunksize ise ses kts iin kullanlacak byte'lardr.
 
Format iin kullanabileceiniz dier seenekler:
AUDIO_U8 
    aretsiz 8-bit sesler
AUDIO_S8 
    aretli 8-bit sesler
AUDIO_U16LSB 
    aretsiz 16-bit samples, little-endian byte dzeninde
AUDIO_S16LSB 
    aretli 16-bit samples, little-endian byte dzeninde
AUDIO_U16MSB 
    aretsiz 16-bit samples, big-endian byte dzeninde
AUDIO_S16MSB
    aretli 16-bit samples, big-endian byte dzeninde
AUDIO_U16 
    AUDIO_U16LSB ile ayn (geriye  uyumluluk  iin  byk  ihtimalle)
AUDIO_S16 
    AUDIO_S16LSB ile ayn (geriye  uyumluluk  iin  byk  ihtimalle)
AUDIO_U16SYS
    aretsiz 16-bit samples, sistemin byte dzeninde
AUDIO_S16SYS 
    aretli 16-bit samples, sistemin byte dzeninde
	
MIX_DEFAULT_FORMAT AUDIO_S16SYS ile ayndr.
 
Chunksize  iin   uygun  bir   deer  olarak   4096  verebilirsiniz.   Ama   ses
efektlerinin  arkaplanda  gereinden  uzun  sre  srdn  dnyorsanz   bu
deeri  kk   tutmay   deneyebiliriniz.   Yalnz   deer   kldke   yava
sistemlerde ses ktsnn atlanmas olasdr.
 
Fonksiyon baarl olarak sona  ererse 0, hata verirse  -1   deerini  dndrr.
 
ses ortamn amak iin rnek kod:
if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)==-1)
{
    fprintf(stderr, "Mix_OpenAudio:    %s\n", Mix_GetError());
    exit(2);
}
 
veya:

if(Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096)==-1)
{
    fprintf(stderr,   "Mix_OpenAudio:    %s\n",   Mix_GetError());    
    exit(2); 
} 
 
Ses   sistemini   atktan    sonra    kapatmak    iin     ise    MixCloseAudio
fonksiyonunu kullanrz. Kullanm olduka basittir.
 
kapatmak iin rnek kod:
Mix_CloseAudio();
 
Ses sistemini  ap kapatabiliriz.  imdi srada  biraz ses   karmak  var  :).
SDL_Mixer ile birok  yaygn formattaki ses  dosyasn kolayca hafzaya  ykleip
alabilirsiniz.    SDL_Mixer'da     alacanz     dosyalar     iki     tiptir.
1- Sample
2- Music
 
Sample'lar basit ses  efektleridir diyebiliriz.  Veya ufak  ses dosyalar.  Daha
da basite  mzik  paras  olmayan  ses   dosyalardr  dersek  sanrm  yanl
olmaz.  Hafzada  bir  sample   verisi  saklarker  kullanacamz  yapnn   ad
Mix_Chunk 'tr. Ses  dosyasn hafzaya  yklerken   kullanacamz komutun  ad
da  Mix_LoadWav()  'dr.   Ad  sizi  yanltmasn,   bu  fonksiyon  sadece   wav
dosyalarn deil; wave, aiff, riff, ogg ve voc dosya  formatlarn  okuyabilir.


wav yklemek iin rnek kod:

Mix_Chunk *sample;
 
sample=Mix_LoadWAV("sample.wav");
if(!sample)
{ 
    fprintf(stderr, "Mix_LoadWAV: %s\n", Mix_GetError());
    // hata olursa diye 
} 
 
Programmz kapatrkende yklediimiz  ses dosyalarn   hafzadan silmek  iin
Mix_FreeChunk komutu kullanlr.
 
rnek: 
Mix_FreeChunk(sample);
sample=NULL;
 
Ses  dosyalarn  almak da   bu  kadar  basit,   Mix_PlayChannel    komutu  ile
gerekletiriliyor.
 
almak iin:

if(Mix_PlayChannel(-1, sample, 1)==-1)
{ 
    fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError());
}


lk parametre ses dosyasn  alacak kanal belirtir. -1  deeri  ilk uygun  ses
kanalna bu  grevi verir.  kinci  parametre   alnacak olan  ses  dosyasdr.
nc parametre  sample'n   ka defa  alacan belirtir.  Bir hata  oluurdu
sample alnamazsa fonksiyon -1 deerini dndrr.
 
SDL_Mixer  iinde   ayrca   ses   dosyalarn  alarken   basit      efektlerde
uyguluamanz salayan  fonksiyonlar bulunmaktadr.   rnein  Mix_FadeInChannel
fonksiyonu ile bir ses  dosyasn  (sample) fade  in(yava yava  ortaya  kma)
efekti uygulayarak  alabiliriz.
 

if(Mix_FadeInChannel(-1, sample, 1, 1000)==-1)
{
    fprintf(stderr,"Mix_FadeInChannel:    %s\n",Mix_GetError());    
} 

 
Btn parametreler  Mix_playChannel  fonksiyonu  ile ayndr  bu    fonksiyonda.
Sadece  son  parametre  olan   1000  deeri  efektin   ka    milisaniye   sonra
balayaca   deerini   bildirir.   Birde    bu   fonksiyonun   tersi    olarak
Mix_FadeOutChannel fonksiyonu bulunmaktadr.
 
Mix_FadeOutChannel(int channel, int ms);
 
Bu fonksiyon ile belirtilen kanal belirtilen milisaniye iinde   sesi  kslarak
kapatlr. Bu  komut  zaten  almakta  olan bir  kanala  uygulanaca  iin  ses
dosyasn  belirtmeye  gerek  yoktur.  Ayrca  Mix_HaltChannel  komutuyla   sesi
annda kapatabilirsiniz.
 
Mix_HaltChannel(int channels);
 
eklinde uygulanr.  Kanal  deeri  olarak ya  o  kapatmak  istediiniz  kanaln
numarasn yada btn  kanallar kapatmak  iin -1  deerini verebilirsiniz.  -1
deeri dier  btn  fonsiyonlarda da  ayn  ekilde btn  kanallar  belirtir.
Kanallarla   ilgili   yapabileceklerimiz   arasnda   kanaln   ses   seviyesini
deitirebilirsiniz.
 
Mix_Volume(int channel, int volume);
 
Channel ile kanaln numaras yada -1 ile btn kanallar  belirtilebilir.  Volume
ise sesin  yksekliinin  belirtildii  deikendir. Bu  fonksiyonun  birde  ses
dosyasna zel ses seviyesi belirtebileceiniz versiyonu bulunmaktadr.
 
Mix_VolumeChunk(Mix_Chunk *chunk, int volume);
 
Chunk  deikeni   ile    verilen   ses   dosyasnn   ses   ykseklii   volume
deikenine gre deitirilir.
 
Srada mzik dosyalar ile ilgili ilemler var.
 
Mix_Music *music;
 
Mix_Music   veri    yaps    hafza     mzik    dosyalarn     saklayacamz
yapdr.
Mzik dosyalar Mix_LoadMus fonksiyonu ile yklenir.
 
if(!music=Mix_LoadMUS("music.mp3");)
{ 
    fprintf(stderr,"Mix_LoadMUS(\"music.mp3\"):  %s\n",  Mix_GetError());   
} 
 
Bu fonksiyon ile  wav, mod,  midi, ogg  ve mp3   dosyalarn  ykleyebilirsiniz.
 
Mix_FreeMusic(music); 
music=NULL;
 
Yukardaki  yntem  ilede  iimiz  bittiinde  yada  program  kapatrken  mzik
dosyalarnn verilerini hafzadan temizleriz.
 
Mzik dosyalarn almak iin Mix_PlayMusic fonksiyonu kullanlr.
 
if(Mix_PlayMusic(music, -1)==-1)
{
     fprintf(stderr, "Mix_PlayMusic: %s\n", Mix_GetError());
} 

music parametresi alnacak  mzik dosyasn  belirtir. -1  deeri ise  dosyann
sonsuz dngde  alnacan belirtir.  -1 yerine   parann  tekrar  edilmesini
istediimiz sayy yazabiliriz.
 
Fade  in  efektini  sample'lar   gibi   mzik   dosyalarnada   uygulayabiliriz.

if(Mix_FadeInMusic(music, -1, 2000)==-1)
{
    fprintf(stderr, "Mix_FadeInMusic: %s\n", Mix_GetError());
}

Fade in  efekti  olduu  gibi  Fade  out  efektide  vardr.  O  ise  sadece  tek
parametre  alr.   Fade   out   efektinin   sresi    (milisaniye    cinsinden).
 
Mix_FadeOutMusic(3000);

Mix_PlayMusic  fonksiyonu  ile  ayndr  herey.   Sadece  son  deer  Fade   in
efektinin tamamlanaca sreyi milisaniye cinsinden belirtir.
 
Bir mzik  dosyasnn  almasn  durdurmak  iin  iki  fonksiyonumuz    vardr.
Mix_HaltMusic  ve  Mix_PauseMusic.  Mix_HaltMusic   mzik    alnmasn   hemen
durdurur.  Btn  fade  efektlerinide   keser.  Mix_PauseMusic  fonksiyonu   ise
almakta  olan  mzii  sadece    duraklatr.  Mix_ResumeMusic  fonksiyonu   ise
duraklatlan yerden almaya devam edilmesini salar. Bu  fonksiyonu  durdurulmu
(Halt),  duraklatlm(Pause)   veya   almakta   olan   mzik   ile   kullanmak
gvenlidir, hataya neden olmaz.
 
Mix_HaltMusic();
Mix_PauseMusic();
Mix_ResumeMusic();
 
Evet bu  dkman  ile SDL_Mixer  kullanmna  giri yaptk.  SDL_Mixer'n  btn
yeteneklerini anlatmadm  size  ama  anlattklarm  ile  SDL_Mixer    kullanmaya
hemen   balayabilirsiniz.   Gerisi   iin   imdilik    orijinal      SDL_Mixer
dkmantasyonuna        (http://jcatki.no-ip.org/SDL_mixer/SDL_mixer_frame.html)
bakmalsnz. Daha  sonra  SDL_Mixer'n  daha detayl  kullanmn  anlatan  bir
dkman daha yazabilirim.
 
Not: 1 saniye == 1000 milisaniye; ;)
[b]Ragnor/Manyetiq[/b] 