Add temp variable support for audio condition

This commit is contained in:
WarmUpTill 2023-11-04 17:37:33 +01:00 committed by WarmUpTill
parent 79961aabe4
commit f89bb1a750
3 changed files with 96 additions and 29 deletions

View File

@ -1402,6 +1402,15 @@ AdvSceneSwitcher.tempVar.twitch.user_login.removeMod.description="The user login
AdvSceneSwitcher.tempVar.twitch.user_name.removeMod="User name" AdvSceneSwitcher.tempVar.twitch.user_name.removeMod="User name"
AdvSceneSwitcher.tempVar.twitch.user_name.removeMod.description="The display name of the removed moderator." AdvSceneSwitcher.tempVar.twitch.user_name.removeMod.description="The display name of the removed moderator."
AdvSceneSwitcher.tempVar.audio.output_volume="Output volume"
AdvSceneSwitcher.tempVar.audio.output_volume.description="The volume the audio source is outputting."
AdvSceneSwitcher.tempVar.audio.configured_volume="Configured volume"
AdvSceneSwitcher.tempVar.audio.configured_volume.description="The volume level configured for the source."
AdvSceneSwitcher.tempVar.audio.muted="Source muted"
AdvSceneSwitcher.tempVar.audio.sync_offset="Source audio sync offset"
AdvSceneSwitcher.tempVar.audio.monitor="Source audio monitor type"
AdvSceneSwitcher.tempVar.audio.balance="Source audio balance"
AdvSceneSwitcher.selectScene="--select scene--" AdvSceneSwitcher.selectScene="--select scene--"
AdvSceneSwitcher.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectPreviousScene="Previous Scene"
AdvSceneSwitcher.selectCurrentScene="Current Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene"

View File

@ -47,6 +47,12 @@ const static std::map<MacroConditionAudio::VolumeCondition, std::string>
"AdvSceneSwitcher.condition.audio.state.unmute"}, "AdvSceneSwitcher.condition.audio.state.unmute"},
}; };
void MacroConditionAudio::SetType(const Type &type)
{
_checkType = type;
SetupTempVars();
}
MacroConditionAudio::~MacroConditionAudio() MacroConditionAudio::~MacroConditionAudio()
{ {
obs_volmeter_remove_callback(_volmeter, SetVolumeLevel, this); obs_volmeter_remove_callback(_volmeter, SetVolumeLevel, this);
@ -74,6 +80,7 @@ bool MacroConditionAudio::CheckOutputCondition()
} }
SetVariableValue(std::to_string(curVolume)); SetVariableValue(std::to_string(curVolume));
SetTempVarValue("output_volume", std::to_string(curVolume));
// Reset for next check // Reset for next check
_peak = -std::numeric_limits<float>::infinity(); _peak = -std::numeric_limits<float>::infinity();
@ -118,6 +125,9 @@ bool MacroConditionAudio::CheckVolumeCondition()
break; break;
} }
SetTempVarValue("configured_volume", std::to_string(curVolume));
SetTempVarValue("muted", muted ? "true" : "false");
obs_source_release(s); obs_source_release(s);
return ret; return ret;
} }
@ -137,6 +147,7 @@ bool MacroConditionAudio::CheckSyncOffset()
ret = curOffset < _syncOffset; ret = curOffset < _syncOffset;
} }
SetVariableValue(std::to_string(curOffset)); SetVariableValue(std::to_string(curOffset));
SetTempVarValue("sync_offset", std::to_string(curOffset));
obs_source_release(s); obs_source_release(s);
return ret; return ret;
} }
@ -151,6 +162,8 @@ bool MacroConditionAudio::CheckMonitor()
auto s = obs_weak_source_get_source(_audioSource.GetSource()); auto s = obs_weak_source_get_source(_audioSource.GetSource());
ret = obs_source_get_monitoring_type(s) == _monitorType; ret = obs_source_get_monitoring_type(s) == _monitorType;
SetVariableValue(""); SetVariableValue("");
SetTempVarValue("monitor",
std::to_string(obs_source_get_monitoring_type(s)));
obs_source_release(s); obs_source_release(s);
return ret; return ret;
} }
@ -170,6 +183,7 @@ bool MacroConditionAudio::CheckBalance()
ret = curBalance < _balance; ret = curBalance < _balance;
} }
SetVariableValue(std::to_string(curBalance)); SetVariableValue(std::to_string(curBalance));
SetTempVarValue("balance", std::to_string(curBalance));
obs_source_release(s); obs_source_release(s);
return ret; return ret;
} }
@ -290,6 +304,50 @@ void MacroConditionAudio::ResetVolmeter()
_volmeter = AddVolmeterToSource(this, _audioSource.GetSource()); _volmeter = AddVolmeterToSource(this, _audioSource.GetSource());
} }
void MacroConditionAudio::SetupTempVars()
{
MacroCondition::SetupTempVars();
switch (_checkType) {
case Type::OUTPUT_VOLUME:
AddTempvar(
"output_volume",
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.output_volume"),
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.output_volume.description"));
break;
case Type::CONFIGURED_VOLUME:
AddTempvar(
"configured_volume",
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.configured_volume"),
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.configured_volume.description"));
AddTempvar("muted",
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.muted"));
break;
case Type::SYNC_OFFSET:
AddTempvar(
"sync_offset",
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.sync_offset"));
break;
case Type::MONITOR:
AddTempvar("monitor",
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.monitor"));
break;
case Type::BALANCE:
AddTempvar("balance",
obs_module_text(
"AdvSceneSwitcher.tempVar.audio.balance"));
break;
default:
break;
}
}
static inline void populateCheckTypes(QComboBox *list) static inline void populateCheckTypes(QComboBox *list)
{ {
list->clear(); list->clear();
@ -479,10 +537,9 @@ void MacroConditionAudioEdit::ConditionChanged(int cond)
} }
auto lock = LockContext(); auto lock = LockContext();
if (_entryData->_checkType == if (_entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME ||
MacroConditionAudio::Type::OUTPUT_VOLUME || _entryData->GetType() == MacroConditionAudio::Type::BALANCE ||
_entryData->_checkType == MacroConditionAudio::Type::BALANCE || _entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET) {
_entryData->_checkType == MacroConditionAudio::Type::SYNC_OFFSET) {
_entryData->_outputCondition = _entryData->_outputCondition =
static_cast<MacroConditionAudio::OutputCondition>(cond); static_cast<MacroConditionAudio::OutputCondition>(cond);
} else { } else {
@ -499,16 +556,15 @@ void MacroConditionAudioEdit::CheckTypeChanged(int idx)
} }
auto lock = LockContext(); auto lock = LockContext();
_entryData->_checkType = static_cast<MacroConditionAudio::Type>( _entryData->SetType(static_cast<MacroConditionAudio::Type>(
_checkTypes->itemData(idx).toInt()); _checkTypes->itemData(idx).toInt()));
const QSignalBlocker b(_condition); const QSignalBlocker b(_condition);
if (_entryData->_checkType == if (_entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME ||
MacroConditionAudio::Type::OUTPUT_VOLUME || _entryData->GetType() == MacroConditionAudio::Type::BALANCE ||
_entryData->_checkType == MacroConditionAudio::Type::BALANCE || _entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET) {
_entryData->_checkType == MacroConditionAudio::Type::SYNC_OFFSET) {
populateOutputConditionSelection(_condition); populateOutputConditionSelection(_condition);
} else if (_entryData->_checkType == } else if (_entryData->GetType() ==
MacroConditionAudio::Type::CONFIGURED_VOLUME) { MacroConditionAudio::Type::CONFIGURED_VOLUME) {
populateVolumeConditionSelection(_condition); populateVolumeConditionSelection(_condition);
} }
@ -526,17 +582,16 @@ void MacroConditionAudioEdit::UpdateEntryData()
_syncOffset->SetValue(_entryData->_syncOffset); _syncOffset->SetValue(_entryData->_syncOffset);
_monitorTypes->setCurrentIndex(_entryData->_monitorType); _monitorTypes->setCurrentIndex(_entryData->_monitorType);
_balance->SetDoubleValue(_entryData->_balance); _balance->SetDoubleValue(_entryData->_balance);
_checkTypes->setCurrentIndex(_checkTypes->findData( _checkTypes->setCurrentIndex(
static_cast<int>(_entryData->_checkType))); _checkTypes->findData(static_cast<int>(_entryData->GetType())));
if (_entryData->_checkType == if (_entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME ||
MacroConditionAudio::Type::OUTPUT_VOLUME || _entryData->GetType() == MacroConditionAudio::Type::BALANCE ||
_entryData->_checkType == MacroConditionAudio::Type::BALANCE || _entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET) {
_entryData->_checkType == MacroConditionAudio::Type::SYNC_OFFSET) {
populateOutputConditionSelection(_condition); populateOutputConditionSelection(_condition);
_condition->setCurrentIndex( _condition->setCurrentIndex(
static_cast<int>(_entryData->_outputCondition)); static_cast<int>(_entryData->_outputCondition));
} else if (_entryData->_checkType == } else if (_entryData->GetType() ==
MacroConditionAudio::Type::CONFIGURED_VOLUME) { MacroConditionAudio::Type::CONFIGURED_VOLUME) {
populateVolumeConditionSelection(_condition); populateVolumeConditionSelection(_condition);
_condition->setCurrentIndex( _condition->setCurrentIndex(
@ -554,9 +609,9 @@ void MacroConditionAudioEdit::SetWidgetVisibility()
} }
_volume->setVisible( _volume->setVisible(
_entryData->_checkType == _entryData->GetType() ==
MacroConditionAudio::Type::OUTPUT_VOLUME || MacroConditionAudio::Type::OUTPUT_VOLUME ||
(_entryData->_checkType == (_entryData->GetType() ==
MacroConditionAudio::Type::CONFIGURED_VOLUME && MacroConditionAudio::Type::CONFIGURED_VOLUME &&
(_entryData->_volumeCondition == (_entryData->_volumeCondition ==
MacroConditionAudio::VolumeCondition::ABOVE || MacroConditionAudio::VolumeCondition::ABOVE ||
@ -565,20 +620,20 @@ void MacroConditionAudioEdit::SetWidgetVisibility()
_entryData->_volumeCondition == _entryData->_volumeCondition ==
MacroConditionAudio::VolumeCondition::BELOW))); MacroConditionAudio::VolumeCondition::BELOW)));
_condition->setVisible( _condition->setVisible(
_entryData->_checkType == _entryData->GetType() ==
MacroConditionAudio::Type::OUTPUT_VOLUME || MacroConditionAudio::Type::OUTPUT_VOLUME ||
_entryData->_checkType == _entryData->GetType() ==
MacroConditionAudio::Type::CONFIGURED_VOLUME || MacroConditionAudio::Type::CONFIGURED_VOLUME ||
_entryData->_checkType == MacroConditionAudio::Type::BALANCE || _entryData->GetType() == MacroConditionAudio::Type::BALANCE ||
_entryData->_checkType == _entryData->GetType() ==
MacroConditionAudio::Type::SYNC_OFFSET); MacroConditionAudio::Type::SYNC_OFFSET);
_syncOffset->setVisible(_entryData->_checkType == _syncOffset->setVisible(_entryData->GetType() ==
MacroConditionAudio::Type::SYNC_OFFSET); MacroConditionAudio::Type::SYNC_OFFSET);
_monitorTypes->setVisible(_entryData->_checkType == _monitorTypes->setVisible(_entryData->GetType() ==
MacroConditionAudio::Type::MONITOR); MacroConditionAudio::Type::MONITOR);
_balance->setVisible(_entryData->_checkType == _balance->setVisible(_entryData->GetType() ==
MacroConditionAudio::Type::BALANCE); MacroConditionAudio::Type::BALANCE);
_volMeter->setVisible(_entryData->_checkType == _volMeter->setVisible(_entryData->GetType() ==
MacroConditionAudio::Type::OUTPUT_VOLUME); MacroConditionAudio::Type::OUTPUT_VOLUME);
adjustSize(); adjustSize();
} }

View File

@ -37,6 +37,8 @@ public:
MONITOR, MONITOR,
BALANCE, BALANCE,
}; };
void SetType(const Type &);
Type GetType() const { return _checkType; }
enum class OutputCondition { enum class OutputCondition {
ABOVE, ABOVE,
@ -56,7 +58,6 @@ public:
NumberVariable<int> _syncOffset = 0; NumberVariable<int> _syncOffset = 0;
obs_monitoring_type _monitorType = OBS_MONITORING_TYPE_NONE; obs_monitoring_type _monitorType = OBS_MONITORING_TYPE_NONE;
NumberVariable<double> _balance = 0.5; NumberVariable<double> _balance = 0.5;
Type _checkType = Type::OUTPUT_VOLUME;
OutputCondition _outputCondition = OutputCondition::ABOVE; OutputCondition _outputCondition = OutputCondition::ABOVE;
VolumeCondition _volumeCondition = VolumeCondition::ABOVE; VolumeCondition _volumeCondition = VolumeCondition::ABOVE;
obs_volmeter_t *_volmeter = nullptr; obs_volmeter_t *_volmeter = nullptr;
@ -67,7 +68,9 @@ private:
bool CheckSyncOffset(); bool CheckSyncOffset();
bool CheckMonitor(); bool CheckMonitor();
bool CheckBalance(); bool CheckBalance();
void SetupTempVars();
Type _checkType = Type::OUTPUT_VOLUME;
float _peak = -std::numeric_limits<float>::infinity(); float _peak = -std::numeric_limits<float>::infinity();
static bool _registered; static bool _registered;
static const std::string id; static const std::string id;