// Linked list of known sfx
sfx_t *known_sfx = NULL;
-int sound_started = 0;
+qboolean sound_started = false;
+qboolean sound_spatialized = false;
+
+// Fake dma is a synchronous faking of the DMA progress used for
+// isolating performance in the renderer.
+qboolean fakedma = false;
cvar_t bgmvolume = {CVAR_SAVE, "bgmvolume", "1"};
cvar_t volume = {CVAR_SAVE, "volume", "0.7"};
// User-setable variables
// ====================================================================
-
-//
-// Fake dma is a synchronous faking of the DMA progress used for
-// isolating performance in the renderer.
-//
-
-qboolean fakedma = false;
-
-
void S_SoundInfo_f(void)
{
if (!sound_started || !shm)
if (!SNDDMA_Init())
{
Con_Print("S_Startup: SNDDMA_Init failed.\n");
- sound_started = 0;
shm = NULL;
+ sound_started = false;
+ sound_spatialized = false;
return;
}
}
- sound_started = 1;
+ sound_started = true;
Con_DPrintf("Sound sampling rate: %i\n", shm->format.speed);
SNDDMA_Shutdown();
shm = NULL;
- sound_started = 0;
+ sound_started = false;
+ sound_spatialized = false;
}
void S_Restart_f(void)
==================
*/
-sfx_t *S_FindName (const char *name, qboolean stdpath)
+sfx_t *S_FindName (const char *name)
{
sfx_t *sfx;
- size_t len;
- char namebuffer [MAX_QPATH];
if (!snd_initialized.integer)
return NULL;
// Add the default sound directory to the path
- len = snprintf (namebuffer, sizeof (namebuffer), stdpath ? "sound/%s" : "%s", name);
- if (len >= sizeof (namebuffer))
+ if (strlen (name) >= sizeof (sfx->name))
Host_Error ("S_FindName: sound name too long (%s)", name);
// Look for this sound in the list of known sfx
for (sfx = known_sfx; sfx != NULL; sfx = sfx->next)
- if(!strcmp (sfx->name, namebuffer))
+ if(!strcmp (sfx->name, name))
return sfx;
// Add a sfx_t struct for this sound
sfx = Mem_Alloc (snd_mempool, sizeof (*sfx));
memset (sfx, 0, sizeof(*sfx));
- strlcpy (sfx->name, namebuffer, sizeof (sfx->name));
+ strlcpy (sfx->name, name, sizeof (sfx->name));
sfx->next = known_sfx;
known_sfx = sfx;
unsigned int i;
// Start the ambient sounds and make them loop
- channels[AMBIENT_WATER].sfx = S_PrecacheSound ("ambience/water1.wav", false, true, true);
- channels[AMBIENT_SKY].sfx = S_PrecacheSound ("ambience/wind2.wav", false, true, true);
+ channels[AMBIENT_WATER].sfx = S_PrecacheSound ("sound/ambience/water1.wav", false, true);
+ channels[AMBIENT_SKY].sfx = S_PrecacheSound ("sound/ambience/wind2.wav", false, true);
for (i = 0; i < NUM_AMBIENTS; i++)
channels[i].flags |= CHANNELFLAG_FORCELOOP;
// Add 1 lock and the SFXFLAG_SERVERSOUND flag to each sfx in "serversound"
for (i = 1; i < numsounds; i++)
{
- sfx = S_FindName (serversound[i], true);
+ sfx = S_FindName (serversound[i]);
if (sfx != NULL)
{
sfx->locks++;
==================
*/
-sfx_t *S_PrecacheSound (const char *name, qboolean complain, qboolean stdpath, qboolean lock)
+sfx_t *S_PrecacheSound (const char *name, qboolean complain, qboolean lock)
{
sfx_t *sfx;
if (!snd_initialized.integer)
return NULL;
- sfx = S_FindName (name, stdpath);
+ sfx = S_FindName (name);
if (sfx == NULL)
return NULL;
{
//Con_Printf("-- entnum %i origin %f %f %f neworigin %f %f %f\n", ch->entnum, ch->origin[0], ch->origin[1], ch->origin[2], cl_entities[ch->entnum].state_current.origin[0], cl_entities[ch->entnum].state_current.origin[1], cl_entities[ch->entnum].state_current.origin[2]);
VectorCopy(cl_entities[ch->entnum].state_current.origin, ch->origin);
- if (cl_entities[ch->entnum].state_current.modelindex && cl.model_precache[cl_entities[ch->entnum].state_current.modelindex]->soundfromcenter)
+ if (cl_entities[ch->entnum].state_current.modelindex && cl.model_precache[cl_entities[ch->entnum].state_current.modelindex] && cl.model_precache[cl_entities[ch->entnum].state_current.modelindex]->soundfromcenter)
VectorMAMAM(1.0f, ch->origin, 0.5f, cl.model_precache[cl_entities[ch->entnum].state_current.modelindex]->normalmins, 0.5f, cl.model_precache[cl_entities[ch->entnum].state_current.modelindex]->normalmaxs, ch->origin);
}
Matrix4x4_Invert_Simple(&listener_matrix, listenermatrix);
Matrix4x4_OriginFromMatrix(listenermatrix, listener_origin);
-// update general area ambient sound sources
+ // update general area ambient sound sources
S_UpdateAmbientSounds ();
combine = NULL;
-// update spatialization for static and dynamic sounds
+ // update spatialization for static and dynamic sounds
ch = channels+NUM_AMBIENTS;
for (i=NUM_AMBIENTS ; i<total_channels; i++, ch++)
{
if (!ch->leftvol && !ch->rightvol)
continue;
- // try to combine static sounds with a previous channel of the same
- // sound effect so we don't mix five torches every frame
-
+ // try to combine static sounds with a previous channel of the same
+ // sound effect so we don't mix five torches every frame
if (i > MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS)
{
- // see if it can just use the last one
+ // see if it can just use the last one
if (combine && combine->sfx == ch->sfx)
{
combine->leftvol += ch->leftvol;
ch->leftvol = ch->rightvol = 0;
continue;
}
- // search for one
+ // search for one
combine = channels+MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS;
for (j=MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS ; j<i; j++, combine++)
if (combine->sfx == ch->sfx)
}
}
-//
-// debugging output
-//
+ sound_spatialized = true;
+
+ // debugging output
if (snd_show.integer)
{
total = 0;
Con_Printf("----(%u)----\n", total);
}
-// mix some sound
S_Update_();
}
fullsamples = shm->samples / shm->format.channels;
-// it is possible to miscount buffers if it has wrapped twice between
-// calls to S_Update. Oh well.
+ // it is possible to miscount buffers if it has wrapped twice between
+ // calls to S_Update. Oh well.
samplepos = SNDDMA_GetDMAPos();
if (samplepos < oldsamplepos)
void S_ExtraUpdate (void)
{
- if (snd_noextraupdate.integer)
- return; // don't pollute timings
+ if (snd_noextraupdate.integer || !sound_spatialized)
+ return;
+
S_Update_();
}
snprintf(name, sizeof(name), "%s.wav", Cmd_Argv(i));
else
strlcpy(name, Cmd_Argv(i), sizeof(name));
- sfx = S_PrecacheSound(name, true, true, false);
+ sfx = S_PrecacheSound (name, true, false);
// If we need to get the volume from the command line
if (fvol == -1.0f)
}
-qboolean S_LocalSound (const char *sound, qboolean stdpath)
+qboolean S_LocalSound (const char *sound)
{
sfx_t *sfx;
int ch_ind;
if (!snd_initialized.integer || nosound.integer)
return true;
- sfx = S_PrecacheSound (sound, true, stdpath, false);
+ sfx = S_PrecacheSound (sound, true, false);
if (!sfx)
{
Con_Printf("S_LocalSound: can't precache %s\n", sound);