From e86cab00b6302c5f3e0819e8235811416360fafc Mon Sep 17 00:00:00 2001 From: Alex Chronopoulos Date: Fri, 4 Nov 2022 00:01:03 +0100 Subject: [PATCH] AudioServer: Skip mixing when volume is zero When volume is zero it is not necessary to go through the mixing loop. The zero-filled buffer can be written directly to the device, instead, similar to the muted case. Tested by using the piano app and the main volume control. --- Userland/Services/AudioServer/Mixer.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Userland/Services/AudioServer/Mixer.cpp b/Userland/Services/AudioServer/Mixer.cpp index 4b5cdc41be..6f69718d4b 100644 --- a/Userland/Services/AudioServer/Mixer.cpp +++ b/Userland/Services/AudioServer/Mixer.cpp @@ -96,19 +96,15 @@ void Mixer::mix() } } - if (m_muted) { + // Even though it's not realistic, the user expects no sound at 0%. + if (m_muted || m_main_volume < 0.01) { m_device->write(m_zero_filled_buffer.data(), static_cast(m_zero_filled_buffer.size())); } else { Array buffer; OutputMemoryStream stream { buffer }; for (auto& mixed_sample : mixed_buffer) { - - // Even though it's not realistic, the user expects no sound at 0%. - if (m_main_volume < 0.01) - mixed_sample = Audio::Sample { 0 }; - else - mixed_sample.log_multiply(static_cast(m_main_volume)); + mixed_sample.log_multiply(static_cast(m_main_volume)); mixed_sample.clip(); LittleEndian out_sample;