Răsfoiți Sursa

UI: Change volume to dB in adv audio properties

Clayton Groeneveld 6 ani în urmă
părinte
comite
03c9d930da

+ 23 - 9
UI/adv-audio-control.cpp

@@ -13,6 +13,9 @@
 #define NSEC_PER_MSEC 1000000
 #endif
 
+#define MIN_DB -96.0
+#define MAX_DB 26.0
+
 OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	: source(source_)
 {
@@ -29,7 +32,7 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	labelL                         = new QLabel();
 	labelR                         = new QLabel();
 	nameLabel                      = new QLabel();
-	volume                         = new QSpinBox();
+	volume                         = new QDoubleSpinBox();
 	forceMono                      = new QCheckBox();
 	balance                        = new BalanceSlider();
 #if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
@@ -71,9 +74,15 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	nameLabel->setText(QT_UTF8(sourceName));
 	nameLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
 
-	volume->setMinimum(0);
-	volume->setMaximum(2000);
-	volume->setValue(int(vol * 100.0f));
+	volume->setMinimum(MIN_DB - 0.1);
+	volume->setMaximum(MAX_DB);
+	volume->setSingleStep(0.1);
+	volume->setDecimals(1);
+	volume->setSuffix(" dB");
+	volume->setValue(obs_mul_to_db(vol));
+
+	if (volume->value() < MIN_DB)
+		volume->setSpecialValueText("-inf dB");
 
 	forceMono->setChecked((flags & OBS_SOURCE_FLAG_FORCE_MONO) != 0);
 
@@ -147,8 +156,8 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	mixerContainer->layout()->addWidget(mixer5);
 	mixerContainer->layout()->addWidget(mixer6);
 
-	QWidget::connect(volume, SIGNAL(valueChanged(int)),
-			this, SLOT(volumeChanged(int)));
+	QWidget::connect(volume, SIGNAL(valueChanged(double)),
+			this, SLOT(volumeChanged(double)));
 	QWidget::connect(forceMono, SIGNAL(clicked(bool)),
 			this, SLOT(downmixMonoChanged(bool)));
 	QWidget::connect(balance, SIGNAL(valueChanged(int)),
@@ -259,7 +268,7 @@ void OBSAdvAudioCtrl::SourceFlagsChanged(uint32_t flags)
 void OBSAdvAudioCtrl::SourceVolumeChanged(float value)
 {
 	volume->blockSignals(true);
-	volume->setValue(int(round(value * 100.0f)));
+	volume->setValue(obs_mul_to_db(value));
 	volume->blockSignals(false);
 }
 
@@ -281,9 +290,14 @@ void OBSAdvAudioCtrl::SourceMixersChanged(uint32_t mixers)
 /* ------------------------------------------------------------------------- */
 /* Qt control callbacks */
 
-void OBSAdvAudioCtrl::volumeChanged(int percentage)
+void OBSAdvAudioCtrl::volumeChanged(double db)
 {
-	float val = float(percentage) / 100.0f;
+	if (db < MIN_DB) {
+		volume->setSpecialValueText("-inf dB");
+		db = -INFINITY;
+	}
+
+	float val = obs_db_to_mul(db);
 	obs_source_set_volume(source, val);
 }
 

+ 3 - 2
UI/adv-audio-control.hpp

@@ -3,6 +3,7 @@
 #include <obs.hpp>
 #include <QWidget>
 #include <QPointer>
+#include <QDoubleSpinBox>
 #include "balance-slider.hpp"
 
 class QGridLayout;
@@ -22,7 +23,7 @@ private:
 	QPointer<QWidget>      balanceContainer;
 
 	QPointer<QLabel>       nameLabel;
-	QPointer<QSpinBox>     volume;
+	QPointer<QDoubleSpinBox> volume;
 	QPointer<QCheckBox>    forceMono;
 	QPointer<BalanceSlider>balance;
 	QPointer<QLabel>       labelL;
@@ -59,7 +60,7 @@ public slots:
 	void SourceSyncChanged(int64_t offset);
 	void SourceMixersChanged(uint32_t mixers);
 
-	void volumeChanged(int percentage);
+	void volumeChanged(double db);
 	void downmixMonoChanged(bool checked);
 	void balanceChanged(int val);
 	void syncOffsetChanged(int milliseconds);

+ 1 - 1
UI/data/locale/en-US.ini

@@ -824,7 +824,7 @@ Basic.Settings.Advanced.AutoRemux.MP4="(record as mkv)"
 # advanced audio properties
 Basic.AdvAudio="Advanced Audio Properties"
 Basic.AdvAudio.Name="Name"
-Basic.AdvAudio.Volume="Volume (%)"
+Basic.AdvAudio.Volume="Volume"
 Basic.AdvAudio.Mono="Downmix to Mono"
 Basic.AdvAudio.Balance="Balance"
 Basic.AdvAudio.SyncOffset="Sync Offset (ms)"

+ 9 - 0
libobs/obs-audio-controls.c

@@ -932,3 +932,12 @@ void obs_volmeter_remove_callback(obs_volmeter_t *volmeter,
 	pthread_mutex_unlock(&volmeter->callback_mutex);
 }
 
+float obs_mul_to_db(float mul)
+{
+	return mul_to_db(mul);
+}
+
+float obs_db_to_mul(float db)
+{
+	return db_to_mul(db);
+}

+ 3 - 0
libobs/obs-audio-controls.h

@@ -273,6 +273,9 @@ EXPORT void obs_volmeter_add_callback(obs_volmeter_t *volmeter,
 EXPORT void obs_volmeter_remove_callback(obs_volmeter_t *volmeter,
 		obs_volmeter_updated_t callback, void *param);
 
+EXPORT float obs_mul_to_db(float mul);
+EXPORT float obs_db_to_mul(float db);
+
 #ifdef __cplusplus
 }
 #endif