diff options
Diffstat (limited to 'src/libjin/audio/sdl/audio.cpp')
-rw-r--r-- | src/libjin/audio/sdl/audio.cpp | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/libjin/audio/sdl/audio.cpp b/src/libjin/audio/sdl/audio.cpp index 5277a3d..a26ea1a 100644 --- a/src/libjin/audio/sdl/audio.cpp +++ b/src/libjin/audio/sdl/audio.cpp @@ -1,3 +1,4 @@ +#include <iostream> #include "audio.h" #include "source.h" @@ -6,35 +7,32 @@ namespace jin namespace audio { - void SDLAudio::defaultCallback(void *userdata, Uint8 *stream, int size) + /* עcallbackƵ̵߳ */ + void defaultCallback(void *userdata, Uint8 *stream, int size) { SDLAudio* audio = (SDLAudio*)userdata; - SDL_LockAudioDevice(audio->audioDevice); + audio->lock(); audio->processCommands(); audio->processSources(stream, size); - SDL_UnlockAudioDevice(audio->audioDevice); + audio->unlock(); } onlyonce bool SDLAudio::_init(const SettingBase* s) { if (SDL_Init(SDL_INIT_AUDIO) < 0) return false; - SDLAudioSetting* setting = (SDLAudioSetting*)s; SDL_AudioSpec spec; - zero(spec); - spec.freq = 44100; - spec.format = AUDIO_S16SYS; - spec.channels = 1; - spec.samples = 2048; + spec.freq = 44100; // 44100 Hz + spec.format = AUDIO_S16SYS; // signed 16bits + spec.channels = 2; // + spec.samples = 1 << 15; // Uin16Χ2 spec.userdata = this; spec.callback = defaultCallback; audioDevice = SDL_OpenAudioDevice(NULL, 0, &spec, NULL, 0); if (audioDevice == 0) - { return false; - } - // start audio + /* start audio */ SDL_PauseAudioDevice(audioDevice, 0); return true; } @@ -45,12 +43,22 @@ namespace audio delete audio; } + void SDLAudio::lock() + { + SDL_LockAudioDevice(audioDevice); + } + + void SDLAudio::unlock() + { + SDL_UnlockAudioDevice(audioDevice); + } + void SDLAudio::processCommands() { SDLSourceManager::get()->processCommands(); } - void SDLAudio::processSources(Uint8* buffer, int len) + void SDLAudio::processSources(void* buffer, size_t len) { SDLSourceManager::get()->processSources(buffer, len); } |