|
@@ -32,7 +32,9 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
labelL = new QLabel();
|
|
|
labelR = new QLabel();
|
|
|
nameLabel = new QLabel();
|
|
|
+ stackedWidget = new QStackedWidget();
|
|
|
volume = new QDoubleSpinBox();
|
|
|
+ percent = new QSpinBox();
|
|
|
forceMono = new QCheckBox();
|
|
|
balance = new BalanceSlider();
|
|
|
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
|
|
@@ -84,6 +86,20 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
if (volume->value() < MIN_DB)
|
|
|
volume->setSpecialValueText("-inf dB");
|
|
|
|
|
|
+ percent->setMinimum(0);
|
|
|
+ percent->setMaximum(2000);
|
|
|
+ percent->setSuffix("%");
|
|
|
+ percent->setValue((int)(obs_source_get_volume(source) * 100.0f));
|
|
|
+ percent->setFixedWidth(100);
|
|
|
+
|
|
|
+ stackedWidget->addWidget(volume);
|
|
|
+ stackedWidget->addWidget(percent);
|
|
|
+
|
|
|
+ VolumeType volType = (VolumeType)config_get_int(
|
|
|
+ GetGlobalConfig(), "BasicWindow", "AdvAudioVolumeType");
|
|
|
+
|
|
|
+ SetVolumeWidget(volType);
|
|
|
+
|
|
|
forceMono->setChecked((flags & OBS_SOURCE_FLAG_FORCE_MONO) != 0);
|
|
|
|
|
|
forceMonoContainer->layout()->addWidget(forceMono);
|
|
@@ -160,6 +176,8 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
|
|
|
QWidget::connect(volume, SIGNAL(valueChanged(double)), this,
|
|
|
SLOT(volumeChanged(double)));
|
|
|
+ QWidget::connect(percent, SIGNAL(valueChanged(int)), this,
|
|
|
+ SLOT(percentChanged(int)));
|
|
|
QWidget::connect(forceMono, SIGNAL(clicked(bool)), this,
|
|
|
SLOT(downmixMonoChanged(bool)));
|
|
|
QWidget::connect(balance, SIGNAL(valueChanged(int)), this,
|
|
@@ -191,7 +209,7 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
OBSAdvAudioCtrl::~OBSAdvAudioCtrl()
|
|
|
{
|
|
|
nameLabel->deleteLater();
|
|
|
- volume->deleteLater();
|
|
|
+ stackedWidget->deleteLater();
|
|
|
forceMonoContainer->deleteLater();
|
|
|
balanceContainer->deleteLater();
|
|
|
syncOffset->deleteLater();
|
|
@@ -207,7 +225,7 @@ void OBSAdvAudioCtrl::ShowAudioControl(QGridLayout *layout)
|
|
|
int idx = 0;
|
|
|
|
|
|
layout->addWidget(nameLabel, lastRow, idx++);
|
|
|
- layout->addWidget(volume, lastRow, idx++);
|
|
|
+ layout->addWidget(stackedWidget, lastRow, idx++);
|
|
|
layout->addWidget(forceMonoContainer, lastRow, idx++);
|
|
|
layout->addWidget(balanceContainer, lastRow, idx++);
|
|
|
layout->addWidget(syncOffset, lastRow, idx++);
|
|
@@ -270,7 +288,10 @@ void OBSAdvAudioCtrl::SourceFlagsChanged(uint32_t flags)
|
|
|
void OBSAdvAudioCtrl::SourceVolumeChanged(float value)
|
|
|
{
|
|
|
volume->blockSignals(true);
|
|
|
+ percent->blockSignals(true);
|
|
|
volume->setValue(obs_mul_to_db(value));
|
|
|
+ percent->setValue((int)std::round(value * 100.0f));
|
|
|
+ percent->blockSignals(false);
|
|
|
volume->blockSignals(false);
|
|
|
}
|
|
|
|
|
@@ -303,6 +324,11 @@ void OBSAdvAudioCtrl::volumeChanged(double db)
|
|
|
obs_source_set_volume(source, val);
|
|
|
}
|
|
|
|
|
|
+void OBSAdvAudioCtrl::percentChanged(int percent)
|
|
|
+{
|
|
|
+ obs_source_set_volume(source, (float)percent / 100.0f);
|
|
|
+}
|
|
|
+
|
|
|
void OBSAdvAudioCtrl::downmixMonoChanged(bool checked)
|
|
|
{
|
|
|
uint32_t flags = obs_source_get_flags(source);
|
|
@@ -412,3 +438,15 @@ void OBSAdvAudioCtrl::mixer6Changed(bool checked)
|
|
|
{
|
|
|
setMixer(source, 5, checked);
|
|
|
}
|
|
|
+
|
|
|
+void OBSAdvAudioCtrl::SetVolumeWidget(VolumeType type)
|
|
|
+{
|
|
|
+ switch (type) {
|
|
|
+ case VolumeType::Percent:
|
|
|
+ stackedWidget->setCurrentWidget(percent);
|
|
|
+ break;
|
|
|
+ case VolumeType::dB:
|
|
|
+ stackedWidget->setCurrentWidget(volume);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|