// SPDX-License-Identifier: MIT // // EmulationStation Desktop Edition // VolumeControl.h // // Controls system audio volume. // #ifndef ES_APP_VOLUME_CONTROL_H #define ES_APP_VOLUME_CONTROL_H #include #if defined(__APPLE__) //#error TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) #include #include #include #elif defined(_WIN64) #include #include #include #include #endif // Singleton pattern. Call getInstance() to get an object. class VolumeControl { #if defined(__APPLE__) // #error TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) static const std::string mixerName; static const std::string mixerCard; int mixerIndex; snd_mixer_t* mixerHandle; snd_mixer_elem_t* mixerElem; snd_mixer_selem_id_t* mixerSelemId; #elif defined(_WIN64) HMIXER mixerHandle; MIXERCONTROL mixerControl; IAudioEndpointVolume * endpointVolume; #endif int originalVolume; int internalVolume; static std::weak_ptr sInstance; VolumeControl(); VolumeControl(const VolumeControl & right); VolumeControl & operator=(const VolumeControl & right); public: static std::shared_ptr & getInstance(); void init(); void deinit(); int getVolume() const; void setVolume(int volume); ~VolumeControl(); }; #endif // ES_APP_VOLUME_CONTROL_H