aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/audio/sdl/audio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/audio/sdl/audio.cpp')
-rw-r--r--src/libjin/audio/sdl/audio.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/libjin/audio/sdl/audio.cpp b/src/libjin/audio/sdl/audio.cpp
index 7870329..d753587 100644
--- a/src/libjin/audio/sdl/audio.cpp
+++ b/src/libjin/audio/sdl/audio.cpp
@@ -1,22 +1,29 @@
#include "audio.h"
+#include "source.h"
namespace jin
{
namespace audio
{
+ static void defaultCallback(void *userdata, Uint8 *stream, int size)
+ {
+ SDLAudio* audio = (SDLAudio*)userdata;
+ audio->processCommands();
+ audio->processSources(stream, size);
+ }
+
onlyonce bool SDLAudio::_init(const SettingBase* s)
{
if (SDL_Init(SDL_INIT_AUDIO) < 0)
return false;
-
- const SDLAudioSetting* setting = (SDLAudioSetting*)s;
+ SDLAudioSetting* setting = (SDLAudioSetting*)s;
SDL_AudioSpec spec;
zero(spec);
- spec.freq = setting->rate;
- spec.format = setting->resolution;
- spec.channels = setting->channels;
- spec.samples = setting->samples;
+ spec.freq = 44100;
+ spec.format = AUDIO_S16SYS;
+ spec.channels = 1;
+ spec.samples = 2048;
spec.userdata = this;
spec.callback = defaultCallback;
@@ -36,17 +43,14 @@ namespace audio
delete audio;
}
- shared void SDLAudio::defaultCallback(void *userdata, Uint8 *stream, int size)
+ void SDLAudio::processCommands()
{
- SDLAudio* audio = (SDLAudio*)userdata;
- int16_t* buffer = (int16_t*)stream;
- int len = size >> 1;
- audio->processSources(len);
+ SDLSourceManager::get()->processCommands();
}
- void SDLAudio::processSources(int len)
+ void SDLAudio::processSources(Uint8* buffer, int len)
{
-
+ SDLSourceManager::get()->processSources(buffer, len);
}
void SDLAudio::play() {}