FMOD Ses Kütüphanesine Giriş
(1574 kelime) (345 okuma)
FMOD Nedir?
FMOD kullanımı kolay, birçok popüler ses ve müzik formatına destek
veren bir ses kütüphanesidir. FMOD, aynı zamanda bilgisayarın
kaynaklarını oldukça efektif biçimde kullanması ile de ünlenmiştir. Bu
özelliğinden dolayı başta oyunlar olmak üzere çeşitli multişmedya
uygulamalarında ses motoru olarak kullanımı yaygındır. FireLight
firması tarafindan geliştirilen FMOD, ticari getirisi olmayan her türlü
projede serbestçe kullanılabilmektedir. FMOD kütüphanesi www.fmod.org sitesinden
indirebilirsiniz.
FMOD wav,mp2,mp3,ogg,raw,mod,s3m,xm,it,mid ses formatlarına destek
vermektedir. Windows, WinCE, Linux, Macintosh, Playstation, XBox,
GameCube platformları FMOD un kullanılabileceği platformlardır. MSVC,
METROWERKS/CODEWARRIOR, WATCOM, BORLAND, LCC-WIN32, MINGW, CYGWIN gibi
derleyiciler ile FMOD kütüphanesini kullanan projeler geliştirebiliriz.
FMOD 'un Genel Yapısı:
FMOD kütüphanesi ses kütüklerini 2 alt türe ayırır. Sıralı (sequenced)
ses kütükleri (mod,s3m,xm,it,mid) ve sıkıştırılmış ses kütükleri
(mp2,mp3,wav,ogg,raw). Bu iki alt türü farklı FMOD fonksiyonlarını
kullanarak işliyoruz. Sıralı ses kütükleri ile ilgili fonksiyonlar
FMUSIC_ ön eki ile başlayan isimlere sahipken, diğer kütüklerle ilgili
fonksiyonlar ise FSOUND_ ön eki ile isimlendirilirler.
FMOD ile aynı anda birçok ses dosyasını çalabilirsiniz. Bu işlem ses
dosyalarının ses kartının farklı kanallarını (channel) kullanılarak
çalınması ile sağlanır. FMOD kullanıken ses dosyanızın hangi kanaldan
çalınmasını istediğinizi belirtebilir yada FMOD un uygun gördüğü kanalı
kullanmasına izin verebilirsiniz. Unutmamanız gereken kural; bir kanal
aynı anda sadece bir ses dosyası tarafından kullanılabilmektedir. FMOD
yapısı gereği birçok fonksiyonunu kanallar üzerinde
gerçekleştirmektedir, dolayısı ile bir sesin kullandığı kanalı bilmek o
sesi kontrol etmek açısından önem taşır.
FMOD 3 boyutlu ses kaynaklarını kullanmaya da destek vermektedir. Bu
sayede ses donanımınızın desteklediği 3 boyutlu ses özelliklerini
kullanabilirsiniz.
Çalınan ses ile programınızın işleyişi arasındaki senkronizasyonu
sağlamak için de iki farklı yöntem bulunmaktadır. İster "callback
mekanizması" nı kullanarak ses dosyasının içine gömülmüş belirli
noktalarda programınızın uyarılmasını sağlayabilir, isterseniz de ses
dosyasının çalınma esnasındaki pozisyonunu sürekli sorgulayarak
(polling) programınızı ses ile uyumlu biçimde devam ettirebilirsiniz.
Mp3, ogg, wav gibi kimi sıkıştırılmış ses kütükleri çalınma esnasında
bellekte oldukça fazla yer kaplarlar. Bellek kullanımını daha efektif
hale getirebilmek için bu tarz kütüklerin ihtiyaç olduğu kadarını
diskten belleğe alma yöntemi ile kullanabilirsiniz. Streaming denilen
bu teknik FMOD tarafindan desteklenmektedir. Özellikle çok yer kaplayan
arkaplan müzikleri bu yöntem ile oldukça az bellek kullanılarak
çalınabilir.
Basit bir FMOD Uygulaması:
//Şimdi basit
bir program ile FMOD kullanarak bir wav dosyasını çaldıralım.
//Öncelikle
gerekli olan include ları yazıyoruz.
#include
<stdio.h>
#include
<stdlib.h>
#if
defined(WIN32) || defined(_WIN64) || defined(__WATCOMC__)
#include <windows.h>
#include
<conio.h> //
getch() için gerekli
#else
#include <wincompat.h>
#endif
#include
<fmod.h>
#include
<fmod_errors.h>
//Şimdide
satır satır programımızı inceleyelim:
int
main(int argc,char **argv) {
// ses dosyamızı sample belirteci ile göstereceğiz. FMOD tüm
sıkıştırılmış
// ses verilerini bu belirteç ile ilişkilendirmektedir.
FSOUND_SAMPLE *sample;
// gerekli fmod.dll sürümününün sistemde olup olmadığını denetleyelim
if (FSOUND_GetVersion() <
FMOD_VERSION) {
printf("Hata: fmod.dll in sürümü farkli! FMOD %.02f kullanıyor
olmalıydınız!n", FMOD_VERSION);
exit(1);
}
// bu fonksiyon ile fmod kütüphanesini etkinleştiriyoruz.
// 44100Hz örnekleme frekansı, ve toplam 32 ses kanalı kullanacağımızı
belirtiyoruz.
if (!FSOUND_Init(44100, 32, 0)) {
printf("%sn", FMOD_ErrorString(FSOUND_GetError()));
exit(1);
}
// FSOUND_Sample_Load(...) fonksiyonu ile deneme.wav isimli ses
dosyasını yüklüyoruz.
sample =
FSOUND_Sample_Load(FSOUND_UNMANAGED,"deneme.wav", FSOUND_NORMAL |
FSOUND_HW2D, 0, 0);
// yüklediğimiz ses verisini çalıyoruz. FSOUND_FREE parametresi ile
FMOD un
// uygun gördüğü bir ses kanalını kullanmasını istediğimizi
belirtiyoruz.
FSOUND_PlaySound(FSOUND_FREE,sample);
// bir tuşa basılana kadar bekleyelim
getch();
// ses dosyası tarafindan kullanılan belleği sisteme geri veriyoruz
FSOUND_Sample_Free(sample);
// FMOD sistemini kapatıyoruz
FSOUND_Close();
return 0;
}
Bu programı MSVC kullanarak derleyebilmek için öncelikle içi boş bir
"consol application" projesi oluşturun, daha sonra bu projeye bir c
yada cpp dosyası ekleyin. Eklediğiniz dosyaya yukarıdaki kodu yazın.
Project->Settings->Link bölümünden projenize fmodvc.lib kütügünü
ekleyin. Ayrıca FMOD kurulumu ile gelen include ve lib dosyalarını
derleyicinizin uygun dizinlerine kopyalayın.
include dosyaları için kopyalamada
kullanacağınız dizin:
C:Program FilesMicrosoft
Visual StudioVC98include
lib dosyaları için dizin:
C:Program FilesMicrosoft
Visual StudioVC98lib
Programı derleyip çalıştırın. Deneme.wav isimli ses dosyamız şu anda
çalınıyor olmalı.
Mod, mid, xm gibi sırali bir ses
dosyasını çalmak için ise şu kod satırlarını kullanabilirsiniz:
FMUSIC_MODULE
*mod;
mod =
FMUSIC_LoadSong("deneme.mid");
FMUSIC_PlaySong(mod);
Çalınan Sesin Kontrol Edilmesi:
Çoğu zaman herhangi bir ses dosyasını sadece çalmak işimizi görürken,
kimi zaman sesin çalınma şekli üzerinde bazı değişikler yapma ihtiyacı
hissederiz. Örnegin ses düzeyini değiştirmek, sesi durdurmak, yeniden
başlatmak, devamlı çalmasını sağlamak (looping), çeşitli efektler
vermek gibi (echo, reverb...). FMOD ses kontrolü için oldukça geniş bir
programlama arayüzü sunar. Bu kontrol yordamlarından bazılarını
açıklamaları ile beraber inceleyelim.
FSOUND_SetMute(int channel, bool
mute);
bir kanalı açıp kapar (mute/unmute)
FSOUND_SetPan(int channel,int pan);
kanal için panning derecesini ayarlamanızı sağlar. Hep sol kanal
(hoparlör) sesi için 0, hep sağ kanal sesi için 255 kullanılır. 128 ile
sol ve sağ kanala eşit ölçüde ses dağılımı sağlanır.
FSOUND_SetVolume(int channel,int
volume);
kanalın ses seviyesini ayarlamanızı sağlar.0 sessiz, 255 en yükses ses
düzeyini belirtir.
FSOUND_StopSound(int channel);
kanalda çalan sesi durdurur. Bu kanal artık başka sesler için
kullanılabilir.
FSOUND_SetCurrentPosition(int
channel,int position);
kanalda çalan sesin offset değerini (pozisyonunu) degiştirmenizi
sağlar. Bu fonksiyon ile sesin istediğiniz kısmını çaldırabilirsiniz.
FSOUND_SetFrequency(int channel,int frequency);
kanalın örnekleme frekansını değiştirmeyi sağlar.
FSOUND_FX_Enable(int channel,int
fxtype);
ön tanımlı bir ses efektinin kanala uygulanmasını sağlar. FMOD
kullanarak kanala chorus, echo, reverb, distortion gibi birçok ses
efekti verebilirsiniz. Efektlerin parametreleri FSOUND_FX_Set...
komutları ile değiştirilebilir.
UYARI: Yukarıda açıklanan
kontrol yordamlarından bazılarının işlevsel olabilmesi için uygulama
kanalının duraklatılmış (paused) olması gerekmektedir.
FSOUND_SetPaused(channel,true) fonksiyonu ile istediğiniz kanaldaki
sesi durdurup daha sonra kaldığı yerden devam ettirebilirsiniz.
Yukarıdaki fonksiyonlar FMOD yordamlarının sadece küçük bir bölümünü
oluşturmaktadır. FMOD dökümantasyonunu inceleyerek tüm FMOD
fonksiyonlarının açıklamalarına erişebilirsiniz. FMOD un temel
kullanımını kavradıktan sonra bu dökümantasyonu mutlaka incelemenizi
tavsiye ediyorum.
Sonuç:
Örnek uygulamadan da gördüğünüz üzere FMOD kullanması oldukça kolay bir
kütüphane. Bu dökümanda FMOD un özelliklerini çok sınırlı biçimde
kullandık. CD çalma, kayıt, callback mekanizması, ayrıntılı dsp
efektleri, ve 3 boyutlu ses gibi özellikleri konuyu karışık hale
getirmemek için incelemedik. İstek olursa ileriki dökümanlarda bu
özellikleri kullanmayı örnekleyebiliriz.
Sanırım bu kadar bilgi kısa sürede FMOD kullanıp projelerinize ses
özelliği eklemeniz için yeterli olacaktır. FMOD kütüphanesi ile
birlikte yeterli sayıda örnek kod ve tüm fonksiyonların açıklamalarını
içeren bir döküman gelmekte. Bu kaynaklardan da faydalanarak
kütüphaneyi en verimli biçimde kullanabileceğinizi düşünüyorum.
Dökümanla ilgili her türlü düzeltme, istek ya da öneri için
deniz@oyunyapimi.org adresini kullanarak benimle irtibata geçmekten
çekinmeyin. Oyunyapimi.org forumlarını sorunlarınıza cevap bulmak ya da
bilginizi paylaşmak için kullanabilirsiniz.
İlgili Web Siteleri:
FMOD sitesi: www.fmod.org
Oyunyapimi.org: www.oyunyapimi.org
M.Deniz Aydınoglu :: 2004 :: www.oyunyapimi.org
|