aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/audio/sdl/audio.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-05-21 23:33:33 +0800
committerchai <chaifix@163.com>2018-05-21 23:33:33 +0800
commit1deb2a5f8a1c9b44ad38eea73449250d46ec0ce7 (patch)
tree34ec91e569965762c65bf6e01f854f96720fa3c1 /src/libjin/audio/sdl/audio.cpp
parent628a35692a165cdd6e26fac1beb274f2c7055483 (diff)
更新音频模块
Diffstat (limited to 'src/libjin/audio/sdl/audio.cpp')
-rw-r--r--src/libjin/audio/sdl/audio.cpp31
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)
{
}