From 0410d318fbc1e7068247bbed05f05205b577a6d0 Mon Sep 17 00:00:00 2001 From: Sam Belliveau Date: Mon, 11 Aug 2025 19:43:02 -0400 Subject: [PATCH] Automatically Change Audio Buffer Size depending on Audio Backend --- Source/Core/DolphinQt/Settings/AudioPane.cpp | 41 +++++++++++++------- Source/Core/DolphinQt/Settings/AudioPane.h | 2 + 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/Source/Core/DolphinQt/Settings/AudioPane.cpp b/Source/Core/DolphinQt/Settings/AudioPane.cpp index 4d3ee8ba85..4833b5e03d 100644 --- a/Source/Core/DolphinQt/Settings/AudioPane.cpp +++ b/Source/Core/DolphinQt/Settings/AudioPane.cpp @@ -160,26 +160,29 @@ void AudioPane::CreateWidgets() auto* playback_layout = new QGridLayout; playback_box->setLayout(playback_layout); - ConfigSlider* audio_buffer_size = new ConfigSlider(16, 512, Config::MAIN_AUDIO_BUFFER_SIZE, 8); + m_audio_buffer_size = new ConfigSlider(16, 512, Config::MAIN_AUDIO_BUFFER_SIZE, 8); QLabel* audio_buffer_size_label = new QLabel; - audio_buffer_size->setSingleStep(8); - audio_buffer_size->setPageStep(8); + m_audio_buffer_size->setSingleStep(8); + m_audio_buffer_size->setPageStep(8); - audio_buffer_size->SetDescription( - tr("Controls the number of audio samples buffered." - " Lower values reduce latency but may cause more crackling or stuttering." - "

If unsure, set this to 80 ms.")); + m_audio_buffer_size->SetDescription( + tr("Controls the number of audio samples buffered. " + "Lower values reduce latency but may cause more crackling or stuttering." + "

LLE requires a larger buffer than HLE because it emits audio in larger chunks." + "

If unsure, set this to 80 ms for HLE or 120 ms for " + "LLE")); // Connect the slider to update the value label live - connect(audio_buffer_size, &QSlider::valueChanged, this, [=](int value) { - int stepped_value = (value / 8) * 8; - audio_buffer_size->setValue(stepped_value); - audio_buffer_size_label->setText(tr("%1 ms").arg(stepped_value)); - }); + connect(m_audio_buffer_size, &QSlider::valueChanged, this, + [audio_buffer_size_label, this](int value) { + int stepped_value = (value / 8) * 8; + m_audio_buffer_size->setValue(stepped_value); + audio_buffer_size_label->setText(tr("%1 ms").arg(stepped_value)); + }); // Set initial value display - audio_buffer_size_label->setText(tr("%1 ms").arg(audio_buffer_size->value())); + audio_buffer_size_label->setText(tr("%1 ms").arg(m_audio_buffer_size->value())); m_audio_fill_gaps = new ConfigBool(tr("Fill Audio Gaps"), Config::MAIN_AUDIO_FILL_GAPS); @@ -188,8 +191,8 @@ void AudioPane::CreateWidgets() // Create a horizontal layout for the slider + value label auto* buffer_layout = new QHBoxLayout; - buffer_layout->addWidget(new ConfigSliderLabel(tr("Audio Buffer Size:"), audio_buffer_size)); - buffer_layout->addWidget(audio_buffer_size); + buffer_layout->addWidget(new ConfigSliderLabel(tr("Audio Buffer Size:"), m_audio_buffer_size)); + buffer_layout->addWidget(m_audio_buffer_size); buffer_layout->addWidget(audio_buffer_size_label); playback_layout->addLayout(buffer_layout, 0, 0); @@ -235,6 +238,14 @@ void AudioPane::OnDspChanged() m_dolby_pro_logic->setEnabled(enabled); m_dolby_quality_label->setEnabled(enabled && m_dolby_pro_logic->isChecked()); m_dolby_quality_combo->setEnabled(enabled && m_dolby_pro_logic->isChecked()); + if (Config::Get(Config::MAIN_DSP_HLE)) + { + m_audio_buffer_size->setValue(std::min(80, m_audio_buffer_size->value())); + } + else + { + m_audio_buffer_size->setValue(std::max(120, m_audio_buffer_size->value())); + } } void AudioPane::OnBackendChanged() diff --git a/Source/Core/DolphinQt/Settings/AudioPane.h b/Source/Core/DolphinQt/Settings/AudioPane.h index 40c8c4edb1..0fb0c56a0e 100644 --- a/Source/Core/DolphinQt/Settings/AudioPane.h +++ b/Source/Core/DolphinQt/Settings/AudioPane.h @@ -64,6 +64,8 @@ private: ConfigStringChoice* m_wasapi_device_combo; #endif + ConfigSlider* m_audio_buffer_size; + // Misc Settings ConfigBool* m_audio_fill_gaps; ConfigBool* m_speed_up_mute_enable;