Add setting for setting reply gain fallback gain

This commit is contained in:
Jonas Kvinge 2021-04-22 21:55:26 +02:00
parent 48f8468e65
commit 9d3000498b
8 changed files with 75 additions and 19 deletions

View File

@ -46,7 +46,8 @@ Engine::Base::Base()
device_(QVariant()),
rg_enabled_(false),
rg_mode_(0),
rg_preamp_(0),
rg_preamp_(0.0),
rg_fallbackgain_(0.0),
rg_compression_(true),
buffer_duration_nanosec_(BackendSettingsPage::kDefaultBufferDuration * kNsecPerMsec),
buffer_low_watermark_(BackendSettingsPage::kDefaultBufferLowWatermark),
@ -115,7 +116,8 @@ void Engine::Base::ReloadSettings() {
rg_enabled_ = s.value("rgenabled", false).toBool();
rg_mode_ = s.value("rgmode", 0).toInt();
rg_preamp_ = s.value("rgpreamp", 0.0).toFloat();
rg_preamp_ = s.value("rgpreamp", 0.0).toDouble();
rg_fallbackgain_ = s.value("rgfallbackgain", 0.0).toDouble();
rg_compression_ = s.value("rgcompression", true).toBool();
fadeout_enabled_ = s.value("FadeoutEnabled", false).toBool();

View File

@ -180,7 +180,8 @@ class Base : public QObject {
// ReplayGain
bool rg_enabled_;
int rg_mode_;
float rg_preamp_;
double rg_preamp_;
double rg_fallbackgain_;
bool rg_compression_;
// Buffering

View File

@ -812,7 +812,7 @@ std::shared_ptr<GstEnginePipeline> GstEngine::CreatePipeline() {
ret->set_volume_enabled(volume_control_);
ret->set_stereo_balancer_enabled(stereo_balancer_enabled_);
ret->set_equalizer_enabled(equalizer_enabled_);
ret->set_replaygain(rg_enabled_, rg_mode_, rg_preamp_, rg_compression_);
ret->set_replaygain(rg_enabled_, rg_mode_, rg_preamp_, rg_fallbackgain_, rg_compression_);
ret->set_buffer_duration_nanosec(buffer_duration_nanosec_);
ret->set_buffer_low_watermark(buffer_low_watermark_);
ret->set_buffer_high_watermark(buffer_high_watermark_);

View File

@ -79,6 +79,7 @@ GstEnginePipeline::GstEnginePipeline(GstEngine *engine)
eq_preamp_(0),
rg_mode_(0),
rg_preamp_(0.0),
rg_fallbackgain_(0.0),
rg_compression_(true),
buffer_duration_nanosec_(BackendSettingsPage::kDefaultBufferDuration * kNsecPerMsec),
buffer_low_watermark_(BackendSettingsPage::kDefaultBufferLowWatermark),
@ -176,11 +177,12 @@ void GstEnginePipeline::set_equalizer_enabled(const bool enabled) {
if (pipeline_) UpdateEqualizer();
}
void GstEnginePipeline::set_replaygain(const bool enabled, const int mode, const float preamp, const bool compression) {
void GstEnginePipeline::set_replaygain(const bool enabled, const int mode, const double preamp, const double fallbackgain, const bool compression) {
rg_enabled_ = enabled;
rg_mode_ = mode;
rg_preamp_ = preamp;
rg_fallbackgain_ = fallbackgain;
rg_compression_ = compression;
}
@ -376,7 +378,8 @@ bool GstEnginePipeline::InitAudioBin() {
eventprobe = rgconverter;
// Set replaygain settings
g_object_set(G_OBJECT(rgvolume), "album-mode", rg_mode_, nullptr);
g_object_set(G_OBJECT(rgvolume), "pre-amp", double(rg_preamp_), nullptr);
g_object_set(G_OBJECT(rgvolume), "pre-amp", rg_preamp_, nullptr);
g_object_set(G_OBJECT(rgvolume), "fallback-gain", rg_fallbackgain_, nullptr);
g_object_set(G_OBJECT(rglimiter), "enabled", int(rg_compression_), nullptr);
}
}

View File

@ -69,7 +69,7 @@ class GstEnginePipeline : public QObject {
void set_volume_enabled(const bool enabled);
void set_stereo_balancer_enabled(const bool enabled);
void set_equalizer_enabled(const bool enabled);
void set_replaygain(const bool enabled, const int mode, const float preamp, const bool compression);
void set_replaygain(const bool enabled, const int mode, const double preamp, const double fallbackgain, const bool compression);
void set_buffer_duration_nanosec(const qint64 duration_nanosec);
void set_buffer_low_watermark(const double value);
void set_buffer_high_watermark(const double value);
@ -205,7 +205,8 @@ class GstEnginePipeline : public QObject {
// ReplayGain
int rg_mode_;
float rg_preamp_;
double rg_preamp_;
double rg_fallbackgain_;
bool rg_compression_;
// Buffering

View File

@ -69,8 +69,10 @@ BackendSettingsPage::BackendSettingsPage(SettingsDialog *dialog) : SettingsPage(
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
ui_->label_replaygainpreamp->setMinimumWidth(QFontMetrics(ui_->label_replaygainpreamp->font()).horizontalAdvance("-WW.W dB"));
ui_->label_replaygainfallbackgain->setMinimumWidth(QFontMetrics(ui_->label_replaygainfallbackgain->font()).horizontalAdvance("-WW.W dB"));
#else
ui_->label_replaygainpreamp->setMinimumWidth(QFontMetrics(ui_->label_replaygainpreamp->font()).width("-WW.W dB"));
ui_->label_replaygainfallbackgain->setMinimumWidth(QFontMetrics(ui_->label_replaygainfallbackgain->font()).width("-WW.W dB"));
#endif
}
@ -116,8 +118,9 @@ void BackendSettingsPage::Load() {
ui_->checkbox_replaygain->setChecked(s.value("rgenabled", false).toBool());
ui_->combobox_replaygainmode->setCurrentIndex(s.value("rgmode", 0).toInt());
ui_->stickslider_replaygainpreamp->setValue(static_cast<int>(s.value("rgpreamp", 0.0).toDouble() * 10 + 150));
ui_->stickyslider_replaygainpreamp->setValue(static_cast<int>(s.value("rgpreamp", 0.0).toDouble() * 10 + 600));
ui_->checkbox_replaygaincompression->setChecked(s.value("rgcompression", true).toBool());
ui_->stickyslider_replaygainfallbackgain->setValue(static_cast<int>(s.value("rgfallbackgain", 0.0).toDouble() * 10 + 600));
#if defined(HAVE_ALSA)
bool fade_default = false;
@ -173,7 +176,8 @@ void BackendSettingsPage::Load() {
QObject::connect(ui_->radiobutton_alsa_hw, &QRadioButton::clicked, this, &BackendSettingsPage::radiobutton_alsa_hw_clicked);
QObject::connect(ui_->radiobutton_alsa_plughw, &QRadioButton::clicked, this, &BackendSettingsPage::radiobutton_alsa_plughw_clicked);
#endif
QObject::connect(ui_->stickslider_replaygainpreamp, &StickySlider::valueChanged, this, &BackendSettingsPage::RgPreampChanged);
QObject::connect(ui_->stickyslider_replaygainpreamp, &StickySlider::valueChanged, this, &BackendSettingsPage::RgPreampChanged);
QObject::connect(ui_->stickyslider_replaygainfallbackgain, &StickySlider::valueChanged, this, &BackendSettingsPage::RgFallbackGainChanged);
QObject::connect(ui_->checkbox_fadeout_stop, &QCheckBox::toggled, this, &BackendSettingsPage::FadingOptionsChanged);
QObject::connect(ui_->checkbox_fadeout_cross, &QCheckBox::toggled, this, &BackendSettingsPage::FadingOptionsChanged);
QObject::connect(ui_->checkbox_fadeout_auto, &QCheckBox::toggled, this, &BackendSettingsPage::FadingOptionsChanged);
@ -181,7 +185,8 @@ void BackendSettingsPage::Load() {
QObject::connect(ui_->button_buffer_defaults, &QPushButton::clicked, this, &BackendSettingsPage::BufferDefaults);
FadingOptionsChanged();
RgPreampChanged(ui_->stickslider_replaygainpreamp->value());
RgPreampChanged(ui_->stickyslider_replaygainpreamp->value());
RgFallbackGainChanged(ui_->stickyslider_replaygainfallbackgain->value());
Init(ui_->layout_backendsettingspage->parentWidget());
if (!QSettings().childGroups().contains(kSettingsGroup)) set_changed();
@ -422,7 +427,8 @@ void BackendSettingsPage::Save() {
s.setValue("rgenabled", ui_->checkbox_replaygain->isChecked());
s.setValue("rgmode", ui_->combobox_replaygainmode->currentIndex());
s.setValue("rgpreamp", float(ui_->stickslider_replaygainpreamp->value()) / 10 - 15);
s.setValue("rgpreamp", double(ui_->stickyslider_replaygainpreamp->value()) / 10 - 60);
s.setValue("rgfallbackgain", double(ui_->stickyslider_replaygainfallbackgain->value()) / 10 - 60);
s.setValue("rgcompression", ui_->checkbox_replaygaincompression->isChecked());
s.setValue("FadeoutEnabled", ui_->checkbox_fadeout_stop->isChecked());
@ -570,12 +576,20 @@ void BackendSettingsPage::DeviceStringChanged() {
void BackendSettingsPage::RgPreampChanged(const int value) {
float db = float(value) / 10 - 15;
double db = double(value) / 10 - 60;
QString db_str = QString::asprintf("%+.1f dB", db);
ui_->label_replaygainpreamp->setText(db_str);
}
void BackendSettingsPage::RgFallbackGainChanged(const int value) {
double db = double(value) / 10 - 60;
QString db_str = QString::asprintf("%+.1f dB", db);
ui_->label_replaygainfallbackgain->setText(db_str);
}
#ifdef HAVE_ALSA
void BackendSettingsPage::SwitchALSADevices(const alsa_plugin alsaplugin) {

View File

@ -61,6 +61,7 @@ public:
void DeviceSelectionChanged(const int index);
void DeviceStringChanged();
void RgPreampChanged(const int value);
void RgFallbackGainChanged(const int value);
void radiobutton_alsa_hw_clicked(const bool checked);
void radiobutton_alsa_plughw_clicked(const bool checked);
void FadingOptionsChanged();

View File

@ -440,30 +440,63 @@
<widget class="QLabel" name="label_replaygainpreamp"/>
</item>
<item>
<widget class="StickySlider" name="stickslider_replaygainpreamp">
<widget class="StickySlider" name="stickyslider_replaygainpreamp">
<property name="maximum">
<number>300</number>
<number>1200</number>
</property>
<property name="value">
<number>150</number>
<number>600</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sticky_center" stdset="0">
<number>150</number>
<number>600</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="checkbox_replaygaincompression">
<property name="text">
<string>Apply compression to prevent clipping</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="layout_replaygainfallbackgain">
<item>
<widget class="QLabel" name="label_replaygainfallbackgain"/>
</item>
<item>
<widget class="StickySlider" name="stickyslider_replaygainfallbackgain">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>1200</number>
</property>
<property name="value">
<number>600</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sticky_center" stdset="0">
<number>600</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_fallbackgain">
<property name="text">
<string>Fallback-gain</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@ -663,7 +696,8 @@
<tabstop>button_buffer_defaults</tabstop>
<tabstop>checkbox_replaygain</tabstop>
<tabstop>combobox_replaygainmode</tabstop>
<tabstop>stickslider_replaygainpreamp</tabstop>
<tabstop>stickyslider_replaygainpreamp</tabstop>
<tabstop>stickyslider_replaygainfallbackgain</tabstop>
<tabstop>checkbox_replaygaincompression</tabstop>
<tabstop>checkbox_fadeout_stop</tabstop>
<tabstop>checkbox_fadeout_cross</tabstop>