diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/audio/directsound/SDL_directsound.c | 12 | ||||
-rw-r--r-- | src/audio/winmm/SDL_winmm.c | 12 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/audio/directsound/SDL_directsound.c b/src/audio/directsound/SDL_directsound.c index e320056b5..f08204494 100644 --- a/src/audio/directsound/SDL_directsound.c +++ b/src/audio/directsound/SDL_directsound.c @@ -30,6 +30,10 @@ #include "../SDL_audio_c.h" #include "SDL_directsound.h" +#ifndef WAVE_FORMAT_IEEE_FLOAT +#define WAVE_FORMAT_IEEE_FLOAT 0x0003 +#endif + /* DirectX function pointers for audio */ static void* DSoundDLL = NULL; typedef HRESULT(WINAPI*fnDirectSoundCreate8)(LPGUID,LPDIRECTSOUND*,LPUNKNOWN); @@ -466,6 +470,7 @@ DSOUND_OpenDevice(_THIS, const char *devname, int iscapture) case AUDIO_U8: case AUDIO_S16: case AUDIO_S32: + case AUDIO_F32: this->spec.format = test_format; valid_format = 1; break; @@ -479,7 +484,12 @@ DSOUND_OpenDevice(_THIS, const char *devname, int iscapture) } SDL_memset(&waveformat, 0, sizeof(waveformat)); - waveformat.wFormatTag = WAVE_FORMAT_PCM; + + if (SDL_AUDIO_ISFLOAT(this->spec.format)) + waveformat.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; + else + waveformat.wFormatTag = WAVE_FORMAT_PCM; + waveformat.wBitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format); waveformat.nChannels = this->spec.channels; waveformat.nSamplesPerSec = this->spec.freq; diff --git a/src/audio/winmm/SDL_winmm.c b/src/audio/winmm/SDL_winmm.c index 00a6245ad..dc7336b2b 100644 --- a/src/audio/winmm/SDL_winmm.c +++ b/src/audio/winmm/SDL_winmm.c @@ -32,6 +32,10 @@ #include "../SDL_audio_c.h" #include "SDL_winmm.h" +#ifndef WAVE_FORMAT_IEEE_FLOAT +#define WAVE_FORMAT_IEEE_FLOAT 0x0003 +#endif + #define DETECT_DEV_IMPL(typ, capstyp) \ static void DetectWave##typ##Devs(SDL_AddAudioDevice addfn) { \ const UINT devcount = wave##typ##GetNumDevs(); \ @@ -257,6 +261,7 @@ WINMM_OpenDevice(_THIS, const char *devname, int iscapture) case AUDIO_U8: case AUDIO_S16: case AUDIO_S32: + case AUDIO_F32: break; /* valid. */ default: @@ -273,7 +278,12 @@ WINMM_OpenDevice(_THIS, const char *devname, int iscapture) /* Set basic WAVE format parameters */ SDL_memset(&waveformat, '\0', sizeof(waveformat)); - waveformat.wFormatTag = WAVE_FORMAT_PCM; + + if (SDL_AUDIO_ISFLOAT(this->spec.format)) + waveformat.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; + else + waveformat.wFormatTag = WAVE_FORMAT_PCM; + waveformat.wBitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format); if (this->spec.channels > 2) |