changed listener orientation to match openal handedness.
This commit is contained in:
parent
638b22362e
commit
6ddf7d5a9a
1 changed files with 34 additions and 32 deletions
66
src/openal.c
66
src/openal.c
|
@ -37,12 +37,9 @@ static int SoundActivated = 0;
|
|||
|
||||
/*
|
||||
openal.c TODO:
|
||||
1. AL_PITCH seems to work, but laststand is still a bit weird.
|
||||
2. Panning somewhat works now. Need someone to verify.
|
||||
3. There is no EAX/Reverb. But there's probably not much I can do...
|
||||
4. Restarting sound system may or may not work.
|
||||
5. Doppler (if it was originally used) isn't currently used.
|
||||
6. Better Error Handling (device not avail, etc).
|
||||
1. There is no EAX/Reverb. But there's probably not much I can do...
|
||||
2. Restarting sound system may or may not work.
|
||||
3. Better Error Handling (device not avail, etc).
|
||||
*/
|
||||
int PlatStartSoundSys()
|
||||
{
|
||||
|
@ -84,8 +81,7 @@ int PlatStartSoundSys()
|
|||
alListenerfv(AL_VELOCITY, vel);
|
||||
alListenerfv(AL_ORIENTATION, or);
|
||||
|
||||
/* alDistanceModel(AL_NONE); */
|
||||
alDistanceModel(AL_INVERSE_DISTANCE);
|
||||
alDistanceModel(AL_NONE);
|
||||
|
||||
if (alGetError() != AL_NO_ERROR) {
|
||||
fprintf(stderr, "alListenerfv() error = ...\n");
|
||||
|
@ -138,7 +134,7 @@ void PlatEndSoundSys()
|
|||
// divide or multiply by 2 to subtract or add an octave
|
||||
static const float pitch_to_frequency_mult_table [] =
|
||||
{
|
||||
1.0F, 1.00045137F, 1.000902943F, 1.00135472F, 1.001806701F, 1.002258886F, 1.002711275F, 1.003163868F,
|
||||
1.0F, 1.00045137F, 1.000902943F, 1.00135472F, 1.001806701F, 1.002258886F, 1.002711275F, 1.003163868F,
|
||||
1.003616666F, 1.004069668F, 1.004522874F, 1.004976285F, 1.005429901F, 1.005883722F, 1.006337747F, 1.006791977F,
|
||||
1.007246412F, 1.007701053F, 1.008155898F, 1.008610949F, 1.009066205F, 1.009521667F, 1.009977334F, 1.010433207F,
|
||||
1.010889286F, 1.011345571F, 1.011802061F, 1.012258758F, 1.012715661F, 1.01317277F, 1.013630085F, 1.014087607F,
|
||||
|
@ -459,26 +455,25 @@ void PlatStopSound(int activeIndex)
|
|||
}
|
||||
|
||||
/* table generated by:
|
||||
c = -600.0 / log10(.5);
|
||||
x = pow(10, (double)vol_to_atten_table[volume]/c);
|
||||
vol_to_gain_table[volume] = (float) pow(10.0, (double) vol_to_atten_table[volume] / 2000.0);
|
||||
*/
|
||||
static const float vol_to_gain_table[] = {
|
||||
0.000000f, 0.000011f, 0.000054f, 0.000142f, 0.000279f, 0.000474f, 0.000730f, 0.001052f,
|
||||
0.001441f, 0.001904f, 0.002444f, 0.003061f, 0.003764f, 0.004544f, 0.005417f, 0.006382f,
|
||||
0.007434f, 0.008579f, 0.009820f, 0.011164f, 0.012604f, 0.014147f, 0.015788f, 0.017538f,
|
||||
0.019393f, 0.021369f, 0.023438f, 0.025619f, 0.027937f, 0.030360f, 0.032880f, 0.035526f,
|
||||
0.038296f, 0.041187f, 0.044194f, 0.047366f, 0.050649f, 0.054034f, 0.057512f, 0.061143f,
|
||||
0.064929f, 0.068869f, 0.072880f, 0.077035f, 0.081428f, 0.085872f, 0.090454f, 0.095171f,
|
||||
0.100018f, 0.104991f, 0.110083f, 0.115423f, 0.120882f, 0.126452f, 0.132127f, 0.138057f,
|
||||
0.143919f, 0.150205f, 0.156402f, 0.162856f, 0.169576f, 0.176369f, 0.183222f, 0.190342f,
|
||||
0.197510f, 0.204948f, 0.212421f, 0.220166f, 0.227931f, 0.235969f, 0.244008f, 0.252613f,
|
||||
0.260918f, 0.269496f, 0.278355f, 0.287507f, 0.296616f, 0.306013f, 0.315344f, 0.324960f,
|
||||
0.334869f, 0.344681f, 0.355191f, 0.365177f, 0.375877f, 0.386445f, 0.397309f, 0.408479f,
|
||||
0.419478f, 0.430773f, 0.442372f, 0.454284f, 0.465978f, 0.477973f, 0.490276f, 0.502896f,
|
||||
0.515246f, 0.528509f, 0.541488f, 0.554144f, 0.567752f, 0.581023f, 0.595291f, 0.609205f,
|
||||
0.622725f, 0.637280f, 0.651423f, 0.666649f, 0.681444f, 0.695762f, 0.711203f, 0.726986f,
|
||||
0.742262f, 0.757858f, 0.773782f, 0.790041f, 0.806642f, 0.823591f, 0.839926f, 0.856584f,
|
||||
0.873573f, 0.890899f, 0.908568f, 0.926588f, 0.944965f, 0.962594f, 0.980552f, 1.000000f
|
||||
0.000010f, 0.000011f, 0.000056f, 0.000146f, 0.000287f, 0.000486f, 0.000748f, 0.001076f,
|
||||
0.001474f, 0.001945f, 0.002495f, 0.003122f, 0.003837f, 0.004629f, 0.005514f, 0.006494f,
|
||||
0.007560f, 0.008720f, 0.009977f, 0.011337f, 0.012794f, 0.014355f, 0.016014f, 0.017783f,
|
||||
0.019656f, 0.021652f, 0.023741f, 0.025942f, 0.028281f, 0.030726f, 0.033266f, 0.035934f,
|
||||
0.038726f, 0.041639f, 0.044668f, 0.047863f, 0.051168f, 0.054576f, 0.058076f, 0.061731f,
|
||||
0.065539f, 0.069502f, 0.073536f, 0.077714f, 0.082130f, 0.086596f, 0.091201f, 0.095940f,
|
||||
0.100809f, 0.105803f, 0.110917f, 0.116279f, 0.121759f, 0.127350f, 0.133045f, 0.138995f,
|
||||
0.144877f, 0.151182f, 0.157398f, 0.163870f, 0.170608f, 0.177419f, 0.184289f, 0.191426f,
|
||||
0.198609f, 0.206063f, 0.213550f, 0.221309f, 0.229087f, 0.237137f, 0.245188f, 0.253805f,
|
||||
0.262120f, 0.270707f, 0.279576f, 0.288735f, 0.297852f, 0.307256f, 0.316592f, 0.326212f,
|
||||
0.336124f, 0.345939f, 0.356451f, 0.366438f, 0.377138f, 0.387704f, 0.398566f, 0.409732f,
|
||||
0.420727f, 0.432016f, 0.443609f, 0.455512f, 0.467197f, 0.479181f, 0.491473f, 0.504081f,
|
||||
0.516416f, 0.529663f, 0.542625f, 0.555265f, 0.568853f, 0.582103f, 0.596348f, 0.610239f,
|
||||
0.623735f, 0.638263f, 0.652379f, 0.667575f, 0.682339f, 0.696626f, 0.712033f, 0.727780f,
|
||||
0.743019f, 0.758578f, 0.774462f, 0.790679f, 0.807235f, 0.824138f, 0.840427f, 0.857038f,
|
||||
0.873977f, 0.891251f, 0.908866f, 0.926830f, 0.945148f, 0.962720f, 0.980618f, 1.000000f
|
||||
};
|
||||
|
||||
int PlatChangeGlobalVolume(int volume)
|
||||
|
@ -523,6 +518,10 @@ int PlatChangeSoundPitch(int activeIndex, int pitch)
|
|||
|
||||
frequency = frequency / (float)GameSounds[gsi].dsFrequency;
|
||||
if (frequency > 2.0) {
|
||||
#ifdef OPENAL_DEBUG
|
||||
fprintf(stderr, "OPENAL: freq clamp = %f\n", frequency);
|
||||
#endif
|
||||
|
||||
alSourceStop(ActiveSounds[activeIndex].ds3DBufferP);
|
||||
return 0;
|
||||
}
|
||||
|
@ -683,15 +682,15 @@ void PlatUpdatePlayer()
|
|||
or[1] = 0.0;
|
||||
or[2] = (float) ((Global_VDB_Ptr->VDB_Mat.mat33) / 65536.0F);
|
||||
or[3] = 0.0;
|
||||
or[4] = 1.0;
|
||||
or[4] = -1.0; /* negated for openal */
|
||||
or[5] = 0.0;
|
||||
} else {
|
||||
or[0] = (float) ((Global_VDB_Ptr->VDB_Mat.mat13) / 65536.0F);
|
||||
or[1] = (float) ((Global_VDB_Ptr->VDB_Mat.mat23) / 65536.0F);
|
||||
or[2] = (float) ((Global_VDB_Ptr->VDB_Mat.mat33) / 65536.0F);
|
||||
or[3] = (float) ((Global_VDB_Ptr->VDB_Mat.mat12) / 65536.0F);
|
||||
or[4] = (float) ((Global_VDB_Ptr->VDB_Mat.mat22) / 65536.0F);
|
||||
or[5] = (float) ((Global_VDB_Ptr->VDB_Mat.mat32) / 65536.0F);
|
||||
or[3] = -(float) ((Global_VDB_Ptr->VDB_Mat.mat12) / 65536.0F);
|
||||
or[4] = -(float) ((Global_VDB_Ptr->VDB_Mat.mat22) / 65536.0F); /* negated for openal */
|
||||
or[5] = -(float) ((Global_VDB_Ptr->VDB_Mat.mat32) / 65536.0F);
|
||||
}
|
||||
|
||||
if ((AvP.PlayerType == I_Alien && DopplerShiftIsOn && NormalFrameTime)) {
|
||||
|
@ -775,7 +774,10 @@ void InitialiseBaseFrequency(SOUNDINDEX soundNum)
|
|||
frequency = ToneToFrequency(GameSounds[soundNum].dsFrequency,
|
||||
PITCH_DEFAULTPLAT, GameSounds[soundNum].pitch);
|
||||
|
||||
fprintf(stderr, "OPENAL: old=%d,new=%d\n", GameSounds[soundNum].dsFrequency, frequency);
|
||||
#ifdef OPENAL_DEBUG
|
||||
fprintf(stderr, "OPENAL: old=%d,new=%d\n", GameSounds[soundNum].dsFrequency, frequency);
|
||||
#endif
|
||||
|
||||
GameSounds[soundNum].dsFrequency = frequency;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue