]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
A few minor changes in the sound code
authormolivier <molivier@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 8 Dec 2004 15:36:35 +0000 (15:36 +0000)
committermolivier <molivier@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 8 Dec 2004 15:36:35 +0000 (15:36 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@4832 d7cf8633-e32d-0410-b094-e92efae38249

snd_main.c

index a7b8d022d3873a1cbfdb17f2e26e199cc17b7cb0..779d4b7a7d7cf0eff9509c54bbd3fa47a06b5eec 100644 (file)
@@ -53,11 +53,9 @@ matrix4x4_t listener_matrix;
 vec_t sound_nominal_clip_dist=1000.0;
 mempool_t *snd_mempool;
 
-// sample PAIRS
 int soundtime;
 int paintedtime;
 
-
 // Linked list of known sfx
 sfx_t *known_sfx = NULL;
 
@@ -93,7 +91,7 @@ const char* ambient_names [2] = { "sound/ambience/water1.wav", "sound/ambience/w
 
 void S_SoundInfo_f(void)
 {
-       if (!sound_started || !shm)
+       if (!sound_started)
        {
                Con_Print("sound system not started\n");
                return;
@@ -657,6 +655,10 @@ void S_StopSound(int entnum, int entchannel)
 void S_StopAllSounds (void)
 {
        unsigned int i;
+       unsigned char *pbuf;
+
+       if (!sound_started)
+               return;
 
        for (i = 0; i < total_channels; i++)
                S_StopChannel (i);
@@ -664,7 +666,23 @@ void S_StopAllSounds (void)
        total_channels = MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS;   // no statics
        memset(channels, 0, MAX_CHANNELS * sizeof(channel_t));
 
-       S_ClearBuffer ();
+       // Clear sound buffer
+       pbuf = S_LockBuffer();
+       if (pbuf != NULL)
+       {
+               int setsize = shm->samples * shm->format.width;
+               int     clear = (shm->format.width == 1) ? 0x80 : 0;
+
+               // FIXME: is it (still) true? (check with OSS and ALSA)
+               // on i586/i686 optimized versions of glibc, glibc *wrongly* IMO,
+               // reads the memory area before writing to it causing a seg fault
+               // since the memory is PROT_WRITE only and not PROT_READ|PROT_WRITE
+               //memset(shm->buffer, clear, shm->samples * shm->format.width);
+               while (setsize--)
+                       *pbuf++ = clear;
+
+               S_UnlockBuffer ();
+       }
 }
 
 void S_PauseGameSounds (qboolean toggle)
@@ -687,37 +705,6 @@ void S_SetChannelVolume (unsigned int ch_ind, float fvol)
 }
 
 
-void S_ClearBuffer(void)
-{
-       int     clear;
-       unsigned char *pbuf;
-
-       if (!sound_started || !shm)
-               return;
-
-       if (shm->format.width == 1)
-               clear = 0x80;   // 8 bit sound (unsigned)
-       else
-               clear = 0;              // 16 bit sound (signed)
-
-       pbuf = S_LockBuffer();
-       if (pbuf != NULL)
-       {
-               int setsize = shm->samples * shm->format.width;
-
-               while (setsize--)
-                       *pbuf++ = clear;
-
-               // on i586/i686 optimized versions of glibc, glibc *wrongly* IMO,
-               // reads the memory area before writing to it causing a seg fault
-               // since the memory is PROT_WRITE only and not PROT_READ|PROT_WRITE
-               //memset(shm->buffer, clear, shm->samples * shm->format.width);
-
-               S_UnlockBuffer ();
-       }
-}
-
-
 /*
 =================
 S_StaticSound
@@ -772,7 +759,7 @@ void S_UpdateAmbientSounds (void)
        for (ambient_channel = 0 ; ambient_channel< NUM_AMBIENTS ; ambient_channel++)
        {
                chan = &channels[ambient_channel];
-               if (chan->sfx == NULL || (chan->sfx->flags & SFXFLAG_FILEMISSING))
+               if (chan->sfx == NULL || chan->sfx->fetcher == NULL)
                        continue;
 
                vol = ambient_level.value * ambientlevels[ambient_channel];