aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Audio/SDL/je_sdl_audio.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Audio/SDL/je_sdl_audio.h')
-rw-r--r--src/libjin/Audio/SDL/je_sdl_audio.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/libjin/Audio/SDL/je_sdl_audio.h b/src/libjin/Audio/SDL/je_sdl_audio.h
new file mode 100644
index 0000000..c64b109
--- /dev/null
+++ b/src/libjin/Audio/SDL/je_sdl_audio.h
@@ -0,0 +1,62 @@
+#ifndef __LIBJIN_AUDIO_SDL_H
+#define __LIBJIN_AUDIO_SDL_H
+#include "../../core/je_configuration.h"
+#if LIBJIN_MODULES_AUDIO && LIBJIN_AUDIO_SDLAUDIO
+
+#include <vector>
+
+#include "../je_audio.h"
+
+#include "je_sdl_source.h"
+
+namespace jin
+{
+ namespace audio
+ {
+
+ #define SDLAUDIO_BITDEPTH 16
+ #define SDLAUDIO_BYTEDEPTH (SDLAUDIO_BITDEPTH >> 3)
+ #define SDLAUDIO_CHANNELS 2
+
+ class SDLAudio : public Audio<SDLAudio>
+ {
+ public:
+ struct Setting : SettingBase
+ {
+ public:
+ int samplerate; // Ƶ
+ int samples; // sample<=samplerate
+ };
+
+ /* IAudio interface */
+ void play() override;
+ void stop() override;
+ void pause() override;
+ void resume() override;
+ void setVolume(float volume) override;
+ /* process functions*/
+ void processCommands();
+ void processSources(void* buffer, size_t len);
+ void processBuffer(void* buffer, size_t len);
+ bool goOnProcess();
+ /* thread-safe */
+ void lock();
+ void unlock();
+
+ private:
+ singleton(SDLAudio);
+ SDLAudio() {};
+ ~SDLAudio() {};
+ /* subsystem interface */
+ bool initSystem(const SettingBase* setting) override;
+ void quitSystem() override;
+
+ unsigned int audioDevice;
+
+ };
+
+ } // namespace audio
+} // namespace jin
+
+#endif // LIBJIN_MODULES_AUDIO && LIBJIN_AUDIO_SDLAUDIO
+#endif // __LIBJIN_AUDIO_SDL_H