aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/audio/sdl/audio.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/audio/sdl/audio.h')
-rw-r--r--src/libjin/audio/sdl/audio.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/libjin/audio/sdl/audio.h b/src/libjin/audio/sdl/audio.h
new file mode 100644
index 0000000..920f56a
--- /dev/null
+++ b/src/libjin/audio/sdl/audio.h
@@ -0,0 +1,59 @@
+#ifndef __JIN_AUDIO_SDL_H
+#define __JIN_AUDIO_SDL_H
+
+#include "../audio.h"
+
+namespace jin
+{
+namespace audio
+{
+
+ class SDLAudio : public Audio
+ {
+
+ public:
+
+ struct Setting : SettingBase
+ {
+ int rate; //
+ int resolution; // ֱ
+ char channels; //
+ int samples; // ȡ
+ SDL_AudioCallback callback; // Ƶص
+ void* userdata; // Զ
+ };
+
+ static void defaultCallback(void *udata, Uint8 *stream, int len);
+
+ static inline Audio* get()
+ {
+ return audio != NULL ? audio : (audio = new SDLAudio());
+ }
+
+ /* IAudio interface */
+ void play() override;
+ void stop() override;
+ bool pause() override;
+ bool pause(Source* source) override;
+ bool resume() override;
+ bool resume(Source* source) override;
+ void rewind() override;
+ void setVolume(float volume) override;
+ float getVolume() override;
+
+ private:
+
+ SDLAudio() {}
+ ~SDLAudio() {}
+
+ onlyonce bool _init(const SettingBase* setting) override;
+ onlyonce void _quit() override;
+
+ };
+
+ typedef SDLAudio::Setting SDLAudioSetting;
+
+}
+}
+
+#endif \ No newline at end of file