From b0519667da8edcea1592a0ba7b0dfa4b4709e034 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sun, 6 Mar 2011 20:59:51 +0000 Subject: Discard very short sound effects and strip lead-in / lead-out samples that apparently aren't played by Vanilla Doom (thanks Quasar). Subversion-branch: /trunk/chocolate-doom Subversion-revision: 2291 --- src/i_sdlsound.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c index a26a81dd..14a5147f 100644 --- a/src/i_sdlsound.c +++ b/src/i_sdlsound.c @@ -359,7 +359,13 @@ static boolean LoadSoundLump(int sound, // greater than the length of the lump itself, this is an invalid // sound lump. - if (*length > lumplen - 8) + // We also discard sound lumps that are less than 49 samples long, + // as this is how DMX behaves - although the actual cut-off length + // seems to vary slightly depending on the sample rate. This needs + // further investigation to better understand the correct + // behavior. + + if (*length > lumplen - 8 || *length <= 48) { W_ReleaseLumpNum(*lumpnum); return false; @@ -368,6 +374,12 @@ static boolean LoadSoundLump(int sound, // Prune header *data_ref += 8; + // The DMX sound library seems to skip the first 16 and last 16 + // bytes of the lump - reason unknown. + + *data_ref += 16; + *length -= 32; + return true; } -- cgit v1.2.3