UI: Change volume to dB in adv audio properties
This commit is contained in:
parent
528daad181
commit
03c9d930da
@ -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,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);
|
||||
|
@ -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)"
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user