10 #if CAUDIO_EFX_ENABLED == 1 14 cFilter::cFilter(cEFXFunctions* oALFunctions) : EFX(oALFunctions), Type(EFT_NULL),
15 Volume(1.0f), LowFreqVolume(1.0f), HighFreqVolume(1.0f), LastUpdated(0),
16 Valid(false), Filter(0)
18 cAudioMutexBasicLock lock(
Mutex);
20 Valid = EFX->Supported;
24 cAudioMutexBasicLock lock(EFX->Mutex);
25 EFX->alGenFilters(1, &Filter);
26 Valid = !CheckError();
34 cAudioMutexBasicLock lock(Mutex);
35 if(Filter && EFX && EFX->Supported)
37 cAudioMutexBasicLock lock(EFX->Mutex);
38 EFX->alDeleteFilters(1, &Filter);
42 const FilterTypes& cFilter::getType()
const 47 void cFilter::setType(
const FilterTypes& type)
49 cAudioMutexBasicLock lock(Mutex);
54 float cFilter::getVolume()
const 59 void cFilter::setVolume(
const float& volume)
61 cAudioMutexBasicLock lock(Mutex);
66 float cFilter::getLowFrequencyVolume()
const 71 void cFilter::setLowFrequencyVolume(
const float& volumeLF)
73 cAudioMutexBasicLock lock(Mutex);
74 LowFreqVolume = volumeLF;
78 float cFilter::getHighFrequencyVolume()
const 80 return HighFreqVolume;
83 void cFilter::setHighFrequencyVolume(
const float& volumeHF)
85 cAudioMutexBasicLock lock(Mutex);
86 HighFreqVolume = volumeHF;
90 unsigned int cFilter::getLastUpdated()
const 95 bool cFilter::isValid()
const 100 ALuint cFilter::getOpenALFilter()
const 105 bool cFilter::UpdateFilter()
109 ALenum alFilterType = ConvertFilterEnum(Type);
111 if(Filter && EFX && EFX->Supported)
113 cAudioMutexBasicLock lock(EFX->Mutex);
114 EFX->alFilteri(Filter, AL_FILTER_TYPE, alFilterType);
115 Valid = !CheckError();
119 if(Type == EFT_LOWPASS)
121 EFX->alFilterf(Filter, AL_LOWPASS_GAIN, Volume);
122 EFX->alFilterf(Filter, AL_LOWPASS_GAINHF, HighFreqVolume);
123 Valid = !CheckError();
126 else if(Type == EFT_HIGHPASS)
128 EFX->alFilterf(Filter, AL_HIGHPASS_GAIN, Volume);
129 EFX->alFilterf(Filter, AL_HIGHPASS_GAINLF, LowFreqVolume);
130 Valid = !CheckError();
133 else if(Type == EFT_BANDPASS)
135 EFX->alFilterf(Filter, AL_BANDPASS_GAIN, Volume);
136 EFX->alFilterf(Filter, AL_BANDPASS_GAINLF, LowFreqVolume);
137 EFX->alFilterf(Filter, AL_BANDPASS_GAINHF, HighFreqVolume);
138 Valid = !CheckError();
149 bool cFilter::CheckError()
151 int error = alGetError();
152 const char* errorString;
154 if (error != AL_NO_ERROR)
156 errorString = alGetString(error);
157 if(error == AL_OUT_OF_MEMORY)
166 ALenum cFilter::ConvertFilterEnum(FilterTypes type)
171 return AL_FILTER_NULL;
173 return AL_FILTER_LOWPASS;
175 return AL_FILTER_HIGHPASS;
177 return AL_FILTER_BANDPASS;
179 return AL_FILTER_NULL;
virtual void logError(const char *sender, const char *msg,...)=0
Used to log an error message to the logging system.
cAudioMutex Mutex
Mutex for thread synchronization.
virtual void logCritical(const char *sender, const char *msg,...)=0
Used to log a critical error message to the logging system.
CAUDIO_API ILogger * getLogger()
Gets the interface to the logger.
Main namespace for the entire cAudio library.