IOS/USB: Implement a bare-bones Wii Speak loudness level

Add a volume modifier to the UI which relies on gain.
This commit is contained in:
Sepalani
2024-10-02 13:53:02 +04:00
parent 1f0ff42aa0
commit 74a875e9d6
6 changed files with 238 additions and 8 deletions

View File

@ -3,8 +3,11 @@
#include "DolphinQt/EmulatedUSB/WiiSpeakWindow.h"
#include <algorithm>
#include <QCheckBox>
#include <QComboBox>
#include <QGridLayout>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QLabel>
@ -60,8 +63,34 @@ void WiiSpeakWindow::CreateMainWindow()
auto checkbox_mic_muted = new QCheckBox(tr("Mute"), this);
checkbox_mic_muted->setChecked(Config::Get(Config::MAIN_WII_SPEAK_MUTED));
connect(checkbox_mic_muted, &QCheckBox::toggled, this, &WiiSpeakWindow::SetWiiSpeakMuted);
checkbox_mic_muted->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
config_layout->addWidget(checkbox_mic_muted);
auto* volume_layout = new QGridLayout();
static constexpr int FILTER_MIN = -50;
static constexpr int FILTER_MAX = 50;
const int volume_modifier =
std::clamp<int>(Config::Get(Config::MAIN_WII_SPEAK_VOLUME_MODIFIER), FILTER_MIN, FILTER_MAX);
auto filter_slider = new QSlider(Qt::Horizontal, this);
auto slider_label = new QLabel(tr("Volume modifier (value: %1dB)").arg(volume_modifier));
connect(filter_slider, &QSlider::valueChanged, this, [slider_label](int value) {
Config::SetBaseOrCurrent(Config::MAIN_WII_SPEAK_VOLUME_MODIFIER, value);
slider_label->setText(tr("Volume modifier (value: %1dB)").arg(value));
});
filter_slider->setMinimum(FILTER_MIN);
filter_slider->setMaximum(FILTER_MAX);
filter_slider->setValue(volume_modifier);
filter_slider->setTickPosition(QSlider::TicksBothSides);
filter_slider->setTickInterval(10);
filter_slider->setSingleStep(1);
volume_layout->addWidget(new QLabel(QStringLiteral("%1dB").arg(FILTER_MIN)), 0, 0, Qt::AlignLeft);
volume_layout->addWidget(slider_label, 0, 1, Qt::AlignCenter);
volume_layout->addWidget(new QLabel(QStringLiteral("%1dB").arg(FILTER_MAX)), 0, 2,
Qt::AlignRight);
volume_layout->addWidget(filter_slider, 1, 0, 1, 3);
config_layout->addLayout(volume_layout);
config_layout->setStretch(1, 3);
m_combobox_microphones = new QComboBox();
#ifndef HAVE_CUBEB
m_combobox_microphones->addItem(QLatin1String("(%1)").arg(tr("Audio backend unsupported")),