#include "quakedef.h"
-#include "ogg.h"
+#include "snd_ogg.h"
/*
((signed char *)sc->data)[i] = ((unsigned char *)data)[i] - 128;
else //if (sc->width == 2) // 16bit
for (i = 0;i < srclength;i++)
- ((short *)sc->data)[i] = LittleShort (((short *)data)[i]);
+ ((short *)sc->data)[i] = ((short *)data)[i];
}
else
{
fracstep <<= 1;
for (i=0 ; i<outcount ; i++)
{
- *out++ = LittleShort (in[srcsample ]);
- *out++ = LittleShort (in[srcsample+1]);
+ *out++ = in[srcsample ];
+ *out++ = in[srcsample+1];
srcsample += fracstep;
}
}
{
for (i=0 ; i<outcount ; i++)
{
- *out++ = LittleShort (in[srcsample ]);
+ *out++ = in[srcsample];
srcsample += fracstep;
}
}
sfxcache_t *sc;
// Load the file
- data = FS_LoadFile(filename, false);
+ data = FS_LoadFile(filename, tempmempool, false);
if (!data)
return NULL;
+ // Don't try to load it if it's not a WAV file
+ if (memcmp (data, "RIFF", 4) || memcmp (data + 8, "WAVE", 4))
+ return NULL;
+
info = GetWavinfo (s->name, data, fs_filesize);
// Stereo sounds are allowed (intended for music)
if (info.channels < 1 || info.channels > 2)
len = (int) ((double) info.samples * (double) shm->speed / (double) info.rate);
len = len * info.width * info.channels;
- // FIXME: add S_UnloadSounds or something?
Mem_FreePool(&s->mempool);
s->mempool = Mem_AllocPool(s->name);
sc = s->sfxcache = Mem_Alloc(s->mempool, len + sizeof(sfxcache_t));
sc->width = info.width;
sc->stereo = info.channels == 2;
+#if BYTE_ORDER != LITTLE_ENDIAN
+ // We must convert the WAV data from little endian
+ // to the machine endianess before resampling it
+ if (info.width == 2)
+ {
+ int i;
+ short* ptr;
+
+ len = info.samples * info.channels;
+ ptr = (short*)(data + info.dataofs);
+ for (i = 0; i < len; i++)
+ ptr[i] = LittleShort (ptr[i]);
+ }
+#endif
+
ResampleSfx(sc, data + info.dataofs, s->name);
Mem_Free(data);
if (s->sfxcache && (s->sfxcache->speed == shm->speed))
return s->sfxcache;
- s->silentlymissing = !complain;
-
len = snprintf (namebuffer, sizeof (namebuffer), "sound/%s", s->name);
if (len >= sizeof (namebuffer))
return NULL;
return sc;
// Can't load the sound!
+ if (!complain)
+ s->flags |= SFXFLAG_SILENTLYMISSING;
+ else
+ s->flags &= ~SFXFLAG_SILENTLYMISSING;
if (complain)
{
if (modified_name)
strcpy (namebuffer + len - 3, "wav");
- Con_Printf ("Couldn't load %s\n", namebuffer);
+ Con_Printf("Couldn't load %s\n", namebuffer);
}
return NULL;
}
*/
-qbyte *data_p;
-qbyte *iff_end;
-qbyte *last_chunk;
-qbyte *iff_data;
-int iff_chunk_len;
+static qbyte *data_p;
+static qbyte *iff_end;
+static qbyte *last_chunk;
+static qbyte *iff_data;
+static int iff_chunk_len;
short GetLittleShort(void)
{
- short val = 0;
- val = *data_p;
- val = val + (*(data_p+1)<<8);
+ short val;
+
+ val = BuffLittleShort (data_p);
data_p += 2;
+
return val;
}
int GetLittleLong(void)
{
int val = 0;
- val = *data_p;
- val = val + (*(data_p+1)<<8);
- val = val + (*(data_p+2)<<16);
- val = val + (*(data_p+3)<<24);
+
+ val = BuffLittleLong (data_p);
data_p += 4;
+
return val;
}
memcpy (str, data_p, 4);
data_p += 4;
iff_chunk_len = GetLittleLong();
- Con_Printf ("0x%x : %s (%d)\n", (int)(data_p - 4), str, iff_chunk_len);
+ Con_Printf("0x%x : %s (%d)\n", (int)(data_p - 4), str, iff_chunk_len);
data_p += (iff_chunk_len + 1) & ~1;
} while (data_p < iff_end);
}
FindChunk("RIFF");
if (!(data_p && !strncmp(data_p+8, "WAVE", 4)))
{
- Con_Printf("Missing RIFF/WAVE chunks\n");
+ Con_Print("Missing RIFF/WAVE chunks\n");
return info;
}
FindChunk("fmt ");
if (!data_p)
{
- Con_Printf("Missing fmt chunk\n");
+ Con_Print("Missing fmt chunk\n");
return info;
}
data_p += 8;
format = GetLittleShort();
if (format != 1)
{
- Con_Printf("Microsoft PCM format only\n");
+ Con_Print("Microsoft PCM format only\n");
return info;
}
FindChunk("data");
if (!data_p)
{
- Con_Printf("Missing data chunk\n");
+ Con_Print("Missing data chunk\n");
return info;
}