polybar/include/adapters/alsa/mixer.hpp

48 lines
916 B
C++

#pragma once
#include <mutex>
#include "common.hpp"
// fwd
struct _snd_mixer;
struct _snd_mixer_elem;
struct _snd_mixer_selem_id;
typedef struct _snd_mixer snd_mixer_t;
typedef struct _snd_mixer_elem snd_mixer_elem_t;
typedef struct _snd_mixer_selem_id snd_mixer_selem_id_t;
POLYBAR_NS
namespace alsa {
class mixer {
public:
explicit mixer(string mixer_control_name);
~mixer();
string get_name();
bool wait(int timeout = -1);
int process_events();
int get_volume();
int get_normalized_volume();
void set_volume(float percentage);
void set_normalized_volume(float percentage);
void set_mute(bool mode);
void toggle_mute();
bool is_muted();
private:
std::mutex m_lock;
string m_name;
snd_mixer_selem_id_t* m_mixerid{nullptr};
snd_mixer_t* m_hardwaremixer{nullptr};
snd_mixer_elem_t* m_mixerelement{nullptr};
};
}
POLYBAR_NS_END