cAudio  2.3.0
3d Audio Engine
cEFXFunctions.h
1 // Copyright (c) 2008-2011 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones, Murat (wolfmanfx) Sari
2 // This file is part of the "cAudio Engine"
3 // For conditions of distribution and use, see copyright notice in cAudio.h
4 
5 #pragma once
6 
7 #include "cAudioDefines.h"
8 
9 #if CAUDIO_EFX_ENABLED == 1
10 
11 #include <al.h>
12 #include <alc.h>
13 #include <efx.h>
14 #include <efx-creative.h>
15 
16 #include "cMutex.h"
17 
18 //To use EFX in linux.
19 #ifndef ALC_EXT_EFX
20 #define AL_FILTER_TYPE 0x8001
21 #define AL_EFFECT_TYPE 0x8001
22 #define AL_FILTER_NULL 0x0000
23 #define AL_FILTER_LOWPASS 0x0001
24 #define AL_FILTER_HIGHPASS 0x0002
25 #define AL_FILTER_BANDPASS 0x0003
26 #define AL_EFFECT_NULL 0x0000
27 #define AL_EFFECT_EAXREVERB 0x8000
28 #define AL_EFFECT_REVERB 0x0001
29 #define AL_EFFECT_CHORUS 0x0002
30 #define AL_EFFECT_DISTORTION 0x0003
31 #define AL_EFFECT_ECHO 0x0004
32 #define AL_EFFECT_FLANGER 0x0005
33 #define AL_EFFECT_FREQUENCY_SHIFTER 0x0006
34 #define AL_EFFECT_VOCAL_MORPHER 0x0007
35 #define AL_EFFECT_PITCH_SHIFTER 0x0008
36 #define AL_EFFECT_RING_MODULATOR 0x0009
37 #define AL_EFFECT_AUTOWAH 0x000A
38 #define AL_EFFECT_COMPRESSOR 0x000B
39 #define AL_EFFECT_EQUALIZER 0x000C
40 #define ALC_EFX_MAJOR_VERSION 0x20001
41 #define ALC_EFX_MINOR_VERSION 0x20002
42 #define ALC_MAX_AUXILIARY_SENDS 0x20003
43 #endif
44 
45 namespace cAudio
46 {
48  struct cEFXFunctions
49  {
50  cEFXFunctions()
51  {
52  alGenEffects = NULL;
53  alDeleteEffects = NULL;
54  alIsEffect = NULL;
55  alEffecti = NULL;
56  alEffectiv = NULL;
57  alEffectf = NULL;
58  alEffectfv = NULL;
59  alGetEffecti = NULL;
60  alGetEffectiv = NULL;
61  alGetEffectf = NULL;
62  alGetEffectfv = NULL;
63 
64  alGenFilters = NULL;
65  alDeleteFilters = NULL;
66  alIsFilter = NULL;
67  alFilteri = NULL;
68  alFilteriv = NULL;
69  alFilterf = NULL;
70  alFilterfv = NULL;
71  alGetFilteri = NULL;
72  alGetFilteriv = NULL;
73  alGetFilterf = NULL;
74  alGetFilterfv = NULL;
75 
76  alGenAuxiliaryEffectSlots = NULL;
77  alDeleteAuxiliaryEffectSlots = NULL;
78  alIsAuxiliaryEffectSlot = NULL;
79  alAuxiliaryEffectSloti = NULL;
80  alAuxiliaryEffectSlotiv = NULL;
81  alAuxiliaryEffectSlotf = NULL;
82  alAuxiliaryEffectSlotfv = NULL;
83  alGetAuxiliaryEffectSloti = NULL;
84  alGetAuxiliaryEffectSlotiv = NULL;
85  alGetAuxiliaryEffectSlotf = NULL;
86  alGetAuxiliaryEffectSlotfv = NULL;
87 
88  Supported = false;
89  }
90 
91  // Effect objects
92  LPALGENEFFECTS alGenEffects;
93  LPALDELETEEFFECTS alDeleteEffects;
94  LPALISEFFECT alIsEffect;
95  LPALEFFECTI alEffecti;
96  LPALEFFECTIV alEffectiv;
97  LPALEFFECTF alEffectf;
98  LPALEFFECTFV alEffectfv;
99  LPALGETEFFECTI alGetEffecti;
100  LPALGETEFFECTIV alGetEffectiv;
101  LPALGETEFFECTF alGetEffectf;
102  LPALGETEFFECTFV alGetEffectfv;
103 
104  // Filter objects
105  LPALGENFILTERS alGenFilters;
106  LPALDELETEFILTERS alDeleteFilters;
107  LPALISFILTER alIsFilter;
108  LPALFILTERI alFilteri;
109  LPALFILTERIV alFilteriv;
110  LPALFILTERF alFilterf;
111  LPALFILTERFV alFilterfv;
112  LPALGETFILTERI alGetFilteri;
113  LPALGETFILTERIV alGetFilteriv;
114  LPALGETFILTERF alGetFilterf;
115  LPALGETFILTERFV alGetFilterfv;
116 
117  // Auxiliary slot object
118  LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots;
119  LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots;
120  LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot;
121  LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti;
122  LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv;
123  LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf;
124  LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv;
125  LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti;
126  LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv;
127  LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf;
128  LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv;
129 
130  cAudioMutex Mutex;
131 
132  bool Supported;
133 
134  bool CheckEFXSupport(ALCdevice* device)
135  {
136  Supported = false;
137  if (alcIsExtensionPresent(device, "ALC_EXT_EFX"))
138  {
139  // Get function pointers
140  alGenEffects = (LPALGENEFFECTS)alGetProcAddress("alGenEffects");
141  alDeleteEffects = (LPALDELETEEFFECTS )alGetProcAddress("alDeleteEffects");
142  alIsEffect = (LPALISEFFECT )alGetProcAddress("alIsEffect");
143  alEffecti = (LPALEFFECTI)alGetProcAddress("alEffecti");
144  alEffectiv = (LPALEFFECTIV)alGetProcAddress("alEffectiv");
145  alEffectf = (LPALEFFECTF)alGetProcAddress("alEffectf");
146  alEffectfv = (LPALEFFECTFV)alGetProcAddress("alEffectfv");
147  alGetEffecti = (LPALGETEFFECTI)alGetProcAddress("alGetEffecti");
148  alGetEffectiv = (LPALGETEFFECTIV)alGetProcAddress("alGetEffectiv");
149  alGetEffectf = (LPALGETEFFECTF)alGetProcAddress("alGetEffectf");
150  alGetEffectfv = (LPALGETEFFECTFV)alGetProcAddress("alGetEffectfv");
151  alGenFilters = (LPALGENFILTERS)alGetProcAddress("alGenFilters");
152  alDeleteFilters = (LPALDELETEFILTERS)alGetProcAddress("alDeleteFilters");
153  alIsFilter = (LPALISFILTER)alGetProcAddress("alIsFilter");
154  alFilteri = (LPALFILTERI)alGetProcAddress("alFilteri");
155  alFilteriv = (LPALFILTERIV)alGetProcAddress("alFilteriv");
156  alFilterf = (LPALFILTERF)alGetProcAddress("alFilterf");
157  alFilterfv = (LPALFILTERFV)alGetProcAddress("alFilterfv");
158  alGetFilteri = (LPALGETFILTERI )alGetProcAddress("alGetFilteri");
159  alGetFilteriv= (LPALGETFILTERIV )alGetProcAddress("alGetFilteriv");
160  alGetFilterf = (LPALGETFILTERF )alGetProcAddress("alGetFilterf");
161  alGetFilterfv= (LPALGETFILTERFV )alGetProcAddress("alGetFilterfv");
162  alGenAuxiliaryEffectSlots = (LPALGENAUXILIARYEFFECTSLOTS)alGetProcAddress("alGenAuxiliaryEffectSlots");
163  alDeleteAuxiliaryEffectSlots = (LPALDELETEAUXILIARYEFFECTSLOTS)alGetProcAddress("alDeleteAuxiliaryEffectSlots");
164  alIsAuxiliaryEffectSlot = (LPALISAUXILIARYEFFECTSLOT)alGetProcAddress("alIsAuxiliaryEffectSlot");
165  alAuxiliaryEffectSloti = (LPALAUXILIARYEFFECTSLOTI)alGetProcAddress("alAuxiliaryEffectSloti");
166  alAuxiliaryEffectSlotiv = (LPALAUXILIARYEFFECTSLOTIV)alGetProcAddress("alAuxiliaryEffectSlotiv");
167  alAuxiliaryEffectSlotf = (LPALAUXILIARYEFFECTSLOTF)alGetProcAddress("alAuxiliaryEffectSlotf");
168  alAuxiliaryEffectSlotfv = (LPALAUXILIARYEFFECTSLOTFV)alGetProcAddress("alAuxiliaryEffectSlotfv");
169  alGetAuxiliaryEffectSloti = (LPALGETAUXILIARYEFFECTSLOTI)alGetProcAddress("alGetAuxiliaryEffectSloti");
170  alGetAuxiliaryEffectSlotiv = (LPALGETAUXILIARYEFFECTSLOTIV)alGetProcAddress("alGetAuxiliaryEffectSlotiv");
171  alGetAuxiliaryEffectSlotf = (LPALGETAUXILIARYEFFECTSLOTF)alGetProcAddress("alGetAuxiliaryEffectSlotf");
172  alGetAuxiliaryEffectSlotfv = (LPALGETAUXILIARYEFFECTSLOTFV)alGetProcAddress("alGetAuxiliaryEffectSlotfv");
173 
174  if (alGenEffects && alDeleteEffects && alIsEffect && alEffecti && alEffectiv && alEffectf &&
175  alEffectfv && alGetEffecti && alGetEffectiv && alGetEffectf && alGetEffectfv && alGenFilters &&
176  alDeleteFilters && alIsFilter && alFilteri && alFilteriv && alFilterf && alFilterfv &&
177  alGetFilteri && alGetFilteriv && alGetFilterf && alGetFilterfv && alGenAuxiliaryEffectSlots &&
178  alDeleteAuxiliaryEffectSlots && alIsAuxiliaryEffectSlot && alAuxiliaryEffectSloti &&
179  alAuxiliaryEffectSlotiv && alAuxiliaryEffectSlotf && alAuxiliaryEffectSlotfv &&
180  alGetAuxiliaryEffectSloti && alGetAuxiliaryEffectSlotiv && alGetAuxiliaryEffectSlotf &&
181  alGetAuxiliaryEffectSlotfv)
182  Supported = true;
183  }
184 
185  return Supported;
186  }
187  };
188 };
189 
190 #endif
Main namespace for the entire cAudio library.
Definition: cAudioCapture.h:15