Add mixer rate to the extras menu, and add snd_restart command in order to be able to apply it instantly.

This commit is contained in:
Shpoike 2021-10-14 06:17:25 +01:00
parent 0955d04426
commit f64bd5e9d6
2 changed files with 56 additions and 1 deletions

View file

@ -1639,6 +1639,7 @@ static enum extras_e
EXTRAS_NETEXTENSIONS, EXTRAS_NETEXTENSIONS,
EXTRAS_QCEXTENSIONS, EXTRAS_QCEXTENSIONS,
EXTRAS_CLASSICPARTICLES, EXTRAS_CLASSICPARTICLES,
EXTRAS_AUDIORATE,
EXTRAS_ITEMS EXTRAS_ITEMS
} extras_cursor; } extras_cursor;
@ -1742,6 +1743,10 @@ static void M_Extras_AdjustSliders (int dir)
case EXTRAS_CLASSICPARTICLES: case EXTRAS_CLASSICPARTICLES:
Cvar_SetValueQuick (&r_particles, (r_particles.value==1)?2:1); Cvar_SetValueQuick (&r_particles, (r_particles.value==1)?2:1);
break; break;
case EXTRAS_AUDIORATE:
Cvar_SetValueQuick (&snd_mixspeed, (snd_mixspeed.value==48000)?44100:48000);
Cbuf_AddText("\nsnd_restart\n");
break;
case EXTRAS_ITEMS: //not a real option case EXTRAS_ITEMS: //not a real option
break; break;
} }
@ -1842,6 +1847,16 @@ void M_Extras_Draw (void)
M_Print (220, y, "?!?"); M_Print (220, y, "?!?");
break; break;
case EXTRAS_AUDIORATE:
M_Print (16, y, " Audio Rate");
if (snd_mixspeed.value == 48000)
M_Print (220, y, "48000 hz (DVD)");
else if (r_particles.value == 1)
M_Print (220, y, "44100 hz (CD)");
else
M_Print (220, y, va("%i hz", (int)snd_mixspeed.value));
break;
case EXTRAS_ITEMS: //unreachable. case EXTRAS_ITEMS: //unreachable.
break; break;
} }

View file

@ -44,6 +44,7 @@ static void S_Play (void);
static void S_PlayVol (void); static void S_PlayVol (void);
static void S_SoundList (void); static void S_SoundList (void);
static void S_Update_ (void); static void S_Update_ (void);
static void GetSoundtime (void);
void S_StopAllSounds (qboolean clear); void S_StopAllSounds (qboolean clear);
static void S_StopAllSoundsC (void); static void S_StopAllSoundsC (void);
@ -91,7 +92,7 @@ cvar_t precache = {"precache", "1", CVAR_NONE};
cvar_t loadas8bit = {"loadas8bit", "0", CVAR_NONE}; cvar_t loadas8bit = {"loadas8bit", "0", CVAR_NONE};
cvar_t sndspeed = {"sndspeed", "11025", CVAR_NONE}; cvar_t sndspeed = {"sndspeed", "11025", CVAR_NONE};
cvar_t snd_mixspeed = {"snd_mixspeed", "44100", CVAR_NONE}; cvar_t snd_mixspeed = {"snd_mixspeed", "44100", CVAR_ARCHIVE};
#if defined(_WIN32) #if defined(_WIN32)
#define SND_FILTERQUALITY_DEFAULT "5" #define SND_FILTERQUALITY_DEFAULT "5"
@ -165,8 +166,46 @@ void S_Startup (void)
(shm->channels == 2) ? "stereo" : "mono", (shm->channels == 2) ? "stereo" : "mono",
shm->speed); shm->speed);
} }
GetSoundtime();
paintedtime = soundtime;
} }
/*
snd_restart console command
*/
void S_Restart_f(void)
{
sfx_t *s;
size_t i;
int oldspeed = shm->speed;
if (!snd_initialized)
return;
S_Shutdown();
S_Startup ();
S_CodecInit ();
paintedtime = soundtime;
//we changed the sound time and probably the rates too...
//any timing of sounds will be way off. so lets just kill any currently playing sounds
//(note that this lazy way of killing them will ensure that looping sounds restart)
for (i = 0; i < total_channels; i++)
{
snd_channels[i].pos = 0;
snd_channels[i].end = 0;
}
s_rawend = 0; //clear any music too...
//reload any sounds if their rates changed.
if (shm->speed != oldspeed)
{
for (i = 0; i < num_sfx; i++)
{
s = &known_sfx[i];
if (s->cache.data)
Cache_Free(&s->cache, false);
}
}
}
/* /*
================ ================
@ -210,6 +249,7 @@ void S_Init (void)
Cmd_AddCommand("stopsound", S_StopAllSoundsC); Cmd_AddCommand("stopsound", S_StopAllSoundsC);
Cmd_AddCommand("soundlist", S_SoundList); Cmd_AddCommand("soundlist", S_SoundList);
Cmd_AddCommand("soundinfo", S_SoundInfo_f); Cmd_AddCommand("soundinfo", S_SoundInfo_f);
Cmd_AddCommand("snd_restart", S_Restart_f);
i = COM_CheckParm("-sndspeed"); i = COM_CheckParm("-sndspeed");
if (i && i < com_argc-1) if (i && i < com_argc-1)