Reduce songs and sounds to 1/4 volume, add a musicdef option for volume

This commit is contained in:
James R 2020-08-06 21:24:41 -07:00
parent a9861a6b63
commit 7adf2159f6
4 changed files with 29 additions and 2 deletions

View file

@ -676,4 +676,8 @@ extern const char *compdate, *comptime, *comprevision, *compbranch;
/// Hardware renderer: OpenGL
#define GL_SHADERS
/// Default volume for songs that don't have "volume" set via musicdef
/// TODO: Remove this once all songs are ported
#define DEFAULT_MUSICDEF_VOLUME 25
#endif // __DOOMDEF__

View file

@ -1578,6 +1578,7 @@ static UINT32 queue_fadeinms;
musicdef_t *musicdefstart = NULL; // First music definition
struct cursongcredit cursongcredit; // Currently displayed song credit info
int musicdef_volume;
//
// search for music definition in wad
@ -1686,6 +1687,8 @@ void S_LoadMusicDefs(UINT16 wadnum)
}
}
def->volume = DEFAULT_MUSICDEF_VOLUME;
skip_lump:
stoken = strtok(NULL, "\r\n ");
line++;
@ -1720,6 +1723,8 @@ skip_lump:
for (value = def->source; *value; value++)
if (*value == '_') *value = ' '; // turn _ into spaces.
//CONS_Printf("S_LoadMusicDefs: Set source to '%s'\n", def->source);
} else if (!stricmp(stoken, "volume")) {
def->volume = atoi(value);
} else {
CONS_Alert(CONS_WARNING, "MUSICDEF: Invalid field '%s'. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line);
}
@ -2047,6 +2052,19 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32
music_flags = mflags;
music_looping = looping;
musicdef_volume = DEFAULT_MUSICDEF_VOLUME;
{
musicdef_t *def;
for (def = musicdefstart; def; def = def->next)
{
if (strcasecmp(def->name, music_name) == 0)
{
musicdef_volume = def->volume;
}
}
}
if (!S_PlayMusic(looping, fadeinms))
{
CONS_Alert(CONS_ERROR, "Music %.6s could not be played!\n", newmusic);

View file

@ -139,6 +139,7 @@ typedef struct musicdef_s
char name[7];
//char usage[256];
char source[256];
int volume;
struct musicdef_s *next;
} musicdef_t;
@ -151,6 +152,7 @@ extern struct cursongcredit
} cursongcredit;
extern musicdef_t *musicdefstart;
extern int musicdef_volume;
void S_LoadMusicDefs(UINT16 wadnum);
void S_InitMusicDefs(void);

View file

@ -493,7 +493,8 @@ void I_FreeSfx(sfxinfo_t *sfx)
INT32 I_StartSound(sfxenum_t id, UINT8 vol, UINT8 sep, UINT8 pitch, UINT8 priority, INT32 channel)
{
UINT8 volume = (((UINT16)vol + 1) * (UINT16)sfx_volume) / 62; // (256 * 31) / 62 == 127
//UINT8 volume = (((UINT16)vol + 1) * (UINT16)sfx_volume) / 62; // (256 * 31) / 62 == 127
int volume = ( vol + 1 ) / 8;/* reduce to 1/4, 256 / 8 = 128 / 4 = 32 */
INT32 handle = Mix_PlayChannel(channel, S_sfx[id].data, 0);
Mix_Volume(handle, volume);
Mix_SetPanning(handle, min((UINT16)(0xff-sep)<<1, 0xff), min((UINT16)(sep)<<1, 0xff));
@ -531,6 +532,7 @@ void I_SetSfxVolume(UINT8 volume)
static UINT32 get_real_volume(UINT8 volume)
{
(void)volume;
#ifdef _WIN32
if (I_SongType() == MU_MID)
// HACK: Until we stop using native MIDI,
@ -540,7 +542,8 @@ static UINT32 get_real_volume(UINT8 volume)
#endif
// convert volume to mixer's 128 scale
// then apply internal_volume as a percentage
return ((UINT32)volume*128/31) * (UINT32)internal_volume / 100;
//return ((UINT32)volume*128/31) * (UINT32)internal_volume / 100;
return MIX_MAX_VOLUME * musicdef_volume / 100 * internal_volume / 100;
}
static UINT32 get_adjusted_position(UINT32 position)