aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2014-05-17 08:04:14 -0700
committerChris Robinson <[email protected]>2014-05-17 08:04:14 -0700
commit190ab90c0d65a6e90ca96d31bc42f55a3023df5f (patch)
tree639e29dc796cdac0b8836d4ab9bde8ce0bab6834 /OpenAL32
parent82dd2d875e9b7549eaa63f9d1a3e08635aafa524 (diff)
Support the band-pass filter
Diffstat (limited to 'OpenAL32')
-rw-r--r--OpenAL32/alFilter.c85
1 files changed, 84 insertions, 1 deletions
diff --git a/OpenAL32/alFilter.c b/OpenAL32/alFilter.c
index 154c167e..24e70766 100644
--- a/OpenAL32/alFilter.c
+++ b/OpenAL32/alFilter.c
@@ -145,7 +145,8 @@ AL_API ALvoid AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint value)
{
if(param == AL_FILTER_TYPE)
{
- if(value == AL_FILTER_NULL || value == AL_FILTER_LOWPASS || value == AL_FILTER_HIGHPASS)
+ if(value == AL_FILTER_NULL || value == AL_FILTER_LOWPASS ||
+ value == AL_FILTER_HIGHPASS || value == AL_FILTER_BANDPASS)
InitFilterParams(ALFilter, value);
else
alSetError(Context, AL_INVALID_VALUE);
@@ -524,6 +525,71 @@ static void hp_GetParamfv(ALfilter *filter, ALCcontext *context, ALenum param, A
}
+static void bp_SetParami(ALfilter *UNUSED(filter), ALCcontext *context, ALenum UNUSED(param), ALint UNUSED(val))
+{ SET_ERROR_AND_RETURN(context, AL_INVALID_ENUM); }
+static void bp_SetParamiv(ALfilter *UNUSED(filter), ALCcontext *context, ALenum UNUSED(param), const ALint *UNUSED(vals))
+{ SET_ERROR_AND_RETURN(context, AL_INVALID_ENUM); }
+static void bp_SetParamf(ALfilter *filter, ALCcontext *context, ALenum param, ALfloat val)
+{
+ switch(param)
+ {
+ case AL_BANDPASS_GAIN:
+ if(!(val >= AL_BANDPASS_MIN_GAIN && val <= AL_BANDPASS_MAX_GAIN))
+ SET_ERROR_AND_RETURN(context, AL_INVALID_VALUE);
+ filter->Gain = val;
+ break;
+
+ case AL_BANDPASS_GAINHF:
+ if(!(val >= AL_BANDPASS_MIN_GAINHF && val <= AL_BANDPASS_MAX_GAINHF))
+ SET_ERROR_AND_RETURN(context, AL_INVALID_VALUE);
+ filter->GainHF = val;
+ break;
+
+ case AL_BANDPASS_GAINLF:
+ if(!(val >= AL_BANDPASS_MIN_GAINLF && val <= AL_BANDPASS_MAX_GAINLF))
+ SET_ERROR_AND_RETURN(context, AL_INVALID_VALUE);
+ filter->GainLF = val;
+ break;
+
+ default:
+ SET_ERROR_AND_RETURN(context, AL_INVALID_ENUM);
+ }
+}
+static void bp_SetParamfv(ALfilter *filter, ALCcontext *context, ALenum param, const ALfloat *vals)
+{
+ bp_SetParamf(filter, context, param, vals[0]);
+}
+
+static void bp_GetParami(ALfilter *UNUSED(filter), ALCcontext *context, ALenum UNUSED(param), ALint *UNUSED(val))
+{ SET_ERROR_AND_RETURN(context, AL_INVALID_ENUM); }
+static void bp_GetParamiv(ALfilter *UNUSED(filter), ALCcontext *context, ALenum UNUSED(param), ALint *UNUSED(vals))
+{ SET_ERROR_AND_RETURN(context, AL_INVALID_ENUM); }
+static void bp_GetParamf(ALfilter *filter, ALCcontext *context, ALenum param, ALfloat *val)
+{
+ switch(param)
+ {
+ case AL_BANDPASS_GAIN:
+ *val = filter->Gain;
+ break;
+
+ case AL_BANDPASS_GAINHF:
+ *val = filter->GainHF;
+ break;
+
+ case AL_BANDPASS_GAINLF:
+ *val = filter->GainLF;
+ break;
+
+ default:
+ SET_ERROR_AND_RETURN(context, AL_INVALID_ENUM);
+ }
+}
+static void bp_GetParamfv(ALfilter *filter, ALCcontext *context, ALenum param, ALfloat *vals)
+{
+ bp_GetParamf(filter, context, param, vals);
+}
+
+
static void null_SetParami(ALfilter *UNUSED(filter), ALCcontext *context, ALenum UNUSED(param), ALint UNUSED(val))
{ SET_ERROR_AND_RETURN(context, AL_INVALID_ENUM); }
static void null_SetParamiv(ALfilter *UNUSED(filter), ALCcontext *context, ALenum UNUSED(param), const ALint *UNUSED(vals))
@@ -595,6 +661,23 @@ static void InitFilterParams(ALfilter *filter, ALenum type)
filter->GetParamf = hp_GetParamf;
filter->GetParamfv = hp_GetParamfv;
}
+ else if(type == AL_FILTER_BANDPASS)
+ {
+ filter->Gain = AL_BANDPASS_DEFAULT_GAIN;
+ filter->GainHF = AL_BANDPASS_DEFAULT_GAINHF;
+ filter->HFReference = LOWPASSFREQREF;
+ filter->GainLF = AL_BANDPASS_DEFAULT_GAINLF;
+ filter->LFReference = HIGHPASSFREQREF;
+
+ filter->SetParami = bp_SetParami;
+ filter->SetParamiv = bp_SetParamiv;
+ filter->SetParamf = bp_SetParamf;
+ filter->SetParamfv = bp_SetParamfv;
+ filter->GetParami = bp_GetParami;
+ filter->GetParamiv = bp_GetParamiv;
+ filter->GetParamf = bp_GetParamf;
+ filter->GetParamfv = bp_GetParamfv;
+ }
else
{
filter->SetParami = null_SetParami;