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.h68
1 files changed, 68 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..6da6605
--- /dev/null
+++ b/src/libjin/Audio/SDL/Audio.h
@@ -0,0 +1,68 @@
+#ifndef __JIN_AUDIO_SDL_H
+#define __JIN_AUDIO_SDL_H
+#include "../../modules.h"
+#if JIN_MODULES_AUDIO && JIN_AUDIO_SDLAUDIO
+
+#include <vector>
+#include "../audio.h"
+
+namespace jin
+{
+namespace audio
+{
+
+#define SDLAUDIO_BITDEPTH 16
+#define SDLAUDIO_BYTEDEPTH (SDLAUDIO_BITDEPTH >> 3)
+#define SDLAUDIO_CHANNELS 2
+
+ class SDLAudio : public AudioSystem<SDLAudio>
+ {
+
+ public:
+
+ struct Setting : SettingBase
+ {
+ public:
+ int samplerate; // Ƶ
+ int samples; // sample<=samplerate
+ };
+
+ /* 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;
+
+ /* process functions*/
+ void processCommands();
+ void processSources(void* buffer, size_t len);
+
+ void lock();
+ void unlock();
+
+ private:
+
+ SDLAudio() {};
+ ~SDLAudio() {};
+
+ SINGLETON(SDLAudio);
+
+ onlyonce bool initSystem(const SettingBase* setting) override;
+ onlyonce void quitSystem() override;
+
+ unsigned int audioDevice;
+
+ };
+
+ typedef SDLAudio::Setting SDLAudioSetting;
+
+}
+}
+
+#endif // JIN_MODULES_AUDIO && JIN_AUDIO_SDLAUDIO
+#endif \ No newline at end of file