feat(pulse): Show volume in decibels (#1894)
Adds `%decibels%` token to the pulseaudio module
This commit is contained in:
parent
1fc6942482
commit
751c21cd37
@ -38,6 +38,7 @@ class pulseaudio {
|
|||||||
int process_events();
|
int process_events();
|
||||||
|
|
||||||
int get_volume();
|
int get_volume();
|
||||||
|
double get_decibels();
|
||||||
void set_volume(float percentage);
|
void set_volume(float percentage);
|
||||||
void inc_volume(int delta_perc);
|
void inc_volume(int delta_perc);
|
||||||
void set_mute(bool mode);
|
void set_mute(bool mode);
|
||||||
|
@ -50,6 +50,7 @@ namespace modules {
|
|||||||
int m_interval{5};
|
int m_interval{5};
|
||||||
atomic<bool> m_muted{false};
|
atomic<bool> m_muted{false};
|
||||||
atomic<int> m_volume{0};
|
atomic<int> m_volume{0};
|
||||||
|
atomic<double> m_decibels{0};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,6 +154,13 @@ int pulseaudio::get_volume() {
|
|||||||
return static_cast<int>(pa_cvolume_max(&cv) * 100.0f / PA_VOLUME_NORM + 0.5f);
|
return static_cast<int>(pa_cvolume_max(&cv) * 100.0f / PA_VOLUME_NORM + 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get volume in decibels
|
||||||
|
*/
|
||||||
|
double pulseaudio::get_decibels() {
|
||||||
|
return pa_sw_volume_to_dB(pa_cvolume_max(&cv));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set volume to given percentage
|
* Set volume to given percentage
|
||||||
*/
|
*/
|
||||||
|
@ -66,11 +66,13 @@ namespace modules {
|
|||||||
|
|
||||||
// Get volume and mute state
|
// Get volume and mute state
|
||||||
m_volume = 100;
|
m_volume = 100;
|
||||||
|
m_decibels = PA_DECIBEL_MININFTY;
|
||||||
m_muted = false;
|
m_muted = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (m_pulseaudio) {
|
if (m_pulseaudio) {
|
||||||
m_volume = m_volume * m_pulseaudio->get_volume() / 100.0f;
|
m_volume = m_volume * m_pulseaudio->get_volume() / 100.0f;
|
||||||
|
m_decibels = m_pulseaudio->get_decibels();
|
||||||
m_muted = m_muted || m_pulseaudio->is_muted();
|
m_muted = m_muted || m_pulseaudio->is_muted();
|
||||||
}
|
}
|
||||||
} catch (const pulseaudio_error& err) {
|
} catch (const pulseaudio_error& err) {
|
||||||
@ -81,11 +83,13 @@ namespace modules {
|
|||||||
if (m_label_volume) {
|
if (m_label_volume) {
|
||||||
m_label_volume->reset_tokens();
|
m_label_volume->reset_tokens();
|
||||||
m_label_volume->replace_token("%percentage%", to_string(m_volume));
|
m_label_volume->replace_token("%percentage%", to_string(m_volume));
|
||||||
|
m_label_volume->replace_token("%decibels%", string_util::floating_point(m_decibels, 2, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_label_muted) {
|
if (m_label_muted) {
|
||||||
m_label_muted->reset_tokens();
|
m_label_muted->reset_tokens();
|
||||||
m_label_muted->replace_token("%percentage%", to_string(m_volume));
|
m_label_muted->replace_token("%percentage%", to_string(m_volume));
|
||||||
|
m_label_muted->replace_token("%decibels%", string_util::floating_point(m_decibels, 2, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user