Bu sayfadaki yazılar
Sayfanın metni
Sayfa 26
Chunksize için uygun bir değer olarak 4096 verebilirsiniz. Ama ses efektlerinin arkaplanda gereğinden uzun süre sürdüğünü düşünüyorsanız bu değeri küçük tutmayı deneyebilirsiniz. Yalnız değer küçüldükçe yavaş sistemlerde ses çıktısının atlanması olasıdır.
Fonksiyon başarılı olarak sona ererse 0, hata verirse -1 değerini döndürür.
ses ortamını açmak için ö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 açtıktan sonra kapatmak için ise Mix_CloseAudio fonksiyonunu kullanırız. Kullanımı oldukça basittir.
kapatmak için örnek kod: Mix_CloseAudio();
Ses sistemini açıp kapatabiliriz. Şimdi sırada biraz ses çıkarmak var :). SDL_Mixer ile birçok yaygın formattaki ses dosyasını kolayca hafızaya yükleyip çalabilirsiniz. SDL_Mixer'da çalacağınız dosyalar iki tiptir. 1- Sample 2- Music
Sample'lar basit ses efektleridir diyebiliriz. Veya ufak ses dosyaları. Daha da basitçe müzik parçası olmayan ses dosyalarıdır dersek sanırım yanlış olmaz. Hafızada bir sample verisi saklarken kullanacağımız yapının adı Mix_Chunk'tır. Ses dosyasını hafızaya yüklerken kullanacağımız komutun adı da Mix_LoadWAV()'dır. Adı sizi yanıltmasın, bu fonksiyon sadece wav dosyalarını değil; wave, aiff, riff, ogg ve voc dosya formatlarını okuyabilir.
wav yüklemek için örnek kod:
Mix_Chunk *sample;
sample=Mix_LoadWAV("sample.wav"); if(!sample) { fprintf(stderr, "Mix_LoadWAV: %s\n", Mix_GetError()); // hata olursa diye }
Programımızı kapatırken de yüklediğimiz ses dosyalarını hafızadan silmek için Mix_FreeChunk komutu kullanılır.
örnek: Mix_FreeChunk(sample); sample=NULL;
Ses dosyalarını çalmak da bu kadar basit, Mix_PlayChannel komutu ile gerçekleştiriliyor.
çalmak için:
if(Mix_PlayChannel(-1, sample, 1)==-1) { fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError()); }
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 27
İlk parametre ses dosyasını çalacak kanalı belirtir. -1 değeri ilk uygun ses kanalına bu görevi verir. İkinci parametre çalınacak olan ses dosyasıdır. Üçüncü parametre sample'ın kaç defa çalacağını belirtir. Bir hata oluşursa sample çalınamazsa fonksiyon -1 değerini döndürür.
SDL_Mixer içinde ayrıca ses dosyalarını çalarken basit efektler de uygulamanızı sağlayan fonksiyonlar bulunmaktadır. Örneğin Mix_FadeInChannel fonksiyonu ile bir ses dosyasını (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()); }
Bütün parametreler Mix_PlayChannel fonksiyonu ile aynıdır bu fonksiyonda. Sadece son parametre olan 1000 değeri efektin kaç milisaniye süreceği değerini bildirir. Bir de bu fonksiyonun tersi olarak Mix_FadeOutChannel fonksiyonu bulunmaktadır.
Mix_FadeOutChannel(int channel, int ms);
Bu fonksiyon ile belirtilen kanal belirtilen milisaniye içinde sesi kısılarak kapatılır. Bu komut zaten çalmakta olan bir kanala uygulanacağı için ses dosyasını belirtmeye gerek yoktur. Ayrıca Mix_HaltChannel komutuyla sesi anında kapatabilirsiniz.
Mix_HaltChannel(int channel);
şeklinde uygulanır. Kanal değeri olarak ya kapatmak istediğiniz kanalın numarasını ya da bütün kanalları kapatmak için -1 değerini verebilirsiniz. -1 değeri diğer bütün fonksiyonlarda da aynı şekilde bütün kanalları belirtir. Kanallarla ilgili yapabileceklerimiz arasında kanalın ses seviyesini değiştirebilirsiniz.
Mix_Volume(int channel, int volume);
Channel ile kanalın numarası ya da -1 ile bütün kanallar belirtilebilir. Volume ise sesin yüksekliğinin belirtildiği değişkendir. Bu fonksiyonun bir de ses dosyasına özel ses seviyesi belirtebileceğiniz versiyonu bulunmaktadır.
Mix_VolumeChunk(Mix_Chunk *chunk, int volume);
Chunk değişkeni ile verilen ses dosyasının ses yüksekliği volume değişkenine göre değiştirilir.
Sırada müzik dosyaları ile ilgili işlemler var.
Mix_Music *music;
Mix_Music veri yapısı hafızada müzik dosyalarını saklayacağımız yapıdır. Müzik dosyaları Mix_LoadMUS fonksiyonu ile yüklenir.
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 dosyalarını yükleyebilirsiniz.
Mix_FreeMusic(music); music=NULL;
Yukarıdaki yöntem ile de işimiz bittiğinde ya da programı kapatırken müzik dosyalarının verilerini hafızadan temizleriz.
Müzik dosyalarını çalmak için Mix_PlayMusic fonksiyonu kullanılır.