Browse Source

Some housekeeping and preparation for ambient sounds

console
Nico de Poel 5 years ago
parent
commit
162c935334
  1. 4
      engine/Quake/q_sound.h
  2. 22
      engine/Quake/snd_dma.c
  3. 6
      engine/Quake/snd_fmod.c

4
engine/Quake/q_sound.h

@ -189,6 +189,10 @@ extern portable_samplepair_t s_rawsamples[MAX_RAW_SAMPLES];
extern cvar_t bgmvolume;
extern cvar_t nosound;
extern cvar_t ambient_level;
extern cvar_t ambient_fade;
void S_LocalSound (const char *name);
sfxcache_t *S_LoadSound (sfx_t *s);

22
engine/Quake/snd_dma.c

@ -76,7 +76,13 @@ static qboolean snd_initialized = false;
cvar_t bgmvolume = {"bgmvolume", "1", CVAR_ARCHIVE};
cvar_t sfxvolume = {"volume", "0.7", CVAR_ARCHIVE};
cvar_t precache = {"precache", "1", CVAR_NONE};
cvar_t precache = { "precache", "1", CVAR_NONE };
cvar_t nosound = { "nosound", "0", CVAR_NONE };
cvar_t ambient_level = { "ambient_level", "0.3", CVAR_NONE };
cvar_t ambient_fade = { "ambient_fade", "100", CVAR_NONE };
#ifndef USE_FMOD
cvar_t loadas8bit = {"loadas8bit", "0", CVAR_NONE};
cvar_t sndspeed = {"sndspeed", "11025", CVAR_NONE};
@ -91,15 +97,10 @@ cvar_t snd_mixspeed = {"snd_mixspeed", "44100", CVAR_NONE};
cvar_t snd_filterquality = {"snd_filterquality", SND_FILTERQUALITY_DEFAULT,
CVAR_NONE};
static cvar_t nosound = {"nosound", "0", CVAR_NONE};
static cvar_t ambient_level = {"ambient_level", "0.3", CVAR_NONE};
static cvar_t ambient_fade = {"ambient_fade", "100", CVAR_NONE};
static cvar_t snd_noextraupdate = {"snd_noextraupdate", "0", CVAR_NONE};
static cvar_t snd_show = {"snd_show", "0", CVAR_NONE};
static cvar_t _snd_mixahead = {"_snd_mixahead", "0.1", CVAR_ARCHIVE};
#ifndef USE_FMOD
static void S_SoundInfo_f (void)
{
if (!sound_started || !shm)
@ -177,16 +178,19 @@ void S_Init (void)
Cvar_RegisterVariable(&nosound);
Cvar_RegisterVariable(&sfxvolume);
Cvar_RegisterVariable(&precache);
Cvar_RegisterVariable(&loadas8bit);
Cvar_RegisterVariable(&bgmvolume);
Cvar_RegisterVariable(&ambient_level);
Cvar_RegisterVariable(&ambient_fade);
#ifndef USE_FMOD
Cvar_RegisterVariable(&loadas8bit);
Cvar_RegisterVariable(&snd_noextraupdate);
Cvar_RegisterVariable(&snd_show);
Cvar_RegisterVariable(&_snd_mixahead);
Cvar_RegisterVariable(&sndspeed);
Cvar_RegisterVariable(&snd_mixspeed);
Cvar_RegisterVariable(&snd_filterquality);
#endif // USE_FMOD
if (safemode || COM_CheckParm("-nosound"))
return;
@ -199,7 +203,6 @@ void S_Init (void)
Cmd_AddCommand("stopsound", S_StopAllSoundsC);
Cmd_AddCommand("soundlist", S_SoundList);
Cmd_AddCommand("soundinfo", S_SoundInfo_f);
#endif // USE_FMOD
i = COM_CheckParm("-sndspeed");
if (i && i < com_argc-1)
@ -219,7 +222,6 @@ void S_Init (void)
Con_Printf ("loading all sounds as 8bit\n");
}
#ifndef USE_FMOD
Cvar_SetCallback(&sfxvolume, SND_Callback_sfxvolume);
Cvar_SetCallback(&snd_filterquality, &SND_Callback_snd_filterquality);
@ -235,6 +237,7 @@ void S_Init (void)
if (sound_started == 0)
return;
#ifndef USE_FMOD
// provides a tick sound until washed clean
// if (shm->buffer)
// shm->buffer[4] = shm->buffer[5] = 0x7f; // force a pop for debugging
@ -243,6 +246,7 @@ void S_Init (void)
ambient_sfx[AMBIENT_SKY] = S_PrecacheSound ("ambience/wind2.wav");
S_CodecInit ();
#endif // USE_FMOD
S_StopAllSounds (true);
}

6
engine/Quake/snd_fmod.c

@ -112,8 +112,7 @@ void S_Startup(void)
return;
}
// Could use System::set3DRolloffCallback to set up a (attenuation / sound_nominal_clip_dist) distance multiplier (would need to use ChannelControl::setUserData to hold ref to attn value)
// Note: sound_nominal_clip_dist could be dynamic to allow a small sound 'bubble' for local multiplayer
// Set up custom distance attenuation system
FMOD_ChannelGroup_Set3DMinMaxDistance(sfx_channelGroup, 0.0f, sound_nominal_clip_dist);
FMOD_System_Set3DRolloffCallback(fmod_system, &SND_FMOD_Attenuation);
@ -268,7 +267,8 @@ void S_StartSound(int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float f
if (!fmod_system || !sfx)
return;
// TODO: check nosound cvar
if (nosound.value)
return;
S_LoadSound(sfx);
if (!sfx->sound)

Loading…
Cancel
Save