diff options
author | Chris Robinson <[email protected]> | 2007-12-20 21:48:17 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2007-12-20 21:48:17 -0800 |
commit | 229bc0d7e14f2671b420ea995101fc38523285d2 (patch) | |
tree | 0217bc2b4fc04ae0fb445b6bc456b52745396737 /Alc/ALu.c | |
parent | 7bf9ebf5450840c20d2453fcf7fc1f1b37f979ec (diff) | |
parent | 5b0514a829afcdca201096f8f1c38ab684d45b49 (diff) |
Merge branch 'master' into efx-experiment
Diffstat (limited to 'Alc/ALu.c')
-rw-r--r-- | Alc/ALu.c | 28 |
1 files changed, 13 insertions, 15 deletions
@@ -378,20 +378,7 @@ static ALvoid CalcSourceParams(ALCcontext *ALContext, ALsource *ALSource, Matrix[2][0] = U[2]; Matrix[2][1] = V[2]; Matrix[2][2] = -N[2]; aluMatrixVector(Position, Matrix); - //6. Convert normalized position into left/right front/back pannings - if(Distance != 0.0f) - { - aluNormalize(Position); - PanningLR = 0.5f + 0.5f*Position[0]; - PanningFB = 0.5f + 0.5f*Position[2]; - } - else - { - PanningLR = 0.5f; - PanningFB = 0.5f; - } - - //7. Apply filter gains and filters + //6. Apply filter gains and filters switch(ALSource->DirectFilter.filter) { case AL_FILTER_LOWPASS: @@ -415,8 +402,11 @@ static ALvoid CalcSourceParams(ALCcontext *ALContext, ALsource *ALSource, *drygainhf = DryGainHF; *wetgainhf = WetGainHF; - //8. Convert pannings into channel volumes + //7. Convert pannings into channel volumes WetMix *= ALSource->Send[0].Slot.Gain; + + //8. Convert normalized position into pannings, then into channel volumes + aluNormalize(Position); switch(OutputFormat) { case AL_FORMAT_MONO8: @@ -428,6 +418,7 @@ static ALvoid CalcSourceParams(ALCcontext *ALContext, ALsource *ALSource, break; case AL_FORMAT_STEREO8: case AL_FORMAT_STEREO16: + PanningLR = 0.5f + 0.5f*Position[0]; drysend[0] = ConeVolume * ListenerGain * DryMix * aluSqrt(1.0f-PanningLR); //L Direct drysend[1] = ConeVolume * ListenerGain * DryMix * aluSqrt( PanningLR); //R Direct wetsend[0] = ListenerGain * WetMix * aluSqrt(1.0f-PanningLR); //L Room @@ -435,6 +426,13 @@ static ALvoid CalcSourceParams(ALCcontext *ALContext, ALsource *ALSource, break; case AL_FORMAT_QUAD8: case AL_FORMAT_QUAD16: + // Apply a scalar so each individual speaker has more weight + PanningLR = 0.5f + (0.5f*Position[0]*1.41421356f); + PanningLR = __min(1.0f, PanningLR); + PanningLR = __max(0.0f, PanningLR); + PanningFB = 0.5f + (0.5f*Position[2]*1.41421356f); + PanningFB = __min(1.0f, PanningFB); + PanningFB = __max(0.0f, PanningFB); drysend[0] = ConeVolume * ListenerGain * DryMix * aluSqrt((1.0f-PanningLR)*(1.0f-PanningFB)); //FL Direct drysend[1] = ConeVolume * ListenerGain * DryMix * aluSqrt(( PanningLR)*(1.0f-PanningFB)); //FR Direct drysend[2] = ConeVolume * ListenerGain * DryMix * aluSqrt((1.0f-PanningLR)*( PanningFB)); //BL Direct |