diff options
author | chai <chaifix@163.com> | 2018-05-21 23:33:33 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-05-21 23:33:33 +0800 |
commit | 1deb2a5f8a1c9b44ad38eea73449250d46ec0ce7 (patch) | |
tree | 34ec91e569965762c65bf6e01f854f96720fa3c1 /src/libjin/audio/sdl/audio.cpp | |
parent | 628a35692a165cdd6e26fac1beb274f2c7055483 (diff) |
更新音频模块
Diffstat (limited to 'src/libjin/audio/sdl/audio.cpp')
-rw-r--r-- | src/libjin/audio/sdl/audio.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/libjin/audio/sdl/audio.cpp b/src/libjin/audio/sdl/audio.cpp index 0559c18..cdf84aa 100644 --- a/src/libjin/audio/sdl/audio.cpp +++ b/src/libjin/audio/sdl/audio.cpp @@ -11,21 +11,22 @@ namespace audio return false; const SDLAudioSetting* setting = (SDLAudioSetting*)s; - SDL_AudioSpec wanted; - zero(wanted); - wanted.freq = setting->rate; - wanted.format = setting->resolution; - wanted.channels = setting->channels; - wanted.samples = setting->samples; - wanted.userdata = setting->userdata; - wanted.callback = setting->callback; + SDL_AudioSpec spec; + zero(spec); + spec.freq = setting->rate; + spec.format = setting->resolution; + spec.channels = setting->channels; + spec.samples = setting->samples; + spec.userdata = this; + spec.callback = defaultCallback; - if (SDL_OpenAudio(&wanted, NULL) < 0) + audioDevice = SDL_OpenAudioDevice(NULL, 0, &spec, NULL, 0); + if (audioDevice == 0) { return false; } // start audio - SDL_PauseAudio(0); + SDL_PauseAudioDevice(audioDevice, 0); return true; } @@ -35,7 +36,15 @@ namespace audio delete audio; } - void SDLAudio::defaultCallback(void *udata, Uint8 *stream, int len) + shared void SDLAudio::defaultCallback(void *userdata, Uint8 *stream, int size) + { + SDLAudio* audio = (SDLAudio*)userdata; + int16_t* buffer = (int16_t*)stream; + int len = size >> 1; + audio->processSources(len); + } + + void SDLAudio::processSources(int len) { } |