|
@@ -39,10 +39,10 @@ static inline float DBToLinear(float db_full)
|
|
|
|
|
|
|
|
void VolControl::OBSVolumeChanged(void *data, calldata_t *calldata)
|
|
void VolControl::OBSVolumeChanged(void *data, calldata_t *calldata)
|
|
|
{
|
|
{
|
|
|
|
|
+ Q_UNUSED(calldata);
|
|
|
VolControl *volControl = static_cast<VolControl*>(data);
|
|
VolControl *volControl = static_cast<VolControl*>(data);
|
|
|
- int vol = (int)(calldata_float(calldata, "volume") * 100.0f + 0.5f);
|
|
|
|
|
|
|
|
|
|
- QMetaObject::invokeMethod(volControl, "VolumeChanged", Q_ARG(int, vol));
|
|
|
|
|
|
|
+ QMetaObject::invokeMethod(volControl, "VolumeChanged");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void VolControl::OBSVolumeLevel(void *data, calldata_t *calldata)
|
|
void VolControl::OBSVolumeLevel(void *data, calldata_t *calldata)
|
|
@@ -58,11 +58,9 @@ void VolControl::OBSVolumeLevel(void *data, calldata_t *calldata)
|
|
|
Q_ARG(float, peakHold));
|
|
Q_ARG(float, peakHold));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void VolControl::VolumeChanged(int vol)
|
|
|
|
|
|
|
+void VolControl::VolumeChanged()
|
|
|
{
|
|
{
|
|
|
- signalChanged = false;
|
|
|
|
|
- slider->setValue(vol);
|
|
|
|
|
- signalChanged = true;
|
|
|
|
|
|
|
+ slider->setValue((int) (obs_fader_get_deflection(obs_fader) * 100.0f));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void VolControl::VolumeLevel(float mag, float peak, float peakHold)
|
|
void VolControl::VolumeLevel(float mag, float peak, float peakHold)
|
|
@@ -85,17 +83,9 @@ void VolControl::VolumeLevel(float mag, float peak, float peakHold)
|
|
|
|
|
|
|
|
void VolControl::SliderChanged(int vol)
|
|
void VolControl::SliderChanged(int vol)
|
|
|
{
|
|
{
|
|
|
- if (signalChanged) {
|
|
|
|
|
- signal_handler_disconnect(obs_source_get_signal_handler(source),
|
|
|
|
|
- "volume", OBSVolumeChanged, this);
|
|
|
|
|
-
|
|
|
|
|
- obs_source_set_volume(source, float(vol)*0.01f);
|
|
|
|
|
-
|
|
|
|
|
- signal_handler_connect(obs_source_get_signal_handler(source),
|
|
|
|
|
- "volume", OBSVolumeChanged, this);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- volLabel->setText(QString::number(vol));
|
|
|
|
|
|
|
+ obs_fader_set_deflection(obs_fader, float(vol) * 0.01f);
|
|
|
|
|
+ volLabel->setText(QString::number(obs_fader_get_db(obs_fader), 'f', 1)
|
|
|
|
|
+ .append(" dB"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
QString VolControl::GetName() const
|
|
QString VolControl::GetName() const
|
|
@@ -110,14 +100,13 @@ void VolControl::SetName(const QString &newName)
|
|
|
|
|
|
|
|
VolControl::VolControl(OBSSource source_)
|
|
VolControl::VolControl(OBSSource source_)
|
|
|
: source (source_),
|
|
: source (source_),
|
|
|
- signalChanged (true),
|
|
|
|
|
lastMeterTime (0),
|
|
lastMeterTime (0),
|
|
|
levelTotal (0.0f),
|
|
levelTotal (0.0f),
|
|
|
- levelCount (0.0f)
|
|
|
|
|
|
|
+ levelCount (0.0f),
|
|
|
|
|
+ obs_fader (obs_fader_create(OBS_FADER_CUBIC))
|
|
|
{
|
|
{
|
|
|
QVBoxLayout *mainLayout = new QVBoxLayout();
|
|
QVBoxLayout *mainLayout = new QVBoxLayout();
|
|
|
QHBoxLayout *textLayout = new QHBoxLayout();
|
|
QHBoxLayout *textLayout = new QHBoxLayout();
|
|
|
- int vol = int(obs_source_get_volume(source) * 100.0f);
|
|
|
|
|
|
|
|
|
|
nameLabel = new QLabel();
|
|
nameLabel = new QLabel();
|
|
|
volLabel = new QLabel();
|
|
volLabel = new QLabel();
|
|
@@ -129,11 +118,10 @@ VolControl::VolControl(OBSSource source_)
|
|
|
|
|
|
|
|
nameLabel->setText(obs_source_get_name(source));
|
|
nameLabel->setText(obs_source_get_name(source));
|
|
|
nameLabel->setFont(font);
|
|
nameLabel->setFont(font);
|
|
|
- volLabel->setText(QString::number(vol));
|
|
|
|
|
volLabel->setFont(font);
|
|
volLabel->setFont(font);
|
|
|
slider->setMinimum(0);
|
|
slider->setMinimum(0);
|
|
|
slider->setMaximum(100);
|
|
slider->setMaximum(100);
|
|
|
- slider->setValue(vol);
|
|
|
|
|
|
|
+
|
|
|
// slider->setMaximumHeight(13);
|
|
// slider->setMaximumHeight(13);
|
|
|
|
|
|
|
|
textLayout->setContentsMargins(0, 0, 0, 0);
|
|
textLayout->setContentsMargins(0, 0, 0, 0);
|
|
@@ -150,23 +138,29 @@ VolControl::VolControl(OBSSource source_)
|
|
|
|
|
|
|
|
setLayout(mainLayout);
|
|
setLayout(mainLayout);
|
|
|
|
|
|
|
|
- signal_handler_connect(obs_source_get_signal_handler(source),
|
|
|
|
|
- "volume", OBSVolumeChanged, this);
|
|
|
|
|
|
|
+ signal_handler_connect(obs_fader_get_signal_handler(obs_fader),
|
|
|
|
|
+ "volume_changed", OBSVolumeChanged, this);
|
|
|
|
|
|
|
|
signal_handler_connect(obs_source_get_signal_handler(source),
|
|
signal_handler_connect(obs_source_get_signal_handler(source),
|
|
|
"volume_level", OBSVolumeLevel, this);
|
|
"volume_level", OBSVolumeLevel, this);
|
|
|
|
|
|
|
|
QWidget::connect(slider, SIGNAL(valueChanged(int)),
|
|
QWidget::connect(slider, SIGNAL(valueChanged(int)),
|
|
|
this, SLOT(SliderChanged(int)));
|
|
this, SLOT(SliderChanged(int)));
|
|
|
|
|
+
|
|
|
|
|
+ obs_fader_attach_source(obs_fader, source);
|
|
|
|
|
+ /* Call volume changed once to init the slider position and label */
|
|
|
|
|
+ VolumeChanged();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
VolControl::~VolControl()
|
|
VolControl::~VolControl()
|
|
|
{
|
|
{
|
|
|
- signal_handler_disconnect(obs_source_get_signal_handler(source),
|
|
|
|
|
- "volume", OBSVolumeChanged, this);
|
|
|
|
|
|
|
+ signal_handler_disconnect(obs_fader_get_signal_handler(obs_fader),
|
|
|
|
|
+ "volume_changed", OBSVolumeChanged, this);
|
|
|
|
|
|
|
|
signal_handler_disconnect(obs_source_get_signal_handler(source),
|
|
signal_handler_disconnect(obs_source_get_signal_handler(source),
|
|
|
"volume_level", OBSVolumeLevel, this);
|
|
"volume_level", OBSVolumeLevel, this);
|
|
|
|
|
+
|
|
|
|
|
+ obs_fader_destroy(obs_fader);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
VolumeMeter::VolumeMeter(QWidget *parent)
|
|
VolumeMeter::VolumeMeter(QWidget *parent)
|