UI: Implement stereo balancing
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user