diff options
Diffstat (limited to 'src/libjin/audio/audio.cpp')
-rw-r--r-- | src/libjin/audio/audio.cpp | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/src/libjin/audio/audio.cpp b/src/libjin/audio/audio.cpp index f4b64e6..7142625 100644 --- a/src/libjin/audio/audio.cpp +++ b/src/libjin/audio/audio.cpp @@ -1,13 +1,58 @@ +#include <SDL2/SDL.h> + #include "audio.h" namespace jin { namespace audio { + + shared Audio* Audio::audio = NULL; + + bool Audio::init(const SettingBase* setting) + { + static bool result = _init(setting); + return result; + } + + void Audio::quit() + { + CallOnce(_quit()); + } + + onlyonce bool Audio::_init(const SettingBase* s) + { + if (SDL_Init(SDL_INIT_AUDIO) < 0) + return false; + + const AudioSetting* setting = (AudioSetting*)s; + SDL_AudioSpec wanted; + zero(wanted); + wanted.freq = setting->freq; + wanted.format = setting->format; + wanted.channels = setting->channels; + wanted.samples = setting->samples; + wanted.userdata = setting->userdata; + wanted.callback = setting->callback; + + if (SDL_OpenAudio(&wanted, NULL) < 0) + { + return false; + } + // start audio + SDL_PauseAudio(0); + return true; + } + + onlyonce void Audio::_quit() + { + SDL_CloseAudio(); + delete audio; + } - onlyonce bool Audio::_init(const SettingBase* setting) + shared void defaultCallback(void *udata, Uint8 *stream, int len) { - return false; + } } |