#ifndef MIXER_H_6DF82000 #define MIXER_H_6DF82000 #include #include #include #include #include class mix_error : public std::logic_error { public: mix_error() : std::logic_error(Mix_GetError()) { } }; class mix_wrapper { public: mix_wrapper() { if (Mix_Init(0) != 0) { mix_error ex; Mix_Quit(); throw ex; } if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024) != 0) { mix_error ex; Mix_Quit(); throw ex; } } ~mix_wrapper() { Mix_CloseAudio(); Mix_Quit(); } }; class chunk_deleter { public: void operator()(Mix_Chunk* chunk) { Mix_FreeChunk(chunk); } }; using chunk_ptr = std::unique_ptr; // MUST create the Renderer first! class Mixer { public: void playSound(std::string filename); private: mix_wrapper mix_; std::map sounds_; }; #endif /* end of include guard: MIXER_H_6DF82000 */