X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=18de01b3425b9c109224e28773cd38e506820910;hp=a4fbf7dee3d12997c9cc817a21b40507b755d1b9;hb=e0560b41a1796a02b15937b0ae5453bca745e5ff;hpb=d2098db6b7b0cee3b43e341c012beec5bc6ef6bd diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index a4fbf7de..18de01b3 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -12,6 +12,7 @@ ***********************************************************/ #include "system.h" +#include "sound.h" #include "misc.h" @@ -705,24 +706,40 @@ Bitmap *SDLLoadImage(char *filename) /* audio functions */ /* ========================================================================= */ -inline boolean SDLOpenAudio(void) +inline void SDLOpenAudio(void) { if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { Error(ERR_WARN, "SDL_InitSubSystem() failed: %s", SDL_GetError()); - return FALSE; + return; } - if (Mix_OpenAudio(22050, AUDIO_S16, 2, 512) < 0) + if (Mix_OpenAudio(DEFAULT_AUDIO_SAMPLE_RATE, AUDIO_S16, + AUDIO_STEREO_CHANNELS, + DEFAULT_AUDIO_FRAGMENT_SIZE) < 0) { Error(ERR_WARN, "Mix_OpenAudio() failed: %s", SDL_GetError()); - return FALSE; + return; } - Mix_Volume(-1, SDL_MIX_MAXVOLUME / 4); - Mix_VolumeMusic(SDL_MIX_MAXVOLUME / 4); + audio.sound_available = TRUE; + audio.music_available = TRUE; + audio.loops_available = TRUE; + audio.sound_enabled = TRUE; + + /* determine number of available channels */ + audio.channels = Mix_AllocateChannels(MIX_CHANNELS); + + if (!audio.mods_available) /* reserve first channel for music loops */ + { + if (Mix_ReserveChannels(1) == 1) + audio.music_channel = 0; + else + audio.music_available = FALSE; + } - return TRUE; + Mix_Volume(-1, SOUND_MAX_VOLUME); + Mix_VolumeMusic(SOUND_MAX_VOLUME); } inline void SDLCloseAudio(void)