diff options
author | Chris Robinson <[email protected]> | 2010-04-11 14:23:10 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2010-04-11 14:23:10 -0700 |
commit | d4f8bd665f822466e401049b494da172690bf0cf (patch) | |
tree | f3fe196a02460c7e014ad361a3c6fe0c63b1977c | |
parent | 58d0db6eabf29998491544703a1ca1a670cb2b13 (diff) |
Only consider output speakers for the panning LUT
-rw-r--r-- | Alc/ALu.c | 87 | ||||
-rw-r--r-- | alsoftrc.sample | 9 |
2 files changed, 72 insertions, 24 deletions
@@ -235,26 +235,6 @@ ALvoid aluInitPanning(ALCdevice *Device) ALfloat maxout; ALuint s, s2; - /* Exclude LFE */ - Device->NumChan = OUTPUTCHANNELS - 1; - Speaker2Chan[0] = BACK_LEFT; - Speaker2Chan[1] = SIDE_LEFT; - Speaker2Chan[2] = FRONT_LEFT; - Speaker2Chan[3] = FRONT_CENTER; - Speaker2Chan[4] = FRONT_RIGHT; - Speaker2Chan[5] = SIDE_RIGHT; - Speaker2Chan[6] = BACK_RIGHT; - Speaker2Chan[7] = BACK_CENTER; - SpeakerAngle[0] = -150.0f * M_PI/180.0f; - SpeakerAngle[1] = -90.0f * M_PI/180.0f; - SpeakerAngle[2] = -30.0f * M_PI/180.0f; - SpeakerAngle[3] = 0.0f * M_PI/180.0f; - SpeakerAngle[4] = 30.0f * M_PI/180.0f; - SpeakerAngle[5] = 90.0f * M_PI/180.0f; - SpeakerAngle[6] = 150.0f * M_PI/180.0f; - SpeakerAngle[7] = 180.0f * M_PI/180.0f; - SetSpeakerArrangement("layout", SpeakerAngle, Speaker2Chan, Device->NumChan); - for(s = 0;s < OUTPUTCHANNELS;s++) { for(s2 = 0;s2 < OUTPUTCHANNELS;s2++) @@ -273,6 +253,9 @@ ALvoid aluInitPanning(ALCdevice *Device) Device->ChannelMatrix[BACK_LEFT][FRONT_CENTER] = aluSqrt(0.5); Device->ChannelMatrix[BACK_RIGHT][FRONT_CENTER] = aluSqrt(0.5); Device->ChannelMatrix[BACK_CENTER][FRONT_CENTER] = 1.0f; + Device->NumChan = 1; + Speaker2Chan[0] = FRONT_CENTER; + SpeakerAngle[0] = 0.0f * M_PI/180.0f; break; case AL_FORMAT_STEREO8: @@ -286,6 +269,12 @@ ALvoid aluInitPanning(ALCdevice *Device) Device->ChannelMatrix[BACK_RIGHT][FRONT_RIGHT] = 1.0f; Device->ChannelMatrix[BACK_CENTER][FRONT_LEFT] = aluSqrt(0.5); Device->ChannelMatrix[BACK_CENTER][FRONT_RIGHT] = aluSqrt(0.5); + Device->NumChan = 2; + Speaker2Chan[0] = FRONT_LEFT; + Speaker2Chan[1] = FRONT_RIGHT; + SpeakerAngle[0] = -90.0f * M_PI/180.0f; + SpeakerAngle[1] = 90.0f * M_PI/180.0f; + SetSpeakerArrangement("layout", SpeakerAngle, Speaker2Chan, Device->NumChan); break; case AL_FORMAT_QUAD8: @@ -299,6 +288,16 @@ ALvoid aluInitPanning(ALCdevice *Device) Device->ChannelMatrix[SIDE_RIGHT][BACK_RIGHT] = aluSqrt(0.5); Device->ChannelMatrix[BACK_CENTER][BACK_LEFT] = aluSqrt(0.5); Device->ChannelMatrix[BACK_CENTER][BACK_RIGHT] = aluSqrt(0.5); + Device->NumChan = 4; + Speaker2Chan[0] = BACK_LEFT; + Speaker2Chan[1] = FRONT_LEFT; + Speaker2Chan[2] = FRONT_RIGHT; + Speaker2Chan[3] = BACK_RIGHT; + SpeakerAngle[0] = -135.0f * M_PI/180.0f; + SpeakerAngle[1] = -45.0f * M_PI/180.0f; + SpeakerAngle[2] = 45.0f * M_PI/180.0f; + SpeakerAngle[3] = 135.0f * M_PI/180.0f; + SetSpeakerArrangement("layout", SpeakerAngle, Speaker2Chan, Device->NumChan); break; case AL_FORMAT_51CHN8: @@ -310,6 +309,18 @@ ALvoid aluInitPanning(ALCdevice *Device) Device->ChannelMatrix[SIDE_RIGHT][BACK_RIGHT] = aluSqrt(0.5); Device->ChannelMatrix[BACK_CENTER][BACK_LEFT] = aluSqrt(0.5); Device->ChannelMatrix[BACK_CENTER][BACK_RIGHT] = aluSqrt(0.5); + Device->NumChan = 5; + Speaker2Chan[0] = BACK_LEFT; + Speaker2Chan[1] = FRONT_LEFT; + Speaker2Chan[2] = FRONT_CENTER; + Speaker2Chan[3] = FRONT_RIGHT; + Speaker2Chan[4] = BACK_RIGHT; + SpeakerAngle[0] = -110.0f * M_PI/180.0f; + SpeakerAngle[1] = -30.0f * M_PI/180.0f; + SpeakerAngle[2] = 0.0f * M_PI/180.0f; + SpeakerAngle[3] = 30.0f * M_PI/180.0f; + SpeakerAngle[4] = 110.0f * M_PI/180.0f; + SetSpeakerArrangement("layout", SpeakerAngle, Speaker2Chan, Device->NumChan); break; case AL_FORMAT_61CHN8: @@ -319,6 +330,20 @@ ALvoid aluInitPanning(ALCdevice *Device) Device->ChannelMatrix[BACK_LEFT][SIDE_LEFT] = aluSqrt(0.5); Device->ChannelMatrix[BACK_RIGHT][BACK_CENTER] = aluSqrt(0.5); Device->ChannelMatrix[BACK_RIGHT][SIDE_RIGHT] = aluSqrt(0.5); + Device->NumChan = 6; + Speaker2Chan[0] = SIDE_LEFT; + Speaker2Chan[1] = FRONT_LEFT; + Speaker2Chan[2] = FRONT_CENTER; + Speaker2Chan[3] = FRONT_RIGHT; + Speaker2Chan[4] = SIDE_RIGHT; + Speaker2Chan[5] = BACK_CENTER; + SpeakerAngle[0] = -90.0f * M_PI/180.0f; + SpeakerAngle[1] = -30.0f * M_PI/180.0f; + SpeakerAngle[2] = 0.0f * M_PI/180.0f; + SpeakerAngle[3] = 30.0f * M_PI/180.0f; + SpeakerAngle[4] = 90.0f * M_PI/180.0f; + SpeakerAngle[5] = 180.0f * M_PI/180.0f; + SetSpeakerArrangement("layout", SpeakerAngle, Speaker2Chan, Device->NumChan); break; case AL_FORMAT_71CHN8: @@ -326,6 +351,22 @@ ALvoid aluInitPanning(ALCdevice *Device) case AL_FORMAT_71CHN32: Device->ChannelMatrix[BACK_CENTER][BACK_LEFT] = aluSqrt(0.5); Device->ChannelMatrix[BACK_CENTER][BACK_RIGHT] = aluSqrt(0.5); + Device->NumChan = 7; + Speaker2Chan[0] = BACK_LEFT; + Speaker2Chan[1] = SIDE_LEFT; + Speaker2Chan[2] = FRONT_LEFT; + Speaker2Chan[3] = FRONT_CENTER; + Speaker2Chan[4] = FRONT_RIGHT; + Speaker2Chan[5] = SIDE_RIGHT; + Speaker2Chan[6] = BACK_RIGHT; + SpeakerAngle[0] = -150.0f * M_PI/180.0f; + SpeakerAngle[1] = -90.0f * M_PI/180.0f; + SpeakerAngle[2] = -30.0f * M_PI/180.0f; + SpeakerAngle[3] = 0.0f * M_PI/180.0f; + SpeakerAngle[4] = 30.0f * M_PI/180.0f; + SpeakerAngle[5] = 90.0f * M_PI/180.0f; + SpeakerAngle[6] = 150.0f * M_PI/180.0f; + SetSpeakerArrangement("layout", SpeakerAngle, Speaker2Chan, Device->NumChan); break; default: @@ -356,6 +397,12 @@ ALvoid aluInitPanning(ALCdevice *Device) for(s = 0; s < OUTPUTCHANNELS; s++) Device->PanningLUT[offset+s] = 0.0f; + if(Device->NumChan == 1) + { + Device->PanningLUT[offset + Speaker2Chan[0]] = 1.0f; + continue; + } + /* source angle */ Theta = aluLUTpos2Angle(pos); diff --git a/alsoftrc.sample b/alsoftrc.sample index 9dc533f4..ca8d93a6 100644 --- a/alsoftrc.sample +++ b/alsoftrc.sample @@ -132,10 +132,11 @@ ## layout: # Sets the virtual speaker layout. Values are specified in degrees, where 0 is # straight in front, negative goes left, and positive goes right. Unspecified -# speakers will remain at their default position. Available speakers are back- -# left(bl), side-left(sl), front-left(fl), front-center(fc), front-right(fr), -# side-right(sr), back-right(br), and back-center(bc). -#layout = bl=-150, sl=-90, fl=-30, fc=0, fr=30, sr=90, br=150, bc=180 +# speakers will remain at their default positions (which are dependant on the +# output format). Available speakers are back-left(bl), side-left(sl), front- +# left(fl), front-center(fc), front-right(fr), side-right(sr), back-right(br), +# and back-center(bc). +#layout = ## ## ALSA backend stuff |