diff options
Diffstat (limited to 'sound/sdl.c')
-rw-r--r-- | sound/sdl.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/sound/sdl.c b/sound/sdl.c new file mode 100644 index 000000000..2f227ad39 --- /dev/null +++ b/sound/sdl.c @@ -0,0 +1,40 @@ +#include "stdafx.h" +#include "openttd.h" +#include "driver.h" +#include "mixer.h" +#include "sdl.h" +#include "sound/sdl.h" +#include <SDL.h> + +static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len) +{ + MxMixSamples(_mixer, stream, len / 4); +} + +static const char *SdlSoundStart(const char * const *parm) +{ + SDL_AudioSpec spec; + + const char *s = SdlOpen(SDL_INIT_AUDIO); + if (s != NULL) return s; + + spec.freq = GetDriverParamInt(parm, "hz", 11025); + spec.format = AUDIO_S16SYS; + spec.channels = 2; + spec.samples = 512; + spec.callback = fill_sound_buffer; + SDL_CALL SDL_OpenAudio(&spec, &spec); + SDL_CALL SDL_PauseAudio(0); + return NULL; +} + +static void SdlSoundStop(void) +{ + SDL_CALL SDL_CloseAudio(); + SdlClose(SDL_INIT_AUDIO); +} + +const HalSoundDriver _sdl_sound_driver = { + SdlSoundStart, + SdlSoundStop, +}; |