Use a proper struct for specifying angular points
This commit is contained in:
parent
fa9ab9af7c
commit
6ff50558a0
@ -194,7 +194,7 @@ void GetHrtfCoeffs(const struct Hrtf *Hrtf, ALfloat elevation, ALfloat azimuth,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void BuildBFormatHrtf(const struct Hrtf *Hrtf, DirectHrtfState *state, ALsizei NumChannels, const ALfloat (*restrict AmbiPoints)[2], const ALfloat (*restrict AmbiMatrix)[MAX_AMBI_COEFFS], ALsizei AmbiCount, const ALfloat *restrict AmbiOrderHFGain)
|
void BuildBFormatHrtf(const struct Hrtf *Hrtf, DirectHrtfState *state, ALsizei NumChannels, const struct AngularPoint *AmbiPoints, const ALfloat (*restrict AmbiMatrix)[MAX_AMBI_COEFFS], ALsizei AmbiCount, const ALfloat *restrict AmbiOrderHFGain)
|
||||||
{
|
{
|
||||||
/* Set this to 2 for dual-band HRTF processing. May require a higher quality
|
/* Set this to 2 for dual-band HRTF processing. May require a higher quality
|
||||||
* band-splitter, or better calculation of the new IR length to deal with the
|
* band-splitter, or better calculation of the new IR length to deal with the
|
||||||
@ -216,15 +216,15 @@ void BuildBFormatHrtf(const struct Hrtf *Hrtf, DirectHrtfState *state, ALsizei N
|
|||||||
ALuint azcount;
|
ALuint azcount;
|
||||||
|
|
||||||
/* Calculate elevation index. */
|
/* Calculate elevation index. */
|
||||||
evidx = (ALsizei)floorf((F_PI_2 + AmbiPoints[c][0]) *
|
evidx = (ALsizei)floorf((F_PI_2 + AmbiPoints[c].Elev) *
|
||||||
(Hrtf->evCount-1)/F_PI + 0.5f);
|
(Hrtf->evCount-1)/F_PI + 0.5f);
|
||||||
evidx = mini(evidx, Hrtf->evCount-1);
|
evidx = clampi(evidx, 0, Hrtf->evCount-1);
|
||||||
|
|
||||||
azcount = Hrtf->azCount[evidx];
|
azcount = Hrtf->azCount[evidx];
|
||||||
evoffset = Hrtf->evOffset[evidx];
|
evoffset = Hrtf->evOffset[evidx];
|
||||||
|
|
||||||
/* Calculate azimuth index for this elevation. */
|
/* Calculate azimuth index for this elevation. */
|
||||||
azidx = (ALsizei)floorf((F_TAU+AmbiPoints[c][1]) *
|
azidx = (ALsizei)floorf((F_TAU+AmbiPoints[c].Azim) *
|
||||||
azcount/F_TAU + 0.5f) % azcount;
|
azcount/F_TAU + 0.5f) % azcount;
|
||||||
|
|
||||||
/* Calculate indices for left and right channels. */
|
/* Calculate indices for left and right channels. */
|
||||||
|
@ -63,6 +63,11 @@ typedef struct DirectHrtfState {
|
|||||||
} Chan[];
|
} Chan[];
|
||||||
} DirectHrtfState;
|
} DirectHrtfState;
|
||||||
|
|
||||||
|
struct AngularPoint {
|
||||||
|
ALfloat Elev;
|
||||||
|
ALfloat Azim;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void FreeHrtfs(void);
|
void FreeHrtfs(void);
|
||||||
|
|
||||||
@ -79,6 +84,6 @@ void GetHrtfCoeffs(const struct Hrtf *Hrtf, ALfloat elevation, ALfloat azimuth,
|
|||||||
* virtual speaker positions and HF/LF matrices for decoding to them. The
|
* virtual speaker positions and HF/LF matrices for decoding to them. The
|
||||||
* returned coefficients are ordered and scaled according to the matrices.
|
* returned coefficients are ordered and scaled according to the matrices.
|
||||||
*/
|
*/
|
||||||
void BuildBFormatHrtf(const struct Hrtf *Hrtf, DirectHrtfState *state, ALsizei NumChannels, const ALfloat (*restrict AmbiPoints)[2], const ALfloat (*restrict AmbiMatrix)[MAX_AMBI_COEFFS], ALsizei AmbiCount, const ALfloat *restrict AmbiOrderHFGain);
|
void BuildBFormatHrtf(const struct Hrtf *Hrtf, DirectHrtfState *state, ALsizei NumChannels, const struct AngularPoint *AmbiPoints, const ALfloat (*restrict AmbiMatrix)[MAX_AMBI_COEFFS], ALsizei AmbiCount, const ALfloat *restrict AmbiOrderHFGain);
|
||||||
|
|
||||||
#endif /* ALC_HRTF_H */
|
#endif /* ALC_HRTF_H */
|
||||||
|
@ -810,7 +810,7 @@ static void InitHQPanning(ALCdevice *device, const AmbDecConf *conf, const ALsiz
|
|||||||
static void InitHrtfPanning(ALCdevice *device)
|
static void InitHrtfPanning(ALCdevice *device)
|
||||||
{
|
{
|
||||||
/* NOTE: azimuth goes clockwise. */
|
/* NOTE: azimuth goes clockwise. */
|
||||||
static const ALfloat AmbiPoints[][2] = {
|
static const struct AngularPoint AmbiPoints[] = {
|
||||||
{ DEG2RAD( 90.0f), DEG2RAD( 0.0f) },
|
{ DEG2RAD( 90.0f), DEG2RAD( 0.0f) },
|
||||||
{ DEG2RAD( 35.0f), DEG2RAD( 45.0f) },
|
{ DEG2RAD( 35.0f), DEG2RAD( 45.0f) },
|
||||||
{ DEG2RAD( 35.0f), DEG2RAD( 135.0f) },
|
{ DEG2RAD( 35.0f), DEG2RAD( 135.0f) },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user