#include "SDL_internal.h"
#define RIFF 0x46464952
#define WAVE 0x45564157
#define FACT 0x74636166
#define LIST 0x5453494c
#define BEXT 0x74786562
#define JUNK 0x4B4E554A
#define FMT 0x20746D66
#define DATA 0x61746164
#define UNKNOWN_CODE 0x0000
#define PCM_CODE 0x0001
#define MS_ADPCM_CODE 0x0002
#define IEEE_FLOAT_CODE 0x0003
#define ALAW_CODE 0x0006
#define MULAW_CODE 0x0007
#define IMA_ADPCM_CODE 0x0011
#define MPEG_CODE 0x0050
#define MPEGLAYER3_CODE 0x0055
#define EXTENSIBLE_CODE 0xFFFE
typedef struct WaveFormat
{
Uint16 formattag; Uint16 encoding; Uint16 channels; Uint32 frequency; Uint32 byterate; Uint16 blockalign; Uint16 bitspersample;
Uint16 extsize;
Uint16 validsamplebits;
Uint32 samplesperblock; Uint32 channelmask;
Uint8 subformat[16]; } WaveFormat;
typedef struct WaveFact
{
Sint32 status;
Uint32 samplelength; } WaveFact;
typedef struct WaveChunk
{
Uint32 fourcc; Uint32 length; Sint64 position; Uint8 *data; size_t size; } WaveChunk;
typedef enum WaveRiffSizeHint
{
RiffSizeNoHint,
RiffSizeForce,
RiffSizeIgnoreZero,
RiffSizeIgnore,
RiffSizeMaximum
} WaveRiffSizeHint;
typedef enum WaveTruncationHint
{
TruncNoHint,
TruncVeryStrict,
TruncStrict,
TruncDropFrame,
TruncDropBlock
} WaveTruncationHint;
typedef enum WaveFactChunkHint
{
FactNoHint,
FactTruncate,
FactStrict,
FactIgnoreZero,
FactIgnore
} WaveFactChunkHint;
typedef struct WaveFile
{
WaveChunk chunk;
WaveFormat format;
WaveFact fact;
Sint64 sampleframes;
void *decoderdata;
WaveRiffSizeHint riffhint;
WaveTruncationHint trunchint;
WaveFactChunkHint facthint;
} WaveFile;