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.cpp22
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 */