diff options
author | chai <chaifix@163.com> | 2018-07-22 12:28:03 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-07-22 12:28:03 +0800 |
commit | b2c7bb0b283dd2a80f345e26c042d6ffaf05209c (patch) | |
tree | d0945284f54a35ce00de80135ff7863af7b6e32d /src/libjin/audio/sdl/audio.cpp | |
parent | 50d060cd3a6831a1712195833c1f2774225e584c (diff) |
update
Diffstat (limited to 'src/libjin/audio/sdl/audio.cpp')
-rw-r--r-- | src/libjin/audio/sdl/audio.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/libjin/audio/sdl/audio.cpp b/src/libjin/audio/sdl/audio.cpp index be4caa2..79ca3f2 100644 --- a/src/libjin/audio/sdl/audio.cpp +++ b/src/libjin/audio/sdl/audio.cpp @@ -1,6 +1,7 @@ #include <iostream> #include "audio.h" #include "source.h" +#include "../../math/math.h" namespace jin { @@ -8,9 +9,9 @@ namespace audio { /* עcallbackƵ̵߳ */ - void defaultCallback(void *userdata, Uint8 *stream, int size) + static void defaultCallback(void *userdata, Uint8 *stream, int size) { - SDLAudio* audio = static_cast<SDLAudio*>(userdata); + static SDLAudio* audio = static_cast<SDLAudio*>(userdata); audio->lock(); audio->processCommands(); audio->processSources(stream, size); @@ -22,14 +23,21 @@ namespace audio if (SDL_Init(SDL_INIT_AUDIO) < 0) return false; SDL_AudioSpec spec; - spec.freq = 44100; // 44100 Hz - spec.format = AUDIO_S16SYS; // signed 16bits - spec.channels = 2; // - spec.samples = 1 << 15; // Uin16Χ2 + Setting* setting = (Setting*)s; + if (setting == nullptr) + return false; + + unsigned int samplerate = setting->samplerate; + unsigned int samples = clamp(setting->samples, 1, setting->samplerate); + + spec.freq = samplerate; // ÿsample,õ 11025, 22050, 44100 and 48000 Hz. + spec.format = AUDIO_S16SYS; // signed 16-bit samples in native byte order + spec.channels = SDLAUDIO_CHANNELS; // + spec.samples = samples; // ÿβʱһã=setting->samplerateÿֻ1 spec.userdata = this; spec.callback = defaultCallback; - audioDevice = SDL_OpenAudioDevice(NULL, 0, &spec, NULL, 0); + audioDevice = SDL_OpenAudioDevice(NULL, 0, &spec, NULL, 0); if (audioDevice == 0) return false; /* start audio */ |