Fix module and chip music being SRB2 LOUD

This commit is contained in:
James R 2020-10-26 04:19:41 -07:00
parent 364b69c621
commit b21a0a8cf2

View file

@ -570,17 +570,13 @@ void I_SetSfxVolume(int volume)
/// Music Utilities /// Music Utilities
/// ------------------------ /// ------------------------
static UINT32 get_real_volume(int volume) static int attenuate(int scale)
{ {
{ // attenuate scale by all volumes as percentages
// convert volume to mixer's 128 scale return scale
// then apply internal_volume as a percentage * musicdef_volume / 100
//return ((UINT32)volume*128/31) * (UINT32)internal_volume / 100; * internal_volume / 100
return MIX_MAX_VOLUME * music_volume / 100;
* musicdef_volume / 100
* internal_volume / 100
* volume / 100;
}
} }
static UINT32 get_adjusted_position(UINT32 position) static UINT32 get_adjusted_position(UINT32 position)
@ -686,7 +682,7 @@ static UINT32 music_fade(UINT32 interval, void *param)
else if ((fading_timer -= 10) <= 0) else if ((fading_timer -= 10) <= 0)
{ {
internal_volume = fading_target; internal_volume = fading_target;
Mix_VolumeMusic(get_real_volume(music_volume)); Mix_VolumeMusic(attenuate(MIX_MAX_VOLUME));
I_StopFadingSong(); I_StopFadingSong();
do_fading_callback(); do_fading_callback();
return 0; return 0;
@ -699,7 +695,7 @@ static UINT32 music_fade(UINT32 interval, void *param)
internal_volume = max(min(internal_volume, fading_source - FixedMul(delta, factor)), fading_target); internal_volume = max(min(internal_volume, fading_source - FixedMul(delta, factor)), fading_target);
else if (fading_target > fading_source) else if (fading_target > fading_source)
internal_volume = min(max(internal_volume, fading_source + FixedMul(delta, factor)), fading_target); internal_volume = min(max(internal_volume, fading_source + FixedMul(delta, factor)), fading_target);
Mix_VolumeMusic(get_real_volume(music_volume)); Mix_VolumeMusic(attenuate(MIX_MAX_VOLUME));
return interval; return interval;
} }
} }
@ -719,13 +715,9 @@ static void mix_gme(void *udata, Uint8 *stream, int len)
// play gme into stream // play gme into stream
gme_play(gme, len/2, (short *)stream); gme_play(gme, len/2, (short *)stream);
// Limiter to prevent music from being disorted with some formats
if (music_volume >= 18)
music_volume = 18;
// apply volume to stream // apply volume to stream
for (i = 0, p = (short *)stream; i < len/2; i++, p++) for (i = 0, p = (short *)stream; i < len/2; i++, p++)
*p = ((INT32)*p) * (music_volume*internal_volume/100)*2 / 40; *p = attenuate(*p);
} }
#endif #endif
@ -743,13 +735,9 @@ static void mix_openmpt(void *udata, Uint8 *stream, int len)
// Play module into stream // Play module into stream
openmpt_module_read_interleaved_stereo(openmpt_mhandle, SAMPLERATE, BUFFERSIZE, (short *)stream); openmpt_module_read_interleaved_stereo(openmpt_mhandle, SAMPLERATE, BUFFERSIZE, (short *)stream);
// Limiter to prevent music from being disorted with some formats
if (music_volume >= 18)
music_volume = 18;
// apply volume to stream // apply volume to stream
for (i = 0, p = (short *)stream; i < len/2; i++, p++) for (i = 0, p = (short *)stream; i < len/2; i++, p++)
*p = ((INT32)*p) * (music_volume*internal_volume/100)*2 / 40; *p = attenuate(*p);
} }
#endif #endif
@ -1398,7 +1386,7 @@ void I_SetMusicVolume(int volume)
music_volume = volume; music_volume = volume;
Mix_VolumeMusic(get_real_volume(music_volume)); Mix_VolumeMusic(attenuate(MIX_MAX_VOLUME));
} }
boolean I_SetSongTrack(int track) boolean I_SetSongTrack(int track)
@ -1460,7 +1448,7 @@ void I_SetInternalMusicVolume(UINT8 volume)
internal_volume = volume; internal_volume = volume;
if (!I_SongPlaying()) if (!I_SongPlaying())
return; return;
Mix_VolumeMusic(get_real_volume(music_volume)); Mix_VolumeMusic(attenuate(MIX_MAX_VOLUME));
} }
void I_StopFadingSong(void) void I_StopFadingSong(void)