Add an option to scale the output mix

This commit is contained in:
Chris Robinson
2010-04-23 07:54:43 -07:00
parent 52663e8a44
commit 110be7f500
2 changed files with 24 additions and 14 deletions
+15 -14
View File
@@ -234,7 +234,6 @@ ALvoid aluInitPanning(ALCdevice *Device)
Channel Speaker2Chan[OUTPUTCHANNELS];
ALfloat Alpha, Theta;
ALint pos, offset;
ALfloat maxout;
ALuint s, s2;
for(s = 0;s < OUTPUTCHANNELS;s++)
@@ -381,23 +380,25 @@ ALvoid aluInitPanning(ALCdevice *Device)
assert(0);
}
maxout = 1.0f;
for(s = 0;s < OUTPUTCHANNELS;s++)
if(GetConfigValueBool(NULL, "scalemix", 0))
{
ALfloat out = 0.0f;
for(s2 = 0;s2 < OUTPUTCHANNELS;s2++)
out += Device->ChannelMatrix[s2][s];
maxout = __max(maxout, out);
}
ALfloat maxout = 1.0f;
for(s = 0;s < OUTPUTCHANNELS;s++)
{
ALfloat out = 0.0f;
for(s2 = 0;s2 < OUTPUTCHANNELS;s2++)
out += Device->ChannelMatrix[s2][s];
maxout = __max(maxout, out);
}
maxout = 1.0f/maxout;
for(s = 0;s < OUTPUTCHANNELS;s++)
{
for(s2 = 0;s2 < OUTPUTCHANNELS;s2++)
Device->ChannelMatrix[s2][s] *= maxout;
maxout = 1.0f/maxout;
for(s = 0;s < OUTPUTCHANNELS;s++)
{
for(s2 = 0;s2 < OUTPUTCHANNELS;s2++)
Device->ChannelMatrix[s2][s] *= maxout;
}
}
for(pos = 0; pos < LUT_NUM; pos++)
{
/* clear all values */
+9
View File
@@ -102,6 +102,15 @@
# will cause stereo sounds to only play out the front speakers.
#stereodup = false
## scalemix:
# Sets whether to scale the remixed output. When the final mix is written to
# the device, the multi-channel data is remixed so pure-virtual channels (eg.
# front-center on stereo output) are remixed and added to available channels
# (eg. front-left and front-right). Scaling helps ensure that no single source
# will put out more than 100% on a given physical channel. This can cause a
# noticeable reduction in overall volume, however, so it is off by default.
#scalemix = false
## drivers:
# Sets the backend driver list order, comma-seperated. Unknown backends and
# duplicated names are ignored. Unlisted backends won't be considered for use