فهرست منبع

Fixed bug 1673 - BEXT wave files only have extra metadata that you can 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.
Sam Lantinga 10 سال پیش
والد
کامیت
9f5e3ed7e7
2فایلهای تغییر یافته به همراه2 افزوده شده و 1 حذف شده
  1. 1 1
      src/audio/SDL_wave.c
  2. 1 0
      src/audio/SDL_wave.h

+ 1 - 1
src/audio/SDL_wave.c

@@ -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;

+ 1 - 0
src/audio/SDL_wave.h

@@ -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