X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=snd_mem.c;h=2678da63b0b2c00d17b7360d051b9587ea17f41b;hb=67c10745fba28abed52da11e01a82ae02a8e31b8;hp=3da76b39b108d3c4f98990e5f0570409a6ad6e92;hpb=77f8bde166d6e0061eb25faf3c33cc24fce2caca;p=xonotic%2Fdarkplaces.git diff --git a/snd_mem.c b/snd_mem.c index 3da76b39..2678da63 100644 --- a/snd_mem.c +++ b/snd_mem.c @@ -24,6 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "snd_main.h" #include "snd_ogg.h" #include "snd_wav.h" +#include "snd_modplug.h" /* @@ -319,42 +320,61 @@ qboolean S_LoadSound (sfx_t *sfx, qboolean complain) if (snd_renderbuffer == NULL) return false; + // Initialize volume peak to 0; if ReplayGain is supported, the loader will change this away + sfx->volume_peak = 0.0; + + if (developer_loading.integer) + Con_Printf("loading sound %s\n", sfx->name); + // LordHavoc: if the sound filename does not begin with sound/, try adding it if (strncasecmp(sfx->name, "sound/", 6)) { - len = dpsnprintf (namebuffer, sizeof(namebuffer), "sound/%s", sfx->name); - if (len < 0) + dpsnprintf (namebuffer, sizeof(namebuffer), "sound/%s", sfx->name); + len = strlen(namebuffer); + if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".wav")) + { + if (S_LoadWavFile (namebuffer, sfx)) + return true; + memcpy (namebuffer + len - 3, "ogg", 4); + } + if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".ogg")) + { + if (OGG_LoadVorbisFile (namebuffer, sfx)) + return true; + } + else { - // name too long - Con_DPrintf("S_LoadSound: name \"%s\" is too long\n", sfx->name); - return false; + if (ModPlug_LoadModPlugFile (namebuffer, sfx)) + return true; } + } + + // LordHavoc: then try without the added sound/ as wav and ogg + dpsnprintf (namebuffer, sizeof(namebuffer), "%s", sfx->name); + len = strlen(namebuffer); + // request foo.wav: tries foo.wav, then foo.ogg + // request foo.ogg: tries foo.ogg only + // request foo.mod: tries foo.mod only + if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".wav")) + { if (S_LoadWavFile (namebuffer, sfx)) return true; - if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".wav")) - memcpy (namebuffer + len - 3, "ogg", 4); + memcpy (namebuffer + len - 3, "ogg", 4); + } + if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".ogg")) + { if (OGG_LoadVorbisFile (namebuffer, sfx)) return true; } - - // LordHavoc: then try without the added sound/ as wav and ogg - len = dpsnprintf (namebuffer, sizeof(namebuffer), "%s", sfx->name); - if (len < 0) + else { - // name too long - Con_DPrintf("S_LoadSound: name \"%s\" is too long\n", sfx->name); - return false; + if (ModPlug_LoadModPlugFile (namebuffer, sfx)) + return true; } - if (S_LoadWavFile (namebuffer, sfx)) - return true; - if (len >= 4 && !strcasecmp (namebuffer + len - 4, ".wav")) - memcpy (namebuffer + len - 3, "ogg", 4); - if (OGG_LoadVorbisFile (namebuffer, sfx)) - return true; // Can't load the sound! sfx->flags |= SFXFLAG_FILEMISSING; if (complain) - Con_DPrintf("S_LoadSound: Couldn't load \"%s\"\n", sfx->name); + Con_DPrintf("failed to load sound \"%s\"\n", sfx->name); return false; }