X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=snd_mem.c;h=c620d23664392e2f530a2922f0b4545b1984ed21;hb=045b4c0a4b471714922deb7ecaed3d83d90602d0;hp=7908ea87b24b6c551d534a77b3b7a109266cd4da;hpb=6abd2a8816c110a29d6e2ecc2f574c9ef2ddc48f;p=xonotic%2Fdarkplaces.git diff --git a/snd_mem.c b/snd_mem.c index 7908ea87..c620d236 100644 --- a/snd_mem.c +++ b/snd_mem.c @@ -21,6 +21,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" +#include "ogg.h" + + /* ================ ResampleSfx @@ -222,6 +225,10 @@ sfxcache_t *S_LoadWavFile (const char *filename, sfx_t *s) 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) @@ -235,7 +242,6 @@ sfxcache_t *S_LoadWavFile (const char *filename, sfx_t *s) 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)); @@ -270,6 +276,7 @@ sfxcache_t *S_LoadSound (sfx_t *s, int complain) char namebuffer[MAX_QPATH]; size_t len; sfxcache_t *sc; + qboolean modified_name = false; // see if still in memory if (!shm || !shm->speed) @@ -283,19 +290,31 @@ sfxcache_t *S_LoadSound (sfx_t *s, int complain) // Try to load it as a WAV file sc = S_LoadWavFile (namebuffer, s); + if (sc != NULL) + return sc; - // TODO: insert Ogg Vorbis support here + // Else, try to load it as an Ogg Vorbis file + if (!strcasecmp (namebuffer + len - 4, ".wav")) + { + strcpy (namebuffer + len - 3, "ogg"); + modified_name = true; + } + sc = OGG_LoadVorbisFile (namebuffer, s); + if (sc != NULL) + return sc; // Can't load the sound! - if (sc == NULL) + if (!complain) + s->flags |= SFXFLAG_SILENTLYMISSING; + else + s->flags &= ~SFXFLAG_SILENTLYMISSING; + if (complain) { - s->silentlymissing = !complain; - if (complain) - Con_Printf ("Couldn't load %s\n", namebuffer); - return NULL; + if (modified_name) + strcpy (namebuffer + len - 3, "wav"); + Con_Printf ("Couldn't load %s\n", namebuffer); } - - return sc; + return NULL; } void S_UnloadSound(sfx_t *s)