]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_mem.c
Thanks to IceDagger for pointing out this important optimization to multipass specula...
[xonotic/darkplaces.git] / snd_mem.c
index a54e84c74f3ee8155894ec7797da04dd43e948bb..47398c6e0bde95f92279ed238d5c60dd82543410 100644 (file)
--- a/snd_mem.c
+++ b/snd_mem.c
@@ -48,6 +48,7 @@ void ResampleSfx (sfxcache_t *sc, qbyte *data, char *name)
 
        if (fracstep == 256)
        {
+               // fast case for direct transfer
                if (sc->width == 1) // 8bit
                        for (i = 0;i < srclength;i++)
                                ((signed char *)sc->data)[i] = ((unsigned char *)data)[i] - 128;
@@ -57,7 +58,7 @@ void ResampleSfx (sfxcache_t *sc, qbyte *data, char *name)
        }
        else
        {
-// general case
+               // general case
                Con_DPrintf("ResampleSfx: resampling sound %s\n", name);
                samplefrac = 0;
                if ((fracstep & 255) == 0) // skipping points on perfect multiple
@@ -201,9 +202,7 @@ void ResampleSfx (sfxcache_t *sc, qbyte *data, char *name)
        }
 
        // LordHavoc: use this for testing if it ever becomes useful again
-#if 0
-       COM_WriteFile (va("sound/%s.pcm", name), sc->data, (sc->length << sc->stereo) * sc->width);
-#endif
+       //COM_WriteFile (va("sound/%s.pcm", name), sc->data, (sc->length << sc->stereo) * sc->width);
 }
 
 //=============================================================================
@@ -213,34 +212,32 @@ void ResampleSfx (sfxcache_t *sc, qbyte *data, char *name)
 S_LoadSound
 ==============
 */
-sfxcache_t *S_LoadSound (sfx_t *s)
+sfxcache_t *S_LoadSound (sfx_t *s, int complain)
 {
-    char       namebuffer[256];
-       qbyte   *data;
-       wavinfo_t       info;
-       int             len;
-       sfxcache_t      *sc;
+    char namebuffer[256];
+       qbyte *data;
+       wavinfo_t info;
+       int len;
+       sfxcache_t *sc;
 
-// see if still in memory
+       // see if still in memory
        if (s->sfxcache)
                return s->sfxcache;
 
-//Con_Printf ("S_LoadSound: %x\n", (int)stackbuf);
-// load it in
+       // load it in
        strcpy(namebuffer, "sound/");
        strcat(namebuffer, s->name);
 
-//     Con_Printf ("loading %s\n",namebuffer);
-
-       data = COM_LoadFile(namebuffer, false);
+       data = FS_LoadFile(namebuffer, false);
 
        if (!data)
        {
-               Con_Printf ("Couldn't load %s\n", namebuffer);
+               if (complain)
+                       Con_Printf ("Couldn't load %s\n", namebuffer);
                return NULL;
        }
 
-       info = GetWavinfo (s->name, data, com_filesize);
+       info = GetWavinfo (s->name, data, fs_filesize);
        // LordHavoc: stereo sounds are now allowed (intended for music)
        if (info.channels < 1 || info.channels > 2)
        {
@@ -248,13 +245,6 @@ sfxcache_t *S_LoadSound (sfx_t *s)
                Mem_Free(data);
                return NULL;
        }
-       /*
-       if (info.channels != 1)
-       {
-               Con_Printf ("%s is a stereo sample\n",s->name);
-               return NULL;
-       }
-       */
 
        // calculate resampled length
        len = (int) ((double) info.samples * (double) shm->speed / (double) info.rate);
@@ -294,11 +284,11 @@ WAV loading
 */
 
 
-qbyte  *data_p;
-qbyte  *iff_end;
-qbyte  *last_chunk;
-qbyte  *iff_data;
-int    iff_chunk_len;
+qbyte *data_p;
+qbyte *iff_end;
+qbyte *last_chunk;
+qbyte *iff_data;
+int iff_chunk_len;
 
 
 short GetLittleShort(void)
@@ -340,8 +330,6 @@ void FindNextChunk(char *name)
                        data_p = NULL;
                        return;
                }
-//             if (iff_chunk_len > 1024*1024)
-//                     Sys_Error ("FindNextChunk: %i length is past the 1 meg sanity limit", iff_chunk_len);
                data_p -= 8;
                last_chunk = data_p + 8 + ( (iff_chunk_len + 1) & ~1 );
                if (!strncmp(data_p, name, 4))
@@ -358,8 +346,8 @@ void FindChunk(char *name)
 
 void DumpChunks(void)
 {
-       char    str[5];
-       
+       char str[5];
+
        str[4] = 0;
        data_p=iff_data;
        do
@@ -379,10 +367,10 @@ GetWavinfo
 */
 wavinfo_t GetWavinfo (char *name, qbyte *wav, int wavlength)
 {
-       wavinfo_t       info;
-       int     i;
-       int     format;
-       int             samples;
+       wavinfo_t info;
+       int i;
+       int format;
+       int samples;
 
        memset (&info, 0, sizeof(info));
 
@@ -392,7 +380,7 @@ wavinfo_t GetWavinfo (char *name, qbyte *wav, int wavlength)
        iff_data = wav;
        iff_end = wav + wavlength;
 
-// find "RIFF" chunk
+       // find "RIFF" chunk
        FindChunk("RIFF");
        if (!(data_p && !strncmp(data_p+8, "WAVE", 4)))
        {
@@ -400,9 +388,9 @@ wavinfo_t GetWavinfo (char *name, qbyte *wav, int wavlength)
                return info;
        }
 
-// get "fmt " chunk
+       // get "fmt " chunk
        iff_data = data_p + 12;
-// DumpChunks ();
+       //DumpChunks ();
 
        FindChunk("fmt ");
        if (!data_p)
@@ -423,15 +411,14 @@ wavinfo_t GetWavinfo (char *name, qbyte *wav, int wavlength)
        data_p += 4+2;
        info.width = GetLittleShort() / 8;
 
-// get cue chunk
+       // get cue chunk
        FindChunk("cue ");
        if (data_p)
        {
                data_p += 32;
                info.loopstart = GetLittleLong();
-//             Con_Printf("loopstart=%d\n", sfx->loopstart);
 
-       // if the next chunk is a LIST chunk, look for a cue length marker
+               // if the next chunk is a LIST chunk, look for a cue length marker
                FindNextChunk ("LIST");
                if (data_p)
                {
@@ -440,14 +427,13 @@ wavinfo_t GetWavinfo (char *name, qbyte *wav, int wavlength)
                                data_p += 24;
                                i = GetLittleLong ();   // samples in loop
                                info.samples = info.loopstart + i;
-//                             Con_Printf("looped length: %i\n", i);
                        }
                }
        }
        else
                info.loopstart = -1;
 
-// find data chunk
+       // find data chunk
        FindChunk("data");
        if (!data_p)
        {