aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/audio/audio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/audio/audio.cpp')
-rw-r--r--src/libjin/audio/audio.cpp49
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;
+
}
}