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.cpp34
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);
}