Merge pull request #1854 from cg2121/audio-stuff
UI: Use dB for volume in adv. audio properties
This commit is contained in:
commit
60f79eb4b9
@ -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)"
|
||||
|
@ -14,6 +14,7 @@
|
||||
using namespace std;
|
||||
|
||||
#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
|
||||
#define FADER_PRECISION 4096.0
|
||||
|
||||
QWeakPointer<VolumeMeterTimer> VolumeMeter::updateTimer;
|
||||
|
||||
@ -47,7 +48,8 @@ void VolControl::OBSVolumeMuted(void *data, calldata_t *calldata)
|
||||
void VolControl::VolumeChanged()
|
||||
{
|
||||
slider->blockSignals(true);
|
||||
slider->setValue((int) (obs_fader_get_deflection(obs_fader) * 100.0f));
|
||||
slider->setValue((int) (obs_fader_get_deflection(obs_fader) *
|
||||
FADER_PRECISION));
|
||||
slider->blockSignals(false);
|
||||
|
||||
updateText();
|
||||
@ -66,7 +68,7 @@ void VolControl::SetMuted(bool checked)
|
||||
|
||||
void VolControl::SliderChanged(int vol)
|
||||
{
|
||||
obs_fader_set_deflection(obs_fader, float(vol) * 0.01f);
|
||||
obs_fader_set_deflection(obs_fader, float(vol) / FADER_PRECISION);
|
||||
updateText();
|
||||
}
|
||||
|
||||
@ -116,7 +118,7 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
|
||||
: source (std::move(source_)),
|
||||
levelTotal (0.0f),
|
||||
levelCount (0.0f),
|
||||
obs_fader (obs_fader_create(OBS_FADER_CUBIC)),
|
||||
obs_fader (obs_fader_create(OBS_FADER_LOG)),
|
||||
obs_volmeter (obs_volmeter_create(OBS_FADER_LOG)),
|
||||
vertical (vertical)
|
||||
{
|
||||
@ -234,7 +236,7 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical)
|
||||
volLabel->setFont(font);
|
||||
|
||||
slider->setMinimum(0);
|
||||
slider->setMaximum(100);
|
||||
slider->setMaximum(int(FADER_PRECISION));
|
||||
|
||||
bool muted = obs_source_muted(source);
|
||||
mute->setChecked(muted);
|
||||
|
@ -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