Configuration: add option to use DSP LLE

This commit is contained in:
Weiyi Wang 2018-12-06 11:13:13 -05:00
parent 483680a124
commit 21da135cc6
8 changed files with 43 additions and 2 deletions

View file

@ -155,6 +155,7 @@ void Config::ReadValues() {
static_cast<u16>(sdl2_config->GetInteger("Layout", "custom_bottom_bottom", 480)); static_cast<u16>(sdl2_config->GetInteger("Layout", "custom_bottom_bottom", 480));
// Audio // Audio
Settings::values.enable_dsp_lle = sdl2_config->GetBoolean("Audio", "enable_dsp_lle", false);
Settings::values.sink_id = sdl2_config->GetString("Audio", "output_engine", "auto"); Settings::values.sink_id = sdl2_config->GetString("Audio", "output_engine", "auto");
Settings::values.enable_audio_stretching = Settings::values.enable_audio_stretching =
sdl2_config->GetBoolean("Audio", "enable_audio_stretching", true); sdl2_config->GetBoolean("Audio", "enable_audio_stretching", true);

View file

@ -167,6 +167,11 @@ custom_bottom_bottom =
swap_screen = swap_screen =
[Audio] [Audio]
# Whether or not to enable DSP LLE
# 0 (default): No, 1: Yes
enable_dsp_lle =
# Which audio output engine to use. # Which audio output engine to use.
# auto (default): Auto-select, null: No audio output, sdl2: SDL2 (if available) # auto (default): Auto-select, null: No audio output, sdl2: SDL2 (if available)
output_engine = output_engine =

View file

@ -136,6 +136,7 @@ void Config::ReadValues() {
qt_config->endGroup(); qt_config->endGroup();
qt_config->beginGroup("Audio"); qt_config->beginGroup("Audio");
Settings::values.enable_dsp_lle = ReadSetting("enable_dsp_lle", false).toBool();
Settings::values.sink_id = ReadSetting("output_engine", "auto").toString().toStdString(); Settings::values.sink_id = ReadSetting("output_engine", "auto").toString().toStdString();
Settings::values.enable_audio_stretching = Settings::values.enable_audio_stretching =
ReadSetting("enable_audio_stretching", true).toBool(); ReadSetting("enable_audio_stretching", true).toBool();
@ -415,6 +416,7 @@ void Config::SaveValues() {
qt_config->endGroup(); qt_config->endGroup();
qt_config->beginGroup("Audio"); qt_config->beginGroup("Audio");
WriteSetting("enable_dsp_lle", Settings::values.enable_dsp_lle, false);
WriteSetting("output_engine", QString::fromStdString(Settings::values.sink_id), "auto"); WriteSetting("output_engine", QString::fromStdString(Settings::values.sink_id), "auto");
WriteSetting("enable_audio_stretching", Settings::values.enable_audio_stretching, true); WriteSetting("enable_audio_stretching", Settings::values.enable_audio_stretching, true);
WriteSetting("output_device", QString::fromStdString(Settings::values.audio_device_id), "auto"); WriteSetting("output_device", QString::fromStdString(Settings::values.audio_device_id), "auto");

View file

@ -6,6 +6,7 @@
#include "audio_core/sink.h" #include "audio_core/sink.h"
#include "audio_core/sink_details.h" #include "audio_core/sink_details.h"
#include "citra_qt/configuration/configure_audio.h" #include "citra_qt/configuration/configure_audio.h"
#include "core/core.h"
#include "core/settings.h" #include "core/settings.h"
#include "ui_configure_audio.h" #include "ui_configure_audio.h"
@ -19,6 +20,10 @@ ConfigureAudio::ConfigureAudio(QWidget* parent)
ui->output_sink_combo_box->addItem(sink_detail.id); ui->output_sink_combo_box->addItem(sink_detail.id);
} }
ui->emulation_combo_box->addItem(tr("HLE (fast)"));
ui->emulation_combo_box->addItem(tr("LLE (accurate)"));
ui->emulation_combo_box->setEnabled(!Core::System::GetInstance().IsPoweredOn());
connect(ui->volume_slider, &QSlider::valueChanged, this, connect(ui->volume_slider, &QSlider::valueChanged, this,
&ConfigureAudio::setVolumeIndicatorText); &ConfigureAudio::setVolumeIndicatorText);
@ -41,6 +46,8 @@ void ConfigureAudio::setConfiguration() {
ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching); ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching);
ui->volume_slider->setValue(Settings::values.volume * ui->volume_slider->maximum()); ui->volume_slider->setValue(Settings::values.volume * ui->volume_slider->maximum());
setVolumeIndicatorText(ui->volume_slider->sliderPosition()); setVolumeIndicatorText(ui->volume_slider->sliderPosition());
ui->emulation_combo_box->setCurrentIndex(Settings::values.enable_dsp_lle ? 1 : 0);
} }
void ConfigureAudio::setOutputSinkFromSinkID() { void ConfigureAudio::setOutputSinkFromSinkID() {
@ -85,6 +92,7 @@ void ConfigureAudio::applyConfiguration() {
.toStdString(); .toStdString();
Settings::values.volume = Settings::values.volume =
static_cast<float>(ui->volume_slider->sliderPosition()) / ui->volume_slider->maximum(); static_cast<float>(ui->volume_slider->sliderPosition()) / ui->volume_slider->maximum();
Settings::values.enable_dsp_lle = ui->emulation_combo_box->currentIndex() == 1;
} }
void ConfigureAudio::updateAudioDevices(int sink_index) { void ConfigureAudio::updateAudioDevices(int sink_index) {

View file

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>188</width> <width>240</width>
<height>246</height> <height>246</height>
</rect> </rect>
</property> </property>
@ -17,6 +17,23 @@
<string>Audio</string> <string>Audio</string>
</property> </property>
<layout class="QVBoxLayout"> <layout class="QVBoxLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_emulation">
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_emulation">
<property name="text">
<string>Emulation:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="emulation_combo_box"/>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout"> <layout class="QHBoxLayout">
<item> <item>

View file

@ -6,6 +6,7 @@
#include <utility> #include <utility>
#include "audio_core/dsp_interface.h" #include "audio_core/dsp_interface.h"
#include "audio_core/hle/hle.h" #include "audio_core/hle/hle.h"
#include "audio_core/lle/lle.h"
#include "common/logging/log.h" #include "common/logging/log.h"
#include "core/arm/arm_interface.h" #include "core/arm/arm_interface.h"
#ifdef ARCHITECTURE_x86_64 #ifdef ARCHITECTURE_x86_64
@ -188,7 +189,12 @@ System::ResultStatus System::Init(EmuWindow& emu_window, u32 system_mode) {
cpu_core = std::make_unique<ARM_DynCom>(*this, USER32MODE); cpu_core = std::make_unique<ARM_DynCom>(*this, USER32MODE);
} }
dsp_core = std::make_unique<AudioCore::DspHle>(*memory); if (Settings::values.enable_dsp_lle) {
dsp_core = std::make_unique<AudioCore::DspLle>();
} else {
dsp_core = std::make_unique<AudioCore::DspHle>(*memory);
}
dsp_core->SetSink(Settings::values.sink_id, Settings::values.audio_device_id); dsp_core->SetSink(Settings::values.sink_id, Settings::values.audio_device_id);
dsp_core->EnableStretching(Settings::values.enable_audio_stretching); dsp_core->EnableStretching(Settings::values.enable_audio_stretching);

View file

@ -79,6 +79,7 @@ void LogSettings() {
LogSetting("Layout_Factor3d", Settings::values.factor_3d); LogSetting("Layout_Factor3d", Settings::values.factor_3d);
LogSetting("Layout_LayoutOption", static_cast<int>(Settings::values.layout_option)); LogSetting("Layout_LayoutOption", static_cast<int>(Settings::values.layout_option));
LogSetting("Layout_SwapScreen", Settings::values.swap_screen); LogSetting("Layout_SwapScreen", Settings::values.swap_screen);
LogSetting("Audio_EnableDspLle", Settings::values.enable_dsp_lle);
LogSetting("Audio_OutputEngine", Settings::values.sink_id); LogSetting("Audio_OutputEngine", Settings::values.sink_id);
LogSetting("Audio_EnableAudioStretching", Settings::values.enable_audio_stretching); LogSetting("Audio_EnableAudioStretching", Settings::values.enable_audio_stretching);
LogSetting("Audio_OutputDevice", Settings::values.audio_device_id); LogSetting("Audio_OutputDevice", Settings::values.audio_device_id);

View file

@ -147,6 +147,7 @@ struct Values {
u8 factor_3d; u8 factor_3d;
// Audio // Audio
bool enable_dsp_lle;
std::string sink_id; std::string sink_id;
bool enable_audio_stretching; bool enable_audio_stretching;
std::string audio_device_id; std::string audio_device_id;