From 60a7187db27f711c92243a437123e120a8ea9c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Lormeau?= Date: Tue, 21 Jul 2020 03:16:48 +0200 Subject: [PATCH] AudioServer: Give the AudioClient a way to keep track of the main mix volume --- Libraries/LibAudio/ClientConnection.cpp | 6 ++++++ Libraries/LibAudio/ClientConnection.h | 2 ++ Services/AudioServer/AudioClient.ipc | 1 + Services/AudioServer/ClientConnection.cpp | 5 +++++ Services/AudioServer/ClientConnection.h | 1 + Services/AudioServer/Mixer.cpp | 8 ++++++++ Services/AudioServer/Mixer.h | 2 +- 7 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Libraries/LibAudio/ClientConnection.cpp b/Libraries/LibAudio/ClientConnection.cpp index 7accf955e6..c446cf291f 100644 --- a/Libraries/LibAudio/ClientConnection.cpp +++ b/Libraries/LibAudio/ClientConnection.cpp @@ -116,4 +116,10 @@ void ClientConnection::handle(const Messages::AudioClient::MutedStateChanged& me on_muted_state_change(message.muted()); } +void ClientConnection::handle(const Messages::AudioClient::MainMixVolumeChanged& message) +{ + if (on_main_mix_volume_change) + on_main_mix_volume_change(message.volume()); +} + } diff --git a/Libraries/LibAudio/ClientConnection.h b/Libraries/LibAudio/ClientConnection.h index dd27103b4c..10d76f03ee 100644 --- a/Libraries/LibAudio/ClientConnection.h +++ b/Libraries/LibAudio/ClientConnection.h @@ -59,10 +59,12 @@ public: Function on_finish_playing_buffer; Function on_muted_state_change; + Function on_main_mix_volume_change; private: virtual void handle(const Messages::AudioClient::FinishedPlayingBuffer&) override; virtual void handle(const Messages::AudioClient::MutedStateChanged&) override; + virtual void handle(const Messages::AudioClient::MainMixVolumeChanged&) override; }; } diff --git a/Services/AudioServer/AudioClient.ipc b/Services/AudioServer/AudioClient.ipc index 12aa2d0b92..b43db52dd0 100644 --- a/Services/AudioServer/AudioClient.ipc +++ b/Services/AudioServer/AudioClient.ipc @@ -2,4 +2,5 @@ endpoint AudioClient = 82 { FinishedPlayingBuffer(i32 buffer_id) =| MutedStateChanged(bool muted) =| + MainMixVolumeChanged(i32 volume) =| } diff --git a/Services/AudioServer/ClientConnection.cpp b/Services/AudioServer/ClientConnection.cpp index 117778b417..db3b150395 100644 --- a/Services/AudioServer/ClientConnection.cpp +++ b/Services/AudioServer/ClientConnection.cpp @@ -76,6 +76,11 @@ void ClientConnection::did_change_muted_state(Badge, bool muted) post_message(Messages::AudioClient::MutedStateChanged(muted)); } +void ClientConnection::did_change_main_mix_volume(Badge, int volume) +{ + post_message(Messages::AudioClient::MainMixVolumeChanged(volume)); +} + OwnPtr ClientConnection::handle(const Messages::AudioServer::Greet&) { return make(client_id()); diff --git a/Services/AudioServer/ClientConnection.h b/Services/AudioServer/ClientConnection.h index 9460cd7ca7..c0ecd4a8da 100644 --- a/Services/AudioServer/ClientConnection.h +++ b/Services/AudioServer/ClientConnection.h @@ -48,6 +48,7 @@ public: void did_finish_playing_buffer(Badge, int buffer_id); void did_change_muted_state(Badge, bool muted); + void did_change_main_mix_volume(Badge, int volume); virtual void die() override; diff --git a/Services/AudioServer/Mixer.cpp b/Services/AudioServer/Mixer.cpp index 20daa529cf..cd63747a99 100644 --- a/Services/AudioServer/Mixer.cpp +++ b/Services/AudioServer/Mixer.cpp @@ -132,6 +132,14 @@ void Mixer::mix() } } +void Mixer::set_main_volume(int volume) +{ + m_main_volume = volume; + ClientConnection::for_each([volume](ClientConnection& client) { + client.did_change_main_mix_volume({}, volume); + }); +} + void Mixer::set_muted(bool muted) { if (m_muted == muted) diff --git a/Services/AudioServer/Mixer.h b/Services/AudioServer/Mixer.h index bdfc4c8928..980a1ecaa3 100644 --- a/Services/AudioServer/Mixer.h +++ b/Services/AudioServer/Mixer.h @@ -118,7 +118,7 @@ public: NonnullRefPtr create_queue(ClientConnection&); int main_volume() const { return m_main_volume; } - void set_main_volume(int volume) { m_main_volume = volume; } + void set_main_volume(int volume); bool is_muted() const { return m_muted; } void set_muted(bool);