// Initialize the channel
memset (target_chan, 0, sizeof (*target_chan));
VectorCopy (origin, target_chan->origin);
- target_chan->master_vol = (int)(fvol * 255);
target_chan->sfx = sfx;
target_chan->flags = flags;
target_chan->pos = 0; // start of the sound
// Lock the SFX during play
S_LockSfx (sfx);
+
+ // and finally, apply the volume
+ S_SetChannelVolume(target_chan - channels, fvol);
}
void S_SetChannelVolume (unsigned int ch_ind, float fvol)
{
+ sfx_t *sfx = channels[ch_ind].sfx;
+ if(sfx->volume_peak > 0)
+ {
+ // Replaygain support
+ // Con_DPrintf("Setting volume on ReplayGain-enabled track... %f -> ", fvol);
+ fvol *= sfx->volume_mult;
+ if(fvol * sfx->volume_peak > 1)
+ fvol = 1 / sfx->volume_peak;
+ // Con_DPrintf("%f\n", fvol);
+ }
channels[ch_ind].master_vol = (int)(fvol * 255.0f);
}