diff options
Diffstat (limited to 'src/libjin/Audio/SDL')
-rw-r--r-- | src/libjin/Audio/SDL/SDLAudio.h | 11 | ||||
-rw-r--r-- | src/libjin/Audio/SDL/SDLSource.h | 25 |
2 files changed, 10 insertions, 26 deletions
diff --git a/src/libjin/Audio/SDL/SDLAudio.h b/src/libjin/Audio/SDL/SDLAudio.h index a8067ba..b43dcfe 100644 --- a/src/libjin/Audio/SDL/SDLAudio.h +++ b/src/libjin/Audio/SDL/SDLAudio.h @@ -18,9 +18,7 @@ namespace audio class SDLAudio : public Audio<SDLAudio> { - public: - struct Setting : SettingBase { public: @@ -34,23 +32,20 @@ namespace audio 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() {}; - - SINGLETON(SDLAudio); - + /* subsystem interface */ bool initSystem(const SettingBase* setting) override; void quitSystem() override; diff --git a/src/libjin/Audio/SDL/SDLSource.h b/src/libjin/Audio/SDL/SDLSource.h index c45d7e5..a99f65e 100644 --- a/src/libjin/Audio/SDL/SDLSource.h +++ b/src/libjin/Audio/SDL/SDLSource.h @@ -20,14 +20,11 @@ namespace audio class SDLSource : public Source { - public: - - ~SDLSource(); - static SDLSource* createSource(const char* file); static SDLSource* createSource(void* mem, size_t size); + ~SDLSource(); /* ISource interface */ void play() override; void stop() override; @@ -37,25 +34,22 @@ namespace audio bool isStopped() const override; bool isPaused() const override; void setPitch(float pitch) override; - // Ͻ void setVolume(float volume) override; bool setLoop(bool loop) override; void setRate(float rate) override; - + /* handle and process anduio clip */ inline void handle(SDLSourceManager* manager, SDLSourceCommand* cmd); inline void process(void* buffer, size_t size); protected: - SDLSource(); - + /* decode raw audio data */ void decode_wav(void* mem, int size); void decode_ogg(void* mem, int size); - + /* check state */ inline bool is(int state) const { return (status.state & state) == state; } - struct - { + struct{ const void* data; // Ƶ int length; // dataֽڳ const void* end; // dataβ = (unsigned char*)data + size @@ -64,10 +58,8 @@ namespace audio int samples; // sample = size / (bitdepth / 8) unsigned char channels; // channel1(mono)2(stereo) } raw; - /* Procedure controller variable */ - struct - { + struct{ int pos; // ǰŵsample int pitch; // pitch int state; // ǰ״̬ @@ -79,15 +71,13 @@ namespace audio class SDLSourceManager { - public: - static SDLSourceManager* get(); /* Process function */ void processCommands(); void processSources(void* buffer, size_t size); - + /* control flow */ void removeAllSource(); void removeSource(SDLSource* source); void pushSource(SDLSource* source); @@ -95,7 +85,6 @@ namespace audio void pushCommand(SDLSourceCommand* cmd); private : - std::queue<SDLSourceCommand*> commands; std::stack<SDLSourceCommand*> commandsPool; std::vector<SDLSource*> sources; // processing sources |