From 51ba9cb2a6b0b9395a2912eadeb954c95e4c1d3c Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 20 May 2018 23:37:11 +0800 Subject: =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/audio/audio.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) (limited to 'src/libjin/audio/audio.cpp') 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 + #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; + } } -- cgit v1.1-26-g67d0