Giriş
Başlarken
ALCcontext *Context; ALCdevice *Device; Device = alcOpenDevice((ALubyte*)"DirectSound3D"); if (Device == NULL) exit(-1); //Context’i(‘leri) yarat Context=alcCreateContext(Device, NULL); //aktif geçerli context olarak set et alcMakeContextCurrent(Context); // hata kodunu aydınlat alGetError();
Seslerin Yüklenmesi
char* alBuffer; //buffer ALenum alFormatBuffer; //buffer formatı için ALsizei alFreqBuffer; //buffer’ın frekansı için long alBufferLen; //derinlik biti ALboolean alLoop; //döngüleme unsigned int alSource; //source unsigned int alSampleSet; //wave dosyasını yükle alutLoadWAVFile("test.wav",&alFormatBuffer, (void**) &alBuffer, (unsigned int *)&alBufferLen, &alFreqBuffer, &loop); //1 source yarat alGenSources(1, &alSource); //1 buffer yarat alGenBuffers(1, &alSampleSet); //örnek setini alBuffer’dan buffer datasıyla doldur alBufferData(alSampleSet, alFormatBuffer, alBuffer, alBufferLen, alFreqBuffer); //bu source’ü buffer’a bağla alSourcei(alSource, AL_BUFFER, alSampleSet); //datayı serbest bırak alutUnloadWAV(alFormatBuffer, alBuffer, alBufferLen, alFreqBuffer);
Source Özelliklerinin Ayarlanması
Sesin source olarak kurgulanmışına sahip olunmasıyla onun bazı özelliklerini set etmeye ihtiyaç duyarsınız. Bunu yapmak için alSource komutunu kullanırsınız. alSourcei, alSourcef, alSource3f vb gibi farklı uyarlamaları olan fonksiyon, OpenGL’deki mevcut fonksiyonlara benzer çalışır. Set edeceğiniz özellikler, hangi fonksiyonu kullanacağınızı belirler. Örneğin sadece bir kayan noktalı parametreyse bu o zaman alSource3f kullanılır. Fonksiyonun ilk parametresi, modifelemeyi istediğini source’i belirtir. İkinci parametre, ne özelliği getirileceğine karşılık gelir. Kalan parametreler bu özellik için aktüel değerlerdir. Buradaki bir source için pozisyon ve gücünü ayarlamanın bir örneğidir:
//source pozisyonunu set et alSource3f(alSource,AL_POSITION, xposition, yposition, zposition); //source gücünü set et alSource3f(alSource,AL_VELOCITY, xvelocity, yvelocity, zvelocity);
Buradaki alSource bizim ses source’imiz ve AL_POSITION ve AL_VELOCITY, bizim, pozisyon ve güç özelliklerini değiştirmek istediğimizi gösterir. Kalan, kayan noktalı sayılar bu özellikler için ilk değerlerine karşılık gelir.
Listener’ın Kullanımı
Bir listener’ın özelliklerini değiştirmek , ses source’nin özelliklerini değiştirme şeklinize benzer şekilde çalışır. alListener fonksiyonu kullanıp değiştireceğin özelliğe bağlı çeşitlenir. Örneğin,listener(dinleyici) pozisyonunu set etmek için alListener3f’i çağırıp 3 ayrı kayan noktalı sayı belirtebilirsiniz veya alListenerfv’i çağırıp kayan noktalı sayılarının bir dizisini geçebilirdiniz. Pozisyon parametreleri, oyun dünyası içinde listener’ın x, y ve z değerleridir. Yön özelliği bununla birlikte 6 parametre alır. İlk 3ü listener’ın kullanıcıya mevcut bakışına karşılık gelen vektör için. Sonraki 3 vektör listener’ın yüzünü döndüğü yön içindir. Aşağıdaki, listener’ın pozisyon ve yönünü set etme örneğidir:
float listenerx, listenery, listenerz; float vec[6]; listenerx=10.0f; listenery=0.0f; listenerz=5.0f; vec[0] = fvecx; //forward vector x değeri vec[1] = fvecy; //forward vector y değeri vec[2] = fvecz; //forward vector z değeri vec[3] = uvecx; //up vector x değeri vec[4] = uvecy; //up vector y değeri vec[5] = uvecz; //up vector z değeri //mevcut listener pozisyonunu set et alListener3f(AL_POSITION, listenerx, listenery, listenerz); //mevcut listener yönünü set et alListenerfv(AL_ORIENTATION, vec);
İlk fonksiyon çağrısında, 3 ayrı kayan noktalı sayı listener’ın x,y,z pozisyonuna geçilir. İkinci çağrı, vec isimli bir diziyi geçer. Bu dizi, listener’ın yönüyle ilgili olan altı değerden oluşan iki vektör içindir.
Seslerin Çalınması
//sesin sürekli döngüleneceğini söyle alSourcei(alSource,AL_LOOPING,AL_TRUE); //sesi çal alSourcePlay(alSource); // sesi durdur alSourceStop(alSource);
Bitiş
Programınızla işiniz bitince, source’lerinizi ve bufferlarınızı serbest bırakıp OpenAL’ı sonlamaya ihtiyaç duyarsınız. Komutlar göreli basittir. source’lerinizi ve buffer’larınız nasıl silineceği burada:
//source’umuzu sil alDeleteSources(1,&alSource); //buffer’ımızı sil alDeleteBuffers(1,&alSampleSet);
//aktif gaçerli context’i elde et Context=alcGetCurrentContext(); //aktif context aygıtını elde et Device=alcGetContextsDevice(Context); //aktif geçerli context’i etkisizleştir alcMakeContextCurrent(NULL); //context’i(‘leri) serbest bırak alcDestroyContext(Context); //aygıtı kapa alcCloseDevice(Device);
OpenAL’de sesleri çalma hakkındaki temeller bunlar. Temel adımlardan, ilki OpenAL’i ilklemek, sonra, ihtiyaç duyduğun sesleri yükleyip, Seslerin ve listener’ın özelliklerini set etmek ve sonra sesleri çalmaktır. OpenAL’le yapabileceğin daha çoğu var Ama bu sadece bir kısım temelleri tanımlamak için yazıldı. Bununla beraber gelen kaynak kodu, bir OpenGL demosunda bunların tümünün kullanımı göstermekte. Demoda, listener’ı kontrol ediyorsunuz, bir döngüde pozisyona sizin mevcut konumunuz set ediliyor. Eğer herhangi bir soru veya düşünceye sahipseniz, ricart3@tcnj.edu ‘e bana mail atın.