summaryrefslogtreecommitdiff
path: root/src/windows/voicewindow.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-10-16 23:12:26 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2022-10-16 23:12:26 -0400
commit621beb13444eb3ca16a756bfb8fdc6b4f79723f5 (patch)
tree041586c38fa8d2664a4a063e3a2ef85405f0fde6 /src/windows/voicewindow.cpp
parent17e7478bb4827e094a06faca6c5f2d5f4e5a45cc (diff)
downloadabaddon-portaudio-621beb13444eb3ca16a756bfb8fdc6b4f79723f5.tar.gz
abaddon-portaudio-621beb13444eb3ca16a756bfb8fdc6b4f79723f5.zip
basic volume meters
Diffstat (limited to 'src/windows/voicewindow.cpp')
-rw-r--r--src/windows/voicewindow.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp
index 0af8176..0e42f32 100644
--- a/src/windows/voicewindow.cpp
+++ b/src/windows/voicewindow.cpp
@@ -5,6 +5,7 @@
#include "voicewindow.hpp"
#include "components/lazyimage.hpp"
#include "abaddon.hpp"
+#include "audio/manager.hpp"
// clang-format on
class VoiceWindowUserListEntry : public Gtk::ListBoxRow {
@@ -30,6 +31,7 @@ public:
m_horz.add(m_mute);
m_main.add(m_horz);
m_main.add(m_volume);
+ m_main.add(m_meter);
add(m_main);
show_all_children();
@@ -47,6 +49,10 @@ public:
});
}
+ void SetVolumeMeter(double frac) {
+ m_meter.set_fraction(frac);
+ }
+
private:
Gtk::Box m_main;
Gtk::Box m_horz;
@@ -54,6 +60,7 @@ private:
Gtk::Label m_name;
Gtk::CheckButton m_mute;
Gtk::Scale m_volume;
+ Gtk::ProgressBar m_meter;
public:
using type_signal_mute_cs = sigc::signal<void(bool)>;
@@ -98,9 +105,12 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
m_controls.add(m_mute);
m_controls.add(m_deafen);
m_main.add(m_controls);
+ m_main.add(m_capture_volume);
m_main.add(m_scroll);
add(m_main);
show_all_children();
+
+ Glib::signal_timeout().connect(sigc::mem_fun(*this, &VoiceWindow::UpdateVoiceMeters), 40);
}
void VoiceWindow::SetUsers(const std::unordered_set<Snowflake> &user_ids) {
@@ -130,6 +140,17 @@ void VoiceWindow::OnDeafenChanged() {
m_signal_deafen.emit(m_deafen.get_active());
}
+bool VoiceWindow::UpdateVoiceMeters() {
+ m_capture_volume.set_fraction(Abaddon::Get().GetAudio().GetCaptureVolumeLevel());
+ for (auto [id, row] : m_rows) {
+ const auto ssrc = Abaddon::Get().GetDiscordClient().GetSSRCOfUser(id);
+ if (ssrc.has_value()) {
+ row->SetVolumeMeter(Abaddon::Get().GetAudio().GetSSRCVolumeLevel(*ssrc));
+ }
+ }
+ return true;
+}
+
void VoiceWindow::OnUserConnect(Snowflake user_id, Snowflake to_channel_id) {
if (m_channel_id == to_channel_id) {
if (auto it = m_rows.find(user_id); it == m_rows.end()) {