mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-15 22:04:17 -05:00
Add option to enable or disable sources on audio tracks
This commit is contained in:
@@ -655,6 +655,8 @@ AdvSceneSwitcher.action.audio.type.sourceVolume="Set source volume"
|
||||
AdvSceneSwitcher.action.audio.type.masterVolume="Set master volume"
|
||||
AdvSceneSwitcher.action.audio.type.syncOffset="Set sync offset"
|
||||
AdvSceneSwitcher.action.audio.type.monitor="Set audio monitoring"
|
||||
AdvSceneSwitcher.action.audio.type.enableOnTrack="Enable on audio track"
|
||||
AdvSceneSwitcher.action.audio.type.disableOnTrack="Disable on audio track"
|
||||
AdvSceneSwitcher.action.audio.type.balance="Set balance"
|
||||
AdvSceneSwitcher.action.audio.balance.description="Move the slider in the direction of the audio channel you want to focus on."
|
||||
AdvSceneSwitcher.action.audio.fade.type.duration="over a duration of"
|
||||
@@ -663,7 +665,7 @@ AdvSceneSwitcher.action.audio.fade.duration="{{fade}}Fade{{fadeTypes}}{{duration
|
||||
AdvSceneSwitcher.action.audio.fade.rate="{{fade}}Fade{{fadeTypes}}{{rate}}per second."
|
||||
AdvSceneSwitcher.action.audio.fade.wait="Wait for fade to complete."
|
||||
AdvSceneSwitcher.action.audio.fade.abort="Abort already active fade."
|
||||
AdvSceneSwitcher.action.audio.entry="{{actions}}{{audioSources}}{{volume}}{{volumeDB}}{{percentDBToggle}}{{syncOffset}}{{monitorTypes}}"
|
||||
AdvSceneSwitcher.action.audio.entry="{{actions}}{{audioSources}}{{volume}}{{volumeDB}}{{percentDBToggle}}{{syncOffset}}{{monitorTypes}}{{track}}"
|
||||
AdvSceneSwitcher.action.recording="Recording"
|
||||
AdvSceneSwitcher.action.recording.type.stop="Stop recording"
|
||||
AdvSceneSwitcher.action.recording.type.start="Start recording"
|
||||
|
||||
@@ -29,6 +29,10 @@ static const std::map<MacroActionAudio::Action, std::string> actionTypes = {
|
||||
"AdvSceneSwitcher.action.audio.type.monitor"},
|
||||
{MacroActionAudio::Action::BALANCE,
|
||||
"AdvSceneSwitcher.action.audio.type.balance"},
|
||||
{MacroActionAudio::Action::ENABLE_ON_TRACK,
|
||||
"AdvSceneSwitcher.action.audio.type.enableOnTrack"},
|
||||
{MacroActionAudio::Action::DISABLE_ON_TRACK,
|
||||
"AdvSceneSwitcher.action.audio.type.disableOnTrack"},
|
||||
};
|
||||
|
||||
static const std::map<MacroActionAudio::FadeType, std::string> fadeTypes = {
|
||||
@@ -205,6 +209,28 @@ void MacroActionAudio::StartFade() const
|
||||
}
|
||||
}
|
||||
|
||||
static void setMixerEnable(obs_source_t *source, const int mixerIdx,
|
||||
const bool enable)
|
||||
{
|
||||
if (mixerIdx < 0) {
|
||||
blog(LOG_INFO, "refusing to %s mixer id %d for %s",
|
||||
enable ? "enable" : "disable", mixerIdx,
|
||||
obs_source_get_name(source));
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t mixers = obs_source_get_audio_mixers(source);
|
||||
uint32_t new_mixers = mixers;
|
||||
|
||||
if (enable) {
|
||||
new_mixers |= (1 << mixerIdx);
|
||||
} else {
|
||||
new_mixers &= ~(1 << mixerIdx);
|
||||
}
|
||||
|
||||
obs_source_set_audio_mixers(source, new_mixers);
|
||||
}
|
||||
|
||||
bool MacroActionAudio::PerformAction()
|
||||
{
|
||||
auto s = obs_weak_source_get_source(_audioSource.GetSource());
|
||||
@@ -232,6 +258,12 @@ bool MacroActionAudio::PerformAction()
|
||||
case Action::BALANCE:
|
||||
obs_source_set_balance_value(s, _balance);
|
||||
break;
|
||||
case Action::ENABLE_ON_TRACK:
|
||||
setMixerEnable(s, _track - 1, true);
|
||||
break;
|
||||
case Action::DISABLE_ON_TRACK:
|
||||
setMixerEnable(s, _track - 1, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -263,6 +295,7 @@ bool MacroActionAudio::Save(obs_data_t *obj) const
|
||||
obs_data_set_int(obj, "monitor", _monitorType);
|
||||
_syncOffset.Save(obj, "syncOffset");
|
||||
_balance.Save(obj, "balance");
|
||||
_track.Save(obj, "track");
|
||||
_volume.Save(obj, "volume");
|
||||
_rate.Save(obj, "rate");
|
||||
obs_data_set_bool(obj, "fade", _fade);
|
||||
@@ -271,7 +304,7 @@ bool MacroActionAudio::Save(obs_data_t *obj) const
|
||||
obs_data_set_bool(obj, "abortActiveFade", _abortActiveFade);
|
||||
obs_data_set_bool(obj, "useDb", _useDb);
|
||||
_volumeDB.Save(obj, "volumeDB");
|
||||
obs_data_set_int(obj, "version", 2);
|
||||
obs_data_set_int(obj, "version", 3);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -312,13 +345,18 @@ bool MacroActionAudio::Load(obs_data_t *obj)
|
||||
_abortActiveFade = false;
|
||||
}
|
||||
|
||||
if (obs_data_get_int(obj, "version") != 2) {
|
||||
if (obs_data_get_int(obj, "version") < 2) {
|
||||
_useDb = false;
|
||||
_volumeDB = 0.0;
|
||||
} else {
|
||||
_useDb = obs_data_get_bool(obj, "useDb");
|
||||
_volumeDB.Load(obj, "volumeDB");
|
||||
}
|
||||
if (obs_data_get_int(obj, "version") < 3) {
|
||||
_track = 1;
|
||||
} else {
|
||||
_track.Load(obj, "track");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -381,6 +419,7 @@ MacroActionAudioEdit::MacroActionAudioEdit(
|
||||
0., 1., "",
|
||||
obs_module_text(
|
||||
"AdvSceneSwitcher.action.audio.balance.description"))),
|
||||
_track(new VariableSpinBox),
|
||||
_volumePercent(new VariableSpinBox),
|
||||
_volumeDB(new VariableDoubleSpinBox),
|
||||
_percentDBToggle(new QPushButton),
|
||||
@@ -398,6 +437,9 @@ MacroActionAudioEdit::MacroActionAudioEdit(
|
||||
_syncOffset->setMaximum(20000);
|
||||
_syncOffset->setSuffix("ms");
|
||||
|
||||
_track->setMinimum(1);
|
||||
_track->setMaximum(32);
|
||||
|
||||
_volumePercent->setMinimum(0);
|
||||
_volumePercent->setMaximum(2000);
|
||||
_volumePercent->setSuffix("%");
|
||||
@@ -433,6 +475,10 @@ MacroActionAudioEdit::MacroActionAudioEdit(
|
||||
this, SLOT(BalanceChanged(const NumberVariable<double> &)));
|
||||
QWidget::connect(_monitorTypes, SIGNAL(currentIndexChanged(int)), this,
|
||||
SLOT(MonitorTypeChanged(int)));
|
||||
QWidget::connect(
|
||||
_track,
|
||||
SIGNAL(NumberVariableChanged(const NumberVariable<int> &)),
|
||||
this, SLOT(TrackChanged(const NumberVariable<int> &)));
|
||||
QWidget::connect(
|
||||
_volumePercent,
|
||||
SIGNAL(NumberVariableChanged(const NumberVariable<int> &)),
|
||||
@@ -464,6 +510,7 @@ MacroActionAudioEdit::MacroActionAudioEdit(
|
||||
{"{{syncOffset}}", _syncOffset},
|
||||
{"{{monitorTypes}}", _monitorTypes},
|
||||
{"{{balance}}", _balance},
|
||||
{"{{track}}", _track},
|
||||
{"{{volume}}", _volumePercent},
|
||||
{"{{volumeDB}}", _volumeDB},
|
||||
{"{{percentDBToggle}}", _percentDBToggle},
|
||||
@@ -519,6 +566,10 @@ void MacroActionAudioEdit::SetWidgetVisibility()
|
||||
MacroActionAudio::Action::MONITOR);
|
||||
_balance->setVisible(_entryData->_action ==
|
||||
MacroActionAudio::Action::BALANCE);
|
||||
_track->setVisible(_entryData->_action ==
|
||||
MacroActionAudio::Action::ENABLE_ON_TRACK ||
|
||||
_entryData->_action ==
|
||||
MacroActionAudio::Action::DISABLE_ON_TRACK);
|
||||
|
||||
_fadeTypeLayout->removeWidget(_fade);
|
||||
_fadeTypeLayout->removeWidget(_fadeTypes);
|
||||
@@ -583,6 +634,7 @@ void MacroActionAudioEdit::UpdateEntryData()
|
||||
_syncOffset->SetValue(_entryData->_syncOffset);
|
||||
_monitorTypes->setCurrentIndex(_entryData->_monitorType);
|
||||
_balance->SetDoubleValue(_entryData->_balance);
|
||||
_track->SetValue(_entryData->_track);
|
||||
_volumePercent->SetValue(_entryData->_volume);
|
||||
_volumeDB->SetValue(_entryData->_volumeDB);
|
||||
_fade->setChecked(_entryData->_fade);
|
||||
@@ -648,6 +700,16 @@ void MacroActionAudioEdit::BalanceChanged(const NumberVariable<double> &value)
|
||||
_entryData->_balance = value;
|
||||
}
|
||||
|
||||
void MacroActionAudioEdit::TrackChanged(const NumberVariable<int> &value)
|
||||
{
|
||||
if (_loading || !_entryData) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto lock = LockContext();
|
||||
_entryData->_track = value;
|
||||
}
|
||||
|
||||
void MacroActionAudioEdit::VolumeDBChanged(const NumberVariable<double> &value)
|
||||
{
|
||||
if (_loading || !_entryData) {
|
||||
|
||||
@@ -34,6 +34,8 @@ public:
|
||||
SYNC_OFFSET,
|
||||
MONITOR,
|
||||
BALANCE,
|
||||
ENABLE_ON_TRACK,
|
||||
DISABLE_ON_TRACK,
|
||||
};
|
||||
|
||||
enum class FadeType {
|
||||
@@ -46,6 +48,7 @@ public:
|
||||
IntVariable _syncOffset = 0;
|
||||
obs_monitoring_type _monitorType = OBS_MONITORING_TYPE_NONE;
|
||||
DoubleVariable _balance = 0.5;
|
||||
IntVariable _track = 1;
|
||||
bool _useDb = false;
|
||||
IntVariable _volume = 0;
|
||||
DoubleVariable _volumeDB = 0.0;
|
||||
@@ -91,6 +94,7 @@ private slots:
|
||||
void SyncOffsetChanged(const NumberVariable<int> &value);
|
||||
void MonitorTypeChanged(int value);
|
||||
void BalanceChanged(const NumberVariable<double> &value);
|
||||
void TrackChanged(const NumberVariable<int> &value);
|
||||
void VolumeChanged(const NumberVariable<int> &value);
|
||||
void VolumeDBChanged(const NumberVariable<double> &value);
|
||||
void PercentDBClicked();
|
||||
@@ -110,6 +114,7 @@ protected:
|
||||
VariableSpinBox *_syncOffset;
|
||||
QComboBox *_monitorTypes;
|
||||
SliderSpinBox *_balance;
|
||||
VariableSpinBox *_track;
|
||||
VariableSpinBox *_volumePercent;
|
||||
VariableDoubleSpinBox *_volumeDB;
|
||||
QPushButton *_percentDBToggle;
|
||||
|
||||
Reference in New Issue
Block a user