From 40229adb149b20b03c141055e66af614f791d169 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Fri, 20 Mar 2026 01:27:57 +0100 Subject: [PATCH] Qt: add gui audio volume setting --- rpcs3/rpcs3qt/gui_settings.cpp | 1 + rpcs3/rpcs3qt/gui_settings.h | 3 ++ rpcs3/rpcs3qt/main_window.cpp | 2 ++ rpcs3/rpcs3qt/qt_video_source.cpp | 11 ++++++- rpcs3/rpcs3qt/settings_dialog.cpp | 10 ++++++ rpcs3/rpcs3qt/settings_dialog.ui | 52 ++++++++++++++++++++++++++++++- rpcs3/rpcs3qt/tooltips.h | 1 + 7 files changed, 78 insertions(+), 2 deletions(-) diff --git a/rpcs3/rpcs3qt/gui_settings.cpp b/rpcs3/rpcs3qt/gui_settings.cpp index 8f42a14dd7..fdbab7345e 100644 --- a/rpcs3/rpcs3qt/gui_settings.cpp +++ b/rpcs3/rpcs3qt/gui_settings.cpp @@ -17,6 +17,7 @@ namespace gui { QString stylesheet; bool custom_stylesheet_active = false; + f32 volume = 1.0f; QString get_savestate_list_column_name(savestate_list_columns col) { diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index 561b07a9c4..c15b4166bf 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -13,6 +13,7 @@ namespace gui { extern QString stylesheet; extern bool custom_stylesheet_active; + extern f32 volume; enum custom_roles { @@ -139,6 +140,8 @@ namespace gui const QColor gl_icon_color = QColor(240, 240, 240, 255); + const gui_save gui_volume = gui_save(main_window, "guiVolume", 1.0f); + const gui_save rg_freeze = gui_save(main_window, "recentGamesFrozen", false); const gui_save rg_entries = gui_save(main_window, "recentGamesNames", QVariant::fromValue(q_pair_list())); diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index b7900ce4d8..8f9324d73e 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -3663,6 +3663,8 @@ void main_window::ConfigureGuiFromSettings() m_recent_game.entries = gui_settings::Var2List(m_gui_settings->GetValue(gui::rg_entries)); m_recent_save.entries = gui_settings::Var2List(m_gui_settings->GetValue(gui::rs_entries)); + gui::volume = std::clamp(m_gui_settings->GetValue(gui::gui_volume).toFloat() * 100.0f, 0.0f, 100.0f); + const auto update_recent_games_menu = [this](bool is_savestate) { recent_game_wrapper& rgw = is_savestate ? m_recent_save : m_recent_game; diff --git a/rpcs3/rpcs3qt/qt_video_source.cpp b/rpcs3/rpcs3qt/qt_video_source.cpp index b14db8a019..da0f284e0a 100644 --- a/rpcs3/rpcs3qt/qt_video_source.cpp +++ b/rpcs3/rpcs3qt/qt_video_source.cpp @@ -1,7 +1,9 @@ #include "stdafx.h" #include "Emu/System.h" #include "Emu/system_config.h" +#include "Emu/Audio/audio_utils.h" #include "qt_video_source.h" +#include "gui_settings.h" #include "Loader/ISO.h" @@ -267,7 +269,14 @@ void qt_video_source::start_audio() } } - audio.output->setVolume(g_cfg.audio.volume.get() / 100.0f); + f32 volume = gui::volume; + + if (m_audio_instance_index == qt_audio_instance::emu_index) + { + volume = audio::get_volume(); + } + + audio.output->setVolume(std::clamp(volume, 0.0f, 1.0f)); audio.player->play(); audio.source = this; } diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 19fee331fb..b78eaf973a 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -2186,6 +2186,16 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std m_gui_settings->SetValue(gui::nav_global, checked); }); + // Audio + SubscribeTooltip(ui->gb_gui_volume, tooltips.settings.gui_volume); + connect(ui->guiVolume, &QSlider::valueChanged, [this](int value) + { + ui->guiVolumeLabel->setText(tr("User Interface: %0 %", "GUI volume").arg(value)); + gui::volume = std::clamp(value / 100.0f, 0.0f, 1.0f); + m_gui_settings->SetValue(gui::gui_volume, gui::volume); + }); + ui->guiVolume->setValue(std::clamp(m_gui_settings->GetValue(gui::gui_volume).toFloat() * 100.0f, 0.0f, 100.0f)); + // Discord: SubscribeTooltip(ui->useRichPresence, tooltips.settings.use_rich_presence); SubscribeTooltip(ui->discordState, tooltips.settings.discord_state); diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index c5a5378f4c..0d28134da8 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -513,7 +513,7 @@ - + 0 @@ -3980,6 +3980,56 @@ + + + + Volume + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + GUI: 0% + + + + + + + 100 + + + Qt::Orientation::Horizontal + + + QSlider::TickPosition::TicksBelow + + + 50 + + + + + + + + + diff --git a/rpcs3/rpcs3qt/tooltips.h b/rpcs3/rpcs3qt/tooltips.h index 3199d5cb4a..c5a5e5be31 100644 --- a/rpcs3/rpcs3qt/tooltips.h +++ b/rpcs3/rpcs3qt/tooltips.h @@ -228,6 +228,7 @@ public: const QString uuid = tr("This is the ID used for hardware statistics.\nIt should only be reset if you change your hardware configuration or if you copied RPCS3 to another PC."); const QString pad_navigation = tr("Use the game pad that is configured for player 1 to navigate in the GUI."); const QString global_navigation = tr("Keep control over pad navigation if RPCS3 is not the active window."); + const QString gui_volume = tr("Set the audio volume of the user interface. This does not affect the ingame audio."); // input