Add a cosine resampler
This commit is contained in:
parent
705849ca73
commit
93b584ff84
17
Alc/ALu.c
17
Alc/ALu.c
@ -870,6 +870,11 @@ static __inline ALfloat lerp(ALfloat val1, ALfloat val2, ALint frac)
|
||||
{
|
||||
return val1 + ((val2-val1)*(frac * (1.0f/(1<<FRACTIONBITS))));
|
||||
}
|
||||
static __inline ALfloat cos_lerp(ALfloat val1, ALfloat val2, ALint frac)
|
||||
{
|
||||
ALfloat mult = (1.0f-cos(frac * (1.0f/(1<<FRACTIONBITS)) * M_PI)) * 0.5f;
|
||||
return val1 + ((val2-val1)*mult);
|
||||
}
|
||||
|
||||
static void MixSomeSources(ALCcontext *ALContext, float (*DryBuffer)[OUTPUTCHANNELS], ALuint SamplesToDo)
|
||||
{
|
||||
@ -1106,6 +1111,8 @@ another_source:
|
||||
break;
|
||||
case LINEAR: DO_MIX(lerp);
|
||||
break;
|
||||
case COSINE: DO_MIX(cos_lerp);
|
||||
break;
|
||||
case RESAMPLER_MAX:
|
||||
break;
|
||||
}
|
||||
@ -1153,6 +1160,8 @@ another_source:
|
||||
break;
|
||||
case LINEAR: DO_MIX(lerp);
|
||||
break;
|
||||
case COSINE: DO_MIX(cos_lerp);
|
||||
break;
|
||||
case RESAMPLER_MAX:
|
||||
break;
|
||||
}
|
||||
@ -1171,6 +1180,8 @@ another_source:
|
||||
break;
|
||||
case LINEAR: DO_MIX(lerp);
|
||||
break;
|
||||
case COSINE: DO_MIX(cos_lerp);
|
||||
break;
|
||||
case RESAMPLER_MAX:
|
||||
break;
|
||||
}
|
||||
@ -1190,6 +1201,8 @@ another_source:
|
||||
break;
|
||||
case LINEAR: DO_MIX(lerp);
|
||||
break;
|
||||
case COSINE: DO_MIX(cos_lerp);
|
||||
break;
|
||||
case RESAMPLER_MAX:
|
||||
break;
|
||||
}
|
||||
@ -1210,6 +1223,8 @@ another_source:
|
||||
break;
|
||||
case LINEAR: DO_MIX(lerp);
|
||||
break;
|
||||
case COSINE: DO_MIX(cos_lerp);
|
||||
break;
|
||||
case RESAMPLER_MAX:
|
||||
break;
|
||||
}
|
||||
@ -1230,6 +1245,8 @@ another_source:
|
||||
break;
|
||||
case LINEAR: DO_MIX(lerp);
|
||||
break;
|
||||
case COSINE: DO_MIX(cos_lerp);
|
||||
break;
|
||||
case RESAMPLER_MAX:
|
||||
break;
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ extern "C" {
|
||||
typedef enum {
|
||||
POINT = 0,
|
||||
LINEAR,
|
||||
COSINE,
|
||||
|
||||
RESAMPLER_MAX
|
||||
} resampler_t;
|
||||
|
@ -64,6 +64,7 @@
|
||||
# Selects the resampler used when mixing sources. Valid values are:
|
||||
# 0 - None (nearest sample, no interpolation)
|
||||
# 1 - Linear (extrapolates samples using a linear slope between samples)
|
||||
# 2 - Cosine (extrapolates using a (co)sine slope)
|
||||
# Specifying other values will result in using the default (linear).
|
||||
#resampler = 1
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user