void UpdateChannelVolumes()
{
// From the channel balance/volume and the global volume, we compute
// the effective volume for the left and right channel. Note the
// slightly odd divisor: the 255 reflects the fact that the maximal
// value for _volume is 255, while the 127 is there because the
// balance value ranges from -127 to 127. The mixer (music/sound)
// volume is in the range 0 - kMaxMixerVolume.
// Hence, the vol_l/vol_r values will be in that range, too
if (!_mixer.IsSoundTypeMuted(Type))
{
int vol = _mixer.GetVolumeForSoundType(Type) * _volume;
if (_balance == 0)
{
_volL = vol / Mixer.MaxChannelVolume;
_volR = vol / Mixer.MaxChannelVolume;
}
else if (_balance < 0)
{
_volL = vol / Mixer.MaxChannelVolume;
_volR = ((127 + _balance) * vol) / (Mixer.MaxChannelVolume * 127);
}
else
{
_volL = ((127 - _balance) * vol) / (Mixer.MaxChannelVolume * 127);
_volR = vol / Mixer.MaxChannelVolume;
}
}
else
{
_volL = _volR = 0;
}
}