From 52d6265b5840b0d36e65040ac33b1d6476b4b8b9 Mon Sep 17 00:00:00 2001 From: falsidge Date: Tue, 27 Jun 2023 12:31:41 -0700 Subject: [PATCH] Add microphone combobox using SDL (#1709) --- src/frontend/qt_sdl/AudioInOut.cpp | 7 ++++++- src/frontend/qt_sdl/AudioSettingsDialog.cpp | 19 +++++++++++++++++++ src/frontend/qt_sdl/AudioSettingsDialog.ui | 9 ++++++++- src/frontend/qt_sdl/Config.cpp | 2 ++ src/frontend/qt_sdl/Config.h | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/frontend/qt_sdl/AudioInOut.cpp b/src/frontend/qt_sdl/AudioInOut.cpp index e63db1a8..395dcf80 100644 --- a/src/frontend/qt_sdl/AudioInOut.cpp +++ b/src/frontend/qt_sdl/AudioInOut.cpp @@ -133,7 +133,12 @@ void MicOpen() whatIwant.channels = 1; whatIwant.samples = 1024; whatIwant.callback = MicCallback; - micDevice = SDL_OpenAudioDevice(NULL, 1, &whatIwant, &whatIget, 0); + const char* mic = NULL; + if (Config::MicDevice != "") + { + mic = Config::MicDevice.c_str(); + } + micDevice = SDL_OpenAudioDevice(mic, 1, &whatIwant, &whatIget, 0); if (!micDevice) { Platform::Log(Platform::LogLevel::Error, "Mic init failed: %s\n", SDL_GetError()); diff --git a/src/frontend/qt_sdl/AudioSettingsDialog.cpp b/src/frontend/qt_sdl/AudioSettingsDialog.cpp index 0a6002c7..ef1f5717 100644 --- a/src/frontend/qt_sdl/AudioSettingsDialog.cpp +++ b/src/frontend/qt_sdl/AudioSettingsDialog.cpp @@ -17,6 +17,7 @@ */ #include +#include #include #include "types.h" @@ -70,7 +71,21 @@ AudioSettingsDialog::AudioSettingsDialog(QWidget* parent, bool emuActive) : QDia { ui->chkSyncDSiVolume->setEnabled(false); } + bool isext = (Config::MicInputType == 1); + ui->cbMic->setEnabled(isext); + const int count = SDL_GetNumAudioDevices(true); + for (int i = 0; i < count; i++) + { + ui->cbMic->addItem(SDL_GetAudioDeviceName(i, true)); + } + if (Config::MicDevice == "" && count > 0) + { + Config::MicDevice = SDL_GetAudioDeviceName(0, true); + } + + ui->cbMic->setCurrentText(QString::fromStdString(Config::MicDevice)); + grpMicMode = new QButtonGroup(this); grpMicMode->addButton(ui->rbMicNone, micInputType_Silence); grpMicMode->addButton(ui->rbMicExternal, micInputType_External); @@ -95,6 +110,7 @@ AudioSettingsDialog::AudioSettingsDialog(QWidget* parent, bool emuActive) : QDia btn->setEnabled(false); ui->txtMicWavPath->setEnabled(false); ui->btnMicWavBrowse->setEnabled(false); + ui->cbMic->setEnabled(false); } else ui->lblInstanceNum->hide(); @@ -123,6 +139,7 @@ void AudioSettingsDialog::onConsoleReset() void AudioSettingsDialog::on_AudioSettingsDialog_accepted() { + Config::MicDevice = ui->cbMic->currentText().toStdString(); Config::MicInputType = grpMicMode->checkedId(); Config::MicWavPath = ui->txtMicWavPath->text().toStdString(); Config::Save(); @@ -197,8 +214,10 @@ void AudioSettingsDialog::on_chkSyncDSiVolume_clicked(bool checked) void AudioSettingsDialog::onChangeMicMode(int mode) { bool iswav = (mode == 3); + bool isext = (mode == 1); ui->txtMicWavPath->setEnabled(iswav); ui->btnMicWavBrowse->setEnabled(iswav); + ui->cbMic->setEnabled(isext); } void AudioSettingsDialog::on_btnMicWavBrowse_clicked() diff --git a/src/frontend/qt_sdl/AudioSettingsDialog.ui b/src/frontend/qt_sdl/AudioSettingsDialog.ui index e57ce8c7..380197ec 100644 --- a/src/frontend/qt_sdl/AudioSettingsDialog.ui +++ b/src/frontend/qt_sdl/AudioSettingsDialog.ui @@ -136,7 +136,7 @@ - + <html><head/><body><p>Input from an external microphone, if available, will be forwarded to the emulated microphone.</p></body></html> @@ -146,6 +146,13 @@ + + + + <html><head/><body><p>The selected microphone to be used.</p></body></html> + + + diff --git a/src/frontend/qt_sdl/Config.cpp b/src/frontend/qt_sdl/Config.cpp index 217d0d72..a32e172a 100644 --- a/src/frontend/qt_sdl/Config.cpp +++ b/src/frontend/qt_sdl/Config.cpp @@ -120,6 +120,7 @@ int AudioBitDepth; int AudioVolume; bool DSiVolumeSync; int MicInputType; +std::string MicDevice; std::string MicWavPath; std::string LastROMFolder; @@ -300,6 +301,7 @@ ConfigEntry ConfigFile[] = {"AudioVolume", 0, &AudioVolume, 256, true}, {"DSiVolumeSync", 0, &DSiVolumeSync, 0, true}, {"MicInputType", 0, &MicInputType, 1, false}, + {"MicDevice", 2, &MicDevice, (std::string)"", false}, {"MicWavPath", 2, &MicWavPath, (std::string)"", false}, {"LastROMFolder", 2, &LastROMFolder, (std::string)"", true}, diff --git a/src/frontend/qt_sdl/Config.h b/src/frontend/qt_sdl/Config.h index ba8d3453..c6fd297f 100644 --- a/src/frontend/qt_sdl/Config.h +++ b/src/frontend/qt_sdl/Config.h @@ -177,6 +177,7 @@ extern int AudioBitDepth; extern int AudioVolume; extern bool DSiVolumeSync; extern int MicInputType; +extern std::string MicDevice; extern std::string MicWavPath; extern std::string LastROMFolder;