diff options
| author | 2017-01-26 04:33:26 +0100 | |
|---|---|---|
| committer | 2017-01-25 22:33:26 -0500 | |
| commit | f8523699864b6000572affaa0e36d9a4d89ffce6 (patch) | |
| tree | 952a96e11d4efe860272ea7a47ebbee896fb5d61 /src/citra_qt | |
| parent | Merge pull request #2434 from mailwl/nfc-amiibo (diff) | |
| download | yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar.gz yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar.xz yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.zip | |
SDL: Select audio device (#2403)
* Initial Commit
Added Device logic to Sinks
Started on UI for selecting devices
Removed redundant import
* Audio Core: Complete Device Switching
Complete the device switching implementation by allowing the output
device to be loaded, changed and saved through the configurations menu.
Worked with the Sink abstraction and tuned the "Device Selection"
configuration so that the Device List is automatically populated when
the Sink is changed.
This hopefully addresses the concerns and recommendations mentioned in
the comments of the PR.
* Clean original implementation.
* Refactor GetSinkDetails
Diffstat (limited to 'src/citra_qt')
| -rw-r--r-- | src/citra_qt/config.cpp | 3 | ||||
| -rw-r--r-- | src/citra_qt/configure_audio.cpp | 33 | ||||
| -rw-r--r-- | src/citra_qt/configure_audio.h | 3 | ||||
| -rw-r--r-- | src/citra_qt/configure_audio.ui | 15 |
4 files changed, 54 insertions, 0 deletions
diff --git a/src/citra_qt/config.cpp b/src/citra_qt/config.cpp index 8021667d0..f776e16b2 100644 --- a/src/citra_qt/config.cpp +++ b/src/citra_qt/config.cpp | |||
| @@ -63,6 +63,8 @@ void Config::ReadValues() { | |||
| 63 | Settings::values.sink_id = qt_config->value("output_engine", "auto").toString().toStdString(); | 63 | Settings::values.sink_id = qt_config->value("output_engine", "auto").toString().toStdString(); |
| 64 | Settings::values.enable_audio_stretching = | 64 | Settings::values.enable_audio_stretching = |
| 65 | qt_config->value("enable_audio_stretching", true).toBool(); | 65 | qt_config->value("enable_audio_stretching", true).toBool(); |
| 66 | Settings::values.audio_device_id = | ||
| 67 | qt_config->value("output_device", "auto").toString().toStdString(); | ||
| 66 | qt_config->endGroup(); | 68 | qt_config->endGroup(); |
| 67 | 69 | ||
| 68 | qt_config->beginGroup("Data Storage"); | 70 | qt_config->beginGroup("Data Storage"); |
| @@ -169,6 +171,7 @@ void Config::SaveValues() { | |||
| 169 | qt_config->beginGroup("Audio"); | 171 | qt_config->beginGroup("Audio"); |
| 170 | qt_config->setValue("output_engine", QString::fromStdString(Settings::values.sink_id)); | 172 | qt_config->setValue("output_engine", QString::fromStdString(Settings::values.sink_id)); |
| 171 | qt_config->setValue("enable_audio_stretching", Settings::values.enable_audio_stretching); | 173 | qt_config->setValue("enable_audio_stretching", Settings::values.enable_audio_stretching); |
| 174 | qt_config->setValue("output_device", QString::fromStdString(Settings::values.audio_device_id)); | ||
| 172 | qt_config->endGroup(); | 175 | qt_config->endGroup(); |
| 173 | 176 | ||
| 174 | qt_config->beginGroup("Data Storage"); | 177 | qt_config->beginGroup("Data Storage"); |
diff --git a/src/citra_qt/configure_audio.cpp b/src/citra_qt/configure_audio.cpp index 3cdd4c780..3ddcf9232 100644 --- a/src/citra_qt/configure_audio.cpp +++ b/src/citra_qt/configure_audio.cpp | |||
| @@ -2,6 +2,9 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <memory> | ||
| 6 | #include "audio_core/audio_core.h" | ||
| 7 | #include "audio_core/sink.h" | ||
| 5 | #include "audio_core/sink_details.h" | 8 | #include "audio_core/sink_details.h" |
| 6 | #include "citra_qt/configure_audio.h" | 9 | #include "citra_qt/configure_audio.h" |
| 7 | #include "core/settings.h" | 10 | #include "core/settings.h" |
| @@ -18,6 +21,8 @@ ConfigureAudio::ConfigureAudio(QWidget* parent) | |||
| 18 | } | 21 | } |
| 19 | 22 | ||
| 20 | this->setConfiguration(); | 23 | this->setConfiguration(); |
| 24 | connect(ui->output_sink_combo_box, SIGNAL(currentIndexChanged(int)), this, | ||
| 25 | SLOT(updateAudioDevices(int))); | ||
| 21 | } | 26 | } |
| 22 | 27 | ||
| 23 | ConfigureAudio::~ConfigureAudio() {} | 28 | ConfigureAudio::~ConfigureAudio() {} |
| @@ -33,6 +38,19 @@ void ConfigureAudio::setConfiguration() { | |||
| 33 | ui->output_sink_combo_box->setCurrentIndex(new_sink_index); | 38 | ui->output_sink_combo_box->setCurrentIndex(new_sink_index); |
| 34 | 39 | ||
| 35 | ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching); | 40 | ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching); |
| 41 | |||
| 42 | // The device list cannot be pre-populated (nor listed) until the output sink is known. | ||
| 43 | updateAudioDevices(new_sink_index); | ||
| 44 | |||
| 45 | int new_device_index = -1; | ||
| 46 | for (int index = 0; index < ui->audio_device_combo_box->count(); index++) { | ||
| 47 | if (ui->audio_device_combo_box->itemText(index).toStdString() == | ||
| 48 | Settings::values.audio_device_id) { | ||
| 49 | new_device_index = index; | ||
| 50 | break; | ||
| 51 | } | ||
| 52 | } | ||
| 53 | ui->audio_device_combo_box->setCurrentIndex(new_device_index); | ||
| 36 | } | 54 | } |
| 37 | 55 | ||
| 38 | void ConfigureAudio::applyConfiguration() { | 56 | void ConfigureAudio::applyConfiguration() { |
| @@ -40,5 +58,20 @@ void ConfigureAudio::applyConfiguration() { | |||
| 40 | ui->output_sink_combo_box->itemText(ui->output_sink_combo_box->currentIndex()) | 58 | ui->output_sink_combo_box->itemText(ui->output_sink_combo_box->currentIndex()) |
| 41 | .toStdString(); | 59 | .toStdString(); |
| 42 | Settings::values.enable_audio_stretching = ui->toggle_audio_stretching->isChecked(); | 60 | Settings::values.enable_audio_stretching = ui->toggle_audio_stretching->isChecked(); |
| 61 | Settings::values.audio_device_id = | ||
| 62 | ui->audio_device_combo_box->itemText(ui->audio_device_combo_box->currentIndex()) | ||
| 63 | .toStdString(); | ||
| 43 | Settings::Apply(); | 64 | Settings::Apply(); |
| 44 | } | 65 | } |
| 66 | |||
| 67 | void ConfigureAudio::updateAudioDevices(int sink_index) { | ||
| 68 | ui->audio_device_combo_box->clear(); | ||
| 69 | ui->audio_device_combo_box->addItem("auto"); | ||
| 70 | |||
| 71 | std::string sink_id = ui->output_sink_combo_box->itemText(sink_index).toStdString(); | ||
| 72 | std::vector<std::string> device_list = | ||
| 73 | AudioCore::GetSinkDetails(sink_id).factory()->GetDeviceList(); | ||
| 74 | for (const auto& device : device_list) { | ||
| 75 | ui->audio_device_combo_box->addItem(device.c_str()); | ||
| 76 | } | ||
| 77 | } | ||
diff --git a/src/citra_qt/configure_audio.h b/src/citra_qt/configure_audio.h index 51df2e27b..8190e694f 100644 --- a/src/citra_qt/configure_audio.h +++ b/src/citra_qt/configure_audio.h | |||
| @@ -20,6 +20,9 @@ public: | |||
| 20 | 20 | ||
| 21 | void applyConfiguration(); | 21 | void applyConfiguration(); |
| 22 | 22 | ||
| 23 | public slots: | ||
| 24 | void updateAudioDevices(int sink_index); | ||
| 25 | |||
| 23 | private: | 26 | private: |
| 24 | void setConfiguration(); | 27 | void setConfiguration(); |
| 25 | 28 | ||
diff --git a/src/citra_qt/configure_audio.ui b/src/citra_qt/configure_audio.ui index 3e2b4635f..dd870eb61 100644 --- a/src/citra_qt/configure_audio.ui +++ b/src/citra_qt/configure_audio.ui | |||
| @@ -35,6 +35,21 @@ | |||
| 35 | </property> | 35 | </property> |
| 36 | </widget> | 36 | </widget> |
| 37 | </item> | 37 | </item> |
| 38 | <item> | ||
| 39 | <layout class="QHBoxLayout"> | ||
| 40 | <item> | ||
| 41 | <widget class="QLabel"> | ||
| 42 | <property name="text"> | ||
| 43 | <string>Audio Device:</string> | ||
| 44 | </property> | ||
| 45 | </widget> | ||
| 46 | </item> | ||
| 47 | <item> | ||
| 48 | <widget class="QComboBox" name="audio_device_combo_box"> | ||
| 49 | </widget> | ||
| 50 | </item> | ||
| 51 | </layout> | ||
| 52 | </item> | ||
| 38 | </layout> | 53 | </layout> |
| 39 | </widget> | 54 | </widget> |
| 40 | </item> | 55 | </item> |