diff --git a/Source/Core/AudioCommon/CubebStream.cpp b/Source/Core/AudioCommon/CubebStream.cpp index da515aa8f3..768ea38467 100644 --- a/Source/Core/AudioCommon/CubebStream.cpp +++ b/Source/Core/AudioCommon/CubebStream.cpp @@ -37,7 +37,7 @@ bool CubebStream::Init() if (!m_ctx) return false; - m_stereo = !SConfig::GetInstance().bDPL2Decoder; + m_stereo = !SConfig::GetInstance().bDPL2Decoder || SConfig::GetInstance().bDSPHLE; cubeb_stream_params params; params.rate = m_mixer->GetSampleRate(); diff --git a/Source/Core/AudioCommon/Enums.h b/Source/Core/AudioCommon/Enums.h index 20c34779a5..ec979ff941 100644 --- a/Source/Core/AudioCommon/Enums.h +++ b/Source/Core/AudioCommon/Enums.h @@ -8,8 +8,8 @@ namespace AudioCommon { enum class DPL2Quality { - Low = 0, - Medium = 1, + Lowest = 0, + Low = 1, High = 2, Highest = 3 }; diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp index 1636c29018..e414538613 100644 --- a/Source/Core/AudioCommon/Mixer.cpp +++ b/Source/Core/AudioCommon/Mixer.cpp @@ -20,9 +20,9 @@ static u32 DPL2QualityToFrameBlockSize(AudioCommon::DPL2Quality quality) { switch (quality) { - case AudioCommon::DPL2Quality::Low: + case AudioCommon::DPL2Quality::Lowest: return 512; - case AudioCommon::DPL2Quality::Medium: + case AudioCommon::DPL2Quality::Low: return 1024; case AudioCommon::DPL2Quality::Highest: return 4096; diff --git a/Source/Core/AudioCommon/OpenALStream.cpp b/Source/Core/AudioCommon/OpenALStream.cpp index 4852495d23..51530088b2 100644 --- a/Source/Core/AudioCommon/OpenALStream.cpp +++ b/Source/Core/AudioCommon/OpenALStream.cpp @@ -221,7 +221,8 @@ void OpenALStream::SoundLoop() bool float32_capable = palIsExtensionPresent("AL_EXT_float32") != 0; bool surround_capable = palIsExtensionPresent("AL_EXT_MCFORMATS") || IsCreativeXFi(); - bool use_surround = SConfig::GetInstance().bDPL2Decoder && surround_capable; + bool use_surround = + SConfig::GetInstance().bDPL2Decoder && surround_capable && !SConfig::GetInstance().bDSPHLE; // As there is no extension to check for 32-bit fixed point support // and we know that only a X-Fi with hardware OpenAL supports it, diff --git a/Source/Core/AudioCommon/PulseAudioStream.cpp b/Source/Core/AudioCommon/PulseAudioStream.cpp index e480ed9e6e..3d05cc610b 100644 --- a/Source/Core/AudioCommon/PulseAudioStream.cpp +++ b/Source/Core/AudioCommon/PulseAudioStream.cpp @@ -19,7 +19,7 @@ PulseAudio::PulseAudio() = default; bool PulseAudio::Init() { - m_stereo = !SConfig::GetInstance().bDPL2Decoder; + m_stereo = !SConfig::GetInstance().bDPL2Decoder || SConfig::GetInstance().bDSPHLE; m_channels = m_stereo ? 2 : 6; // will tell PA we use a Stereo or 5.0 channel setup NOTICE_LOG(AUDIO, "PulseAudio backend using %d channels", m_channels); diff --git a/Source/Core/DolphinQt/Settings/AudioPane.cpp b/Source/Core/DolphinQt/Settings/AudioPane.cpp index 8d55b22f63..fa9799022d 100644 --- a/Source/Core/DolphinQt/Settings/AudioPane.cpp +++ b/Source/Core/DolphinQt/Settings/AudioPane.cpp @@ -105,7 +105,7 @@ void AudioPane::CreateWidgets() tr("Quality of the DPLII decoder. Audio latency increases with quality.")); m_dolby_quality_slider->setTracking(true); - m_dolby_quality_low_label = new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Low)); + m_dolby_quality_low_label = new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Lowest)); m_dolby_quality_highest_label = new QLabel(GetDPL2QualityLabel(AudioCommon::DPL2Quality::Highest)); m_dolby_quality_latency_label = @@ -265,6 +265,11 @@ void AudioPane::SaveSettings() auto& settings = Settings::Instance(); // DSP + if (SConfig::GetInstance().bDSPHLE != m_dsp_hle->isChecked() || + SConfig::GetInstance().m_DSPEnableJIT != m_dsp_lle->isChecked()) + { + OnDspChanged(); + } SConfig::GetInstance().bDSPHLE = m_dsp_hle->isChecked(); Config::SetBaseOrCurrent(Config::MAIN_DSP_HLE, m_dsp_hle->isChecked()); SConfig::GetInstance().m_DSPEnableJIT = m_dsp_lle->isChecked(); @@ -294,7 +299,7 @@ void AudioPane::SaveSettings() static_cast(m_dolby_quality_slider->value())); m_dolby_quality_latency_label->setText( GetDPL2ApproximateLatencyLabel(Config::Get(Config::MAIN_DPL2_QUALITY))); - if (AudioCommon::SupportsDPL2Decoder(backend)) + if (AudioCommon::SupportsDPL2Decoder(backend) && !m_dsp_hle->isChecked()) { EnableDolbyQualityWidgets(m_dolby_pro_logic->isChecked()); } @@ -324,12 +329,22 @@ void AudioPane::SaveSettings() AudioCommon::UpdateSoundStream(); } +void AudioPane::OnDspChanged() +{ + const auto backend = SConfig::GetInstance().sBackend; + + m_dolby_pro_logic->setEnabled(AudioCommon::SupportsDPL2Decoder(backend) && + !m_dsp_hle->isChecked()); + EnableDolbyQualityWidgets(AudioCommon::SupportsDPL2Decoder(backend) && !m_dsp_hle->isChecked()); +} + void AudioPane::OnBackendChanged() { const auto backend = SConfig::GetInstance().sBackend; - m_dolby_pro_logic->setEnabled(AudioCommon::SupportsDPL2Decoder(backend)); - EnableDolbyQualityWidgets(AudioCommon::SupportsDPL2Decoder(backend)); + m_dolby_pro_logic->setEnabled(AudioCommon::SupportsDPL2Decoder(backend) && + !m_dsp_hle->isChecked()); + EnableDolbyQualityWidgets(AudioCommon::SupportsDPL2Decoder(backend) && !m_dsp_hle->isChecked()); if (m_latency_control_supported) { m_latency_label->setEnabled(AudioCommon::SupportsLatencyControl(backend)); @@ -362,7 +377,7 @@ void AudioPane::OnEmulationStateChanged(bool running) m_dsp_interpreter->setEnabled(!running); m_backend_label->setEnabled(!running); m_backend_combo->setEnabled(!running); - if (AudioCommon::SupportsDPL2Decoder(SConfig::GetInstance().sBackend)) + if (AudioCommon::SupportsDPL2Decoder(SConfig::GetInstance().sBackend) && !m_dsp_hle->isChecked()) { m_dolby_pro_logic->setEnabled(!running); EnableDolbyQualityWidgets(!running); @@ -395,10 +410,10 @@ QString AudioPane::GetDPL2QualityLabel(AudioCommon::DPL2Quality value) const { switch (value) { + case AudioCommon::DPL2Quality::Lowest: + return tr("Lowest"); case AudioCommon::DPL2Quality::Low: return tr("Low"); - case AudioCommon::DPL2Quality::Medium: - return tr("Medium"); case AudioCommon::DPL2Quality::Highest: return tr("Highest"); default: @@ -410,9 +425,9 @@ QString AudioPane::GetDPL2ApproximateLatencyLabel(AudioCommon::DPL2Quality value { switch (value) { - case AudioCommon::DPL2Quality::Low: + case AudioCommon::DPL2Quality::Lowest: return tr("Latency: ~10ms"); - case AudioCommon::DPL2Quality::Medium: + case AudioCommon::DPL2Quality::Low: return tr("Latency: ~20ms"); case AudioCommon::DPL2Quality::Highest: return tr("Latency: ~80ms"); diff --git a/Source/Core/DolphinQt/Settings/AudioPane.h b/Source/Core/DolphinQt/Settings/AudioPane.h index 398f994481..3348e5e908 100644 --- a/Source/Core/DolphinQt/Settings/AudioPane.h +++ b/Source/Core/DolphinQt/Settings/AudioPane.h @@ -35,6 +35,7 @@ private: void OnEmulationStateChanged(bool running); void OnBackendChanged(); + void OnDspChanged(); void OnVolumeChanged(int volume); void CheckNeedForLatencyControl();