Mercurial > sdl-ios-xcode
changeset 1994:6abc7e6f9817
Added int32 adn float32 support to SDL_LoadWAV_RW().
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 31 Aug 2006 21:00:10 +0000 |
parents | 7a3889fc9e5d |
children | 0ca6ba107642 |
files | src/audio/SDL_wave.c src/audio/SDL_wave.h |
diffstat | 2 files changed, 35 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/audio/SDL_wave.c Thu Aug 31 20:59:42 2006 +0000 +++ b/src/audio/SDL_wave.c Thu Aug 31 21:00:10 2006 +0000 @@ -413,7 +413,7 @@ int was_error; Chunk chunk; int lenread; - int MS_ADPCM_encoded, IMA_ADPCM_encoded; + int IEEE_float_encoded, MS_ADPCM_encoded, IMA_ADPCM_encoded; int samplesize; /* WAV magic header */ @@ -472,11 +472,15 @@ was_error = 1; goto done; } - MS_ADPCM_encoded = IMA_ADPCM_encoded = 0; + IEEE_float_encoded = MS_ADPCM_encoded = IMA_ADPCM_encoded = 0; switch (SDL_SwapLE16(format->encoding)) { case PCM_CODE: /* We can understand this */ break; + case IEEE_FLOAT_CODE: + IEEE_float_encoded = 1; + /* We can understand this */ + break; case MS_ADPCM_CODE: /* Try to understand this */ if (InitMS_ADPCM(format) < 0) { @@ -506,24 +510,37 @@ } SDL_memset(spec, 0, (sizeof *spec)); spec->freq = SDL_SwapLE32(format->frequency); - switch (SDL_SwapLE16(format->bitspersample)) { - case 4: - if (MS_ADPCM_encoded || IMA_ADPCM_encoded) { - spec->format = AUDIO_S16; + + if (IEEE_float_encoded) { + if ((SDL_SwapLE16(format->bitspersample)) != 32) { + was_error = 1; } else { - was_error = 1; + spec->format = AUDIO_F32; } - break; - case 8: - spec->format = AUDIO_U8; - break; - case 16: - spec->format = AUDIO_S16; - break; - default: - was_error = 1; - break; + } else { + switch (SDL_SwapLE16(format->bitspersample)) { + case 4: + if (MS_ADPCM_encoded || IMA_ADPCM_encoded) { + spec->format = AUDIO_S16; + } else { + was_error = 1; + } + break; + case 8: + spec->format = AUDIO_U8; + break; + case 16: + spec->format = AUDIO_S16; + break; + case 32: + spec->format = AUDIO_S32; + break; + default: + was_error = 1; + break; + } } + if (was_error) { SDL_SetError("Unknown %d-bit PCM data format", SDL_SwapLE16(format->bitspersample));
--- a/src/audio/SDL_wave.h Thu Aug 31 20:59:42 2006 +0000 +++ b/src/audio/SDL_wave.h Thu Aug 31 21:00:10 2006 +0000 @@ -34,6 +34,7 @@ #define DATA 0x61746164 /* "data" */ #define PCM_CODE 0x0001 #define MS_ADPCM_CODE 0x0002 +#define IEEE_FLOAT_CODE 0x0003 #define IMA_ADPCM_CODE 0x0011 #define MP3_CODE 0x0055 #define WAVE_MONO 1