Skip to content
Permalink
Browse files

Fixed bug 1673 - BEXT wave files only have extra metadata that you ca…

…n easily skip through

bill

In SDL_wave.c, BEXT wave files with "bext" instead of "fmt " are choked on

    if (chunk.magic != FMT) {
        SDL_SetError("Complex WAVE files not supported");
        was_error = 1;
        goto done;
    }

BEXT files http://en.wikipedia.org/wiki/Broadcast_Wave_Format actually playback the same as regular waves.  All they have is (A LOT OF) extra header info.

To open them, just SKIP the "bext" chunk, and the "fmt " chunk will be a couple of hundred bytes later.

The "fmt " chunk is also bloated, but if you skip past the extra information to the "data" chunk, there is nothing different about a BEXT wave file than a "normal" one.

You can then load the data and proceed as normal.
  • Loading branch information
slouken committed Jun 22, 2014
1 parent cff9eac commit 9f5e3ed7e7f312bf7596894715549b3c4e5dd15c
Showing with 2 additions and 1 deletion.
  1. +1 −1 src/audio/SDL_wave.c
  2. +1 −0 src/audio/SDL_wave.h
@@ -460,7 +460,7 @@ SDL_LoadWAV_RW(SDL_RWops * src, int freesrc,
}
/* 2 Uint32's for chunk header+len, plus the lenread */
headerDiff += lenread + 2 * sizeof(Uint32);
} while ((chunk.magic == FACT) || (chunk.magic == LIST));
} while ((chunk.magic == FACT) || (chunk.magic == LIST) || (chunk.magic == BEXT));

/* Decode the audio data format */
format = (WaveFMT *) chunk.data;
@@ -29,6 +29,7 @@
#define WAVE 0x45564157 /* "WAVE" */
#define FACT 0x74636166 /* "fact" */
#define LIST 0x5453494c /* "LIST" */
#define BEXT 0x74786562 /* "bext" */
#define FMT 0x20746D66 /* "fmt " */
#define DATA 0x61746164 /* "data" */
#define PCM_CODE 0x0001

0 comments on commit 9f5e3ed

Please sign in to comment.