|
|
|
@@ -8,6 +8,7 @@
|
|
|
|
|
#include "qt-wrappers.hpp"
|
|
|
|
|
#include "obs-app.hpp"
|
|
|
|
|
#include "adv-audio-control.hpp"
|
|
|
|
|
#include "window-basic-main.hpp"
|
|
|
|
|
|
|
|
|
|
#ifndef NSEC_PER_MSEC
|
|
|
|
|
#define NSEC_PER_MSEC 1000000
|
|
|
|
@@ -25,13 +26,13 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
|
|
|
|
|
|
|
forceMonoContainer = new QWidget();
|
|
|
|
|
mixerContainer = new QWidget();
|
|
|
|
|
panningContainer = new QWidget();
|
|
|
|
|
balanceContainer = new QWidget();
|
|
|
|
|
labelL = new QLabel();
|
|
|
|
|
labelR = new QLabel();
|
|
|
|
|
nameLabel = new QLabel();
|
|
|
|
|
volume = new QSpinBox();
|
|
|
|
|
forceMono = new QCheckBox();
|
|
|
|
|
panning = new QSlider(Qt::Horizontal);
|
|
|
|
|
balance = new QSlider(Qt::Horizontal);
|
|
|
|
|
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
|
|
|
|
|
monitoringType = new QComboBox();
|
|
|
|
|
#endif
|
|
|
|
@@ -60,8 +61,8 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
|
|
mixerContainer->setLayout(hlayout);
|
|
|
|
|
hlayout = new QHBoxLayout();
|
|
|
|
|
hlayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
panningContainer->setLayout(hlayout);
|
|
|
|
|
panningContainer->setMinimumWidth(100);
|
|
|
|
|
balanceContainer->setLayout(hlayout);
|
|
|
|
|
balanceContainer->setMinimumWidth(100);
|
|
|
|
|
|
|
|
|
|
labelL->setText("L");
|
|
|
|
|
|
|
|
|
@@ -81,11 +82,23 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
|
|
forceMonoContainer->layout()->setAlignment(forceMono,
|
|
|
|
|
Qt::AlignHCenter | Qt::AlignVCenter);
|
|
|
|
|
|
|
|
|
|
panning->setMinimum(0);
|
|
|
|
|
panning->setMaximum(100);
|
|
|
|
|
panning->setTickPosition(QSlider::TicksAbove);
|
|
|
|
|
panning->setEnabled(false);
|
|
|
|
|
panning->setValue(50); /* XXX */
|
|
|
|
|
balance->setMinimum(0);
|
|
|
|
|
balance->setMaximum(100);
|
|
|
|
|
balance->setTickPosition(QSlider::TicksAbove);
|
|
|
|
|
balance->setTickInterval(50);
|
|
|
|
|
|
|
|
|
|
OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
|
|
|
|
|
|
|
|
|
|
const char *speakers = config_get_string(main->Config(), "Audio",
|
|
|
|
|
"ChannelSetup");
|
|
|
|
|
|
|
|
|
|
if (strcmp(speakers, "Mono") == 0)
|
|
|
|
|
balance->setEnabled(false);
|
|
|
|
|
else
|
|
|
|
|
balance->setEnabled(true);
|
|
|
|
|
|
|
|
|
|
float bal = obs_source_get_balance_value(source) * 100.0f;
|
|
|
|
|
balance->setValue((int)bal);
|
|
|
|
|
|
|
|
|
|
int64_t cur_sync = obs_source_get_sync_offset(source);
|
|
|
|
|
syncOffset->setMinimum(-20000);
|
|
|
|
@@ -118,10 +131,14 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
|
|
mixer6->setText("6");
|
|
|
|
|
mixer6->setChecked(mixers & (1<<5));
|
|
|
|
|
|
|
|
|
|
panningContainer->layout()->addWidget(labelL);
|
|
|
|
|
panningContainer->layout()->addWidget(panning);
|
|
|
|
|
panningContainer->layout()->addWidget(labelR);
|
|
|
|
|
panningContainer->setMaximumWidth(170);
|
|
|
|
|
speaker_layout sl = obs_source_get_speaker_layout(source);
|
|
|
|
|
|
|
|
|
|
if (sl == SPEAKERS_STEREO) {
|
|
|
|
|
balanceContainer->layout()->addWidget(labelL);
|
|
|
|
|
balanceContainer->layout()->addWidget(balance);
|
|
|
|
|
balanceContainer->layout()->addWidget(labelR);
|
|
|
|
|
balanceContainer->setMaximumWidth(170);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mixerContainer->layout()->addWidget(mixer1);
|
|
|
|
|
mixerContainer->layout()->addWidget(mixer2);
|
|
|
|
@@ -134,8 +151,8 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
|
|
|
|
|
this, SLOT(volumeChanged(int)));
|
|
|
|
|
QWidget::connect(forceMono, SIGNAL(clicked(bool)),
|
|
|
|
|
this, SLOT(downmixMonoChanged(bool)));
|
|
|
|
|
QWidget::connect(panning, SIGNAL(valueChanged(int)),
|
|
|
|
|
this, SLOT(panningChanged(int)));
|
|
|
|
|
QWidget::connect(balance, SIGNAL(valueChanged(int)),
|
|
|
|
|
this, SLOT(balanceChanged(int)));
|
|
|
|
|
QWidget::connect(syncOffset, SIGNAL(valueChanged(int)),
|
|
|
|
|
this, SLOT(syncOffsetChanged(int)));
|
|
|
|
|
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
|
|
|
|
@@ -163,7 +180,7 @@ OBSAdvAudioCtrl::~OBSAdvAudioCtrl()
|
|
|
|
|
nameLabel->deleteLater();
|
|
|
|
|
volume->deleteLater();
|
|
|
|
|
forceMonoContainer->deleteLater();
|
|
|
|
|
panningContainer->deleteLater();
|
|
|
|
|
balanceContainer->deleteLater();
|
|
|
|
|
syncOffset->deleteLater();
|
|
|
|
|
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
|
|
|
|
|
monitoringType->deleteLater();
|
|
|
|
@@ -179,7 +196,7 @@ void OBSAdvAudioCtrl::ShowAudioControl(QGridLayout *layout)
|
|
|
|
|
layout->addWidget(nameLabel, lastRow, idx++);
|
|
|
|
|
layout->addWidget(volume, lastRow, idx++);
|
|
|
|
|
layout->addWidget(forceMonoContainer, lastRow, idx++);
|
|
|
|
|
layout->addWidget(panningContainer, lastRow, idx++);
|
|
|
|
|
layout->addWidget(balanceContainer, lastRow, idx++);
|
|
|
|
|
layout->addWidget(syncOffset, lastRow, idx++);
|
|
|
|
|
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
|
|
|
|
|
layout->addWidget(monitoringType, lastRow, idx++);
|
|
|
|
@@ -283,10 +300,18 @@ void OBSAdvAudioCtrl::downmixMonoChanged(bool checked)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OBSAdvAudioCtrl::panningChanged(int val)
|
|
|
|
|
void OBSAdvAudioCtrl::balanceChanged(int val)
|
|
|
|
|
{
|
|
|
|
|
/* TODO */
|
|
|
|
|
UNUSED_PARAMETER(val);
|
|
|
|
|
float bal = (float)val / 100.0f;
|
|
|
|
|
|
|
|
|
|
if (abs(50 - val) < 10) {
|
|
|
|
|
balance->blockSignals(true);
|
|
|
|
|
balance->setValue(50);
|
|
|
|
|
bal = 0.5f;
|
|
|
|
|
balance->blockSignals(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obs_source_set_balance_value(source, bal);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OBSAdvAudioCtrl::syncOffsetChanged(int milliseconds)
|
|
|
|
|