Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "../h/OpenAL.h"
00026
00027
00028
00029
00030
00031
00032
00033
00034 static CWaves *g_pWaveLoader = NULL;
00035
00036
00037
00038
00039 LPALGENEFFECTS alGenEffects = NULL;
00040 LPALDELETEEFFECTS alDeleteEffects = NULL;
00041 LPALISEFFECT alIsEffect = NULL;
00042 LPALEFFECTI alEffecti = NULL;
00043 LPALEFFECTIV alEffectiv = NULL;
00044 LPALEFFECTF alEffectf = NULL;
00045 LPALEFFECTFV alEffectfv = NULL;
00046 LPALGETEFFECTI alGetEffecti = NULL;
00047 LPALGETEFFECTIV alGetEffectiv = NULL;
00048 LPALGETEFFECTF alGetEffectf = NULL;
00049 LPALGETEFFECTFV alGetEffectfv = NULL;
00050
00051
00052 LPALGENFILTERS alGenFilters = NULL;
00053 LPALDELETEFILTERS alDeleteFilters = NULL;
00054 LPALISFILTER alIsFilter = NULL;
00055 LPALFILTERI alFilteri = NULL;
00056 LPALFILTERIV alFilteriv = NULL;
00057 LPALFILTERF alFilterf = NULL;
00058 LPALFILTERFV alFilterfv = NULL;
00059 LPALGETFILTERI alGetFilteri = NULL;
00060 LPALGETFILTERIV alGetFilteriv = NULL;
00061 LPALGETFILTERF alGetFilterf = NULL;
00062 LPALGETFILTERFV alGetFilterfv = NULL;
00063
00064
00065 LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots = NULL;
00066 LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots = NULL;
00067 LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot = NULL;
00068 LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti = NULL;
00069 LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv = NULL;
00070 LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf = NULL;
00071 LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv = NULL;
00072 LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti = NULL;
00073 LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv = NULL;
00074 LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf = NULL;
00075 LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv = NULL;
00076
00077
00078
00079 LPEAXSETBUFFERMODE eaxSetBufferMode = NULL;
00080 LPEAXGETBUFFERMODE eaxGetBufferMode = NULL;
00081
00082 ALenum eXRAMSize = 0;
00083 ALenum eXRAMFree = 0;
00084 ALenum eXRAMAuto = 0;
00085 ALenum eXRAMHardware = 0;
00086 ALenum eXRAMAccessible = 0;
00087
00088
00089
00090 void ALFWInit(int maxSounds)
00091 {
00092 g_pWaveLoader = new CWaves(maxSounds);
00093 }
00094
00095
00096 void ALFWUninit()
00097 {
00098 ALFWShutdown();
00099 }
00100
00101 void ALFWShutdown()
00102 {
00103 if (g_pWaveLoader)
00104 {
00105 delete g_pWaveLoader;
00106 g_pWaveLoader = NULL;
00107 }
00108
00109
00110
00111 }
00112
00113 ALboolean ALFWInitOpenAL()
00114 {
00115 ALCcontext *pContext = NULL;
00116 ALCdevice *pDevice = NULL;
00117
00118 pDevice = alcOpenDevice(0);
00119 if(pDevice)
00120 {
00121 pContext = alcCreateContext(pDevice, 0);
00122 if (pContext)
00123 {
00124 alcMakeContextCurrent(pContext);
00125 return AL_TRUE;
00126 }
00127 else
00128 {
00129 alcCloseDevice(pDevice);
00130 }
00131 }
00132
00133 return AL_FALSE;
00134 }
00135
00136 ALboolean ALFWShutdownOpenAL()
00137 {
00138 ALCcontext *pContext;
00139 ALCdevice *pDevice;
00140
00141 pContext = alcGetCurrentContext();
00142 pDevice = alcGetContextsDevice(pContext);
00143
00144 alcMakeContextCurrent(0);
00145 alcDestroyContext(pContext);
00146 alcCloseDevice(pDevice);
00147
00148 return AL_TRUE;
00149 }
00150
00151 ALboolean ALFWLoadWaveToBuffer(const rchar *szWaveFile, ALuint uiBufferID, ALenum eXRAMBufferMode)
00152 {
00153 ALint ID, iDataSize, iFrequency;
00154 ALenum eBufferFormat;
00155 ALchar *pData;
00156 ALboolean bReturn = AL_FALSE;
00157
00158 if(g_pWaveLoader)
00159 {
00160 if(SUCCEEDED(g_pWaveLoader->LoadWaveFile(szWaveFile, &ID)))
00161 {
00162 if((SUCCEEDED(g_pWaveLoader->GetWaveSize(ID, (unsigned long*)&iDataSize))) &&
00163 (SUCCEEDED(g_pWaveLoader->GetWaveData(ID, (void**)&pData))) &&
00164 (SUCCEEDED(g_pWaveLoader->GetWaveFrequency(ID, (unsigned long*)&iFrequency))) &&
00165 (SUCCEEDED(g_pWaveLoader->GetWaveALBufferFormat(ID, &alGetEnumValue, (unsigned long*)&eBufferFormat))))
00166 {
00167
00168 if(eaxSetBufferMode && eXRAMBufferMode)
00169 eaxSetBufferMode(1, &uiBufferID, eXRAMBufferMode);
00170
00171 alGetError();
00172 alBufferData(uiBufferID, eBufferFormat, pData, iDataSize, iFrequency);
00173 if (alGetError() == AL_NO_ERROR)
00174 bReturn = AL_TRUE;
00175
00176 g_pWaveLoader->DeleteWaveFile(ID);
00177 }
00178 }
00179 }
00180
00181 return bReturn;
00182 }
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 ALboolean ALFWIsXRAMSupported()
00207 {
00208 ALboolean bXRAM = AL_FALSE;
00209
00210 if (alIsExtensionPresent("EAX-RAM") == AL_TRUE)
00211 {
00212
00213 eaxSetBufferMode = (EAXSetBufferMode)alGetProcAddress("EAXSetBufferMode");
00214 eaxGetBufferMode = (EAXGetBufferMode)alGetProcAddress("EAXGetBufferMode");
00215
00216 if (eaxSetBufferMode && eaxGetBufferMode)
00217 {
00218 eXRAMSize = alGetEnumValue("AL_EAX_RAM_SIZE");
00219 eXRAMFree = alGetEnumValue("AL_EAX_RAM_FREE");
00220 eXRAMAuto = alGetEnumValue("AL_STORAGE_AUTOMATIC");
00221 eXRAMHardware = alGetEnumValue("AL_STORAGE_HARDWARE");
00222 eXRAMAccessible = alGetEnumValue("AL_STORAGE_ACCESSIBLE");
00223
00224 if (eXRAMSize && eXRAMFree && eXRAMAuto && eXRAMHardware && eXRAMAccessible)
00225 bXRAM = AL_TRUE;
00226 }
00227 }
00228
00229 return bXRAM;
00230 }
00231
00232 ALboolean ALFWIsEFXSupported()
00233 {
00234 ALCdevice *pDevice = NULL;
00235 ALCcontext *pContext = NULL;
00236 ALboolean bEFXSupport = AL_FALSE;
00237
00238 pContext = alcGetCurrentContext();
00239 pDevice = alcGetContextsDevice(pContext);
00240
00241 if (alcIsExtensionPresent(pDevice, (ALCchar*)ALC_EXT_EFX_NAME))
00242 {
00243
00244 alGenEffects = (LPALGENEFFECTS)alGetProcAddress("alGenEffects");
00245 alDeleteEffects = (LPALDELETEEFFECTS )alGetProcAddress("alDeleteEffects");
00246 alIsEffect = (LPALISEFFECT )alGetProcAddress("alIsEffect");
00247 alEffecti = (LPALEFFECTI)alGetProcAddress("alEffecti");
00248 alEffectiv = (LPALEFFECTIV)alGetProcAddress("alEffectiv");
00249 alEffectf = (LPALEFFECTF)alGetProcAddress("alEffectf");
00250 alEffectfv = (LPALEFFECTFV)alGetProcAddress("alEffectfv");
00251 alGetEffecti = (LPALGETEFFECTI)alGetProcAddress("alGetEffecti");
00252 alGetEffectiv = (LPALGETEFFECTIV)alGetProcAddress("alGetEffectiv");
00253 alGetEffectf = (LPALGETEFFECTF)alGetProcAddress("alGetEffectf");
00254 alGetEffectfv = (LPALGETEFFECTFV)alGetProcAddress("alGetEffectfv");
00255 alGenFilters = (LPALGENFILTERS)alGetProcAddress("alGenFilters");
00256 alDeleteFilters = (LPALDELETEFILTERS)alGetProcAddress("alDeleteFilters");
00257 alIsFilter = (LPALISFILTER)alGetProcAddress("alIsFilter");
00258 alFilteri = (LPALFILTERI)alGetProcAddress("alFilteri");
00259 alFilteriv = (LPALFILTERIV)alGetProcAddress("alFilteriv");
00260 alFilterf = (LPALFILTERF)alGetProcAddress("alFilterf");
00261 alFilterfv = (LPALFILTERFV)alGetProcAddress("alFilterfv");
00262 alGetFilteri = (LPALGETFILTERI )alGetProcAddress("alGetFilteri");
00263 alGetFilteriv= (LPALGETFILTERIV )alGetProcAddress("alGetFilteriv");
00264 alGetFilterf = (LPALGETFILTERF )alGetProcAddress("alGetFilterf");
00265 alGetFilterfv= (LPALGETFILTERFV )alGetProcAddress("alGetFilterfv");
00266 alGenAuxiliaryEffectSlots = (LPALGENAUXILIARYEFFECTSLOTS)alGetProcAddress("alGenAuxiliaryEffectSlots");
00267 alDeleteAuxiliaryEffectSlots = (LPALDELETEAUXILIARYEFFECTSLOTS)alGetProcAddress("alDeleteAuxiliaryEffectSlots");
00268 alIsAuxiliaryEffectSlot = (LPALISAUXILIARYEFFECTSLOT)alGetProcAddress("alIsAuxiliaryEffectSlot");
00269 alAuxiliaryEffectSloti = (LPALAUXILIARYEFFECTSLOTI)alGetProcAddress("alAuxiliaryEffectSloti");
00270 alAuxiliaryEffectSlotiv = (LPALAUXILIARYEFFECTSLOTIV)alGetProcAddress("alAuxiliaryEffectSlotiv");
00271 alAuxiliaryEffectSlotf = (LPALAUXILIARYEFFECTSLOTF)alGetProcAddress("alAuxiliaryEffectSlotf");
00272 alAuxiliaryEffectSlotfv = (LPALAUXILIARYEFFECTSLOTFV)alGetProcAddress("alAuxiliaryEffectSlotfv");
00273 alGetAuxiliaryEffectSloti = (LPALGETAUXILIARYEFFECTSLOTI)alGetProcAddress("alGetAuxiliaryEffectSloti");
00274 alGetAuxiliaryEffectSlotiv = (LPALGETAUXILIARYEFFECTSLOTIV)alGetProcAddress("alGetAuxiliaryEffectSlotiv");
00275 alGetAuxiliaryEffectSlotf = (LPALGETAUXILIARYEFFECTSLOTF)alGetProcAddress("alGetAuxiliaryEffectSlotf");
00276 alGetAuxiliaryEffectSlotfv = (LPALGETAUXILIARYEFFECTSLOTFV)alGetProcAddress("alGetAuxiliaryEffectSlotfv");
00277
00278 if (alGenEffects && alDeleteEffects && alIsEffect && alEffecti && alEffectiv && alEffectf &&
00279 alEffectfv && alGetEffecti && alGetEffectiv && alGetEffectf && alGetEffectfv && alGenFilters &&
00280 alDeleteFilters && alIsFilter && alFilteri && alFilteriv && alFilterf && alFilterfv &&
00281 alGetFilteri && alGetFilteriv && alGetFilterf && alGetFilterfv && alGenAuxiliaryEffectSlots &&
00282 alDeleteAuxiliaryEffectSlots && alIsAuxiliaryEffectSlot && alAuxiliaryEffectSloti &&
00283 alAuxiliaryEffectSlotiv && alAuxiliaryEffectSlotf && alAuxiliaryEffectSlotfv &&
00284 alGetAuxiliaryEffectSloti && alGetAuxiliaryEffectSlotiv && alGetAuxiliaryEffectSlotf &&
00285 alGetAuxiliaryEffectSlotfv)
00286 bEFXSupport = AL_TRUE;
00287 }
00288
00289 return bEFXSupport;
00290 }