From f89bb1a7508fa74037c1dfb2a74668c2beead2fc Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 4 Nov 2023 17:37:33 +0100 Subject: [PATCH] Add temp variable support for audio condition --- data/locale/en-US.ini | 9 ++ src/macro-core/macro-condition-audio.cpp | 111 +++++++++++++++++------ src/macro-core/macro-condition-audio.hpp | 5 +- 3 files changed, 96 insertions(+), 29 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 3a6d61d7..895a619b 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -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.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.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene" diff --git a/src/macro-core/macro-condition-audio.cpp b/src/macro-core/macro-condition-audio.cpp index da3016d3..fcf68212 100644 --- a/src/macro-core/macro-condition-audio.cpp +++ b/src/macro-core/macro-condition-audio.cpp @@ -47,6 +47,12 @@ const static std::map "AdvSceneSwitcher.condition.audio.state.unmute"}, }; +void MacroConditionAudio::SetType(const Type &type) +{ + _checkType = type; + SetupTempVars(); +} + MacroConditionAudio::~MacroConditionAudio() { obs_volmeter_remove_callback(_volmeter, SetVolumeLevel, this); @@ -74,6 +80,7 @@ bool MacroConditionAudio::CheckOutputCondition() } SetVariableValue(std::to_string(curVolume)); + SetTempVarValue("output_volume", std::to_string(curVolume)); // Reset for next check _peak = -std::numeric_limits::infinity(); @@ -118,6 +125,9 @@ bool MacroConditionAudio::CheckVolumeCondition() break; } + SetTempVarValue("configured_volume", std::to_string(curVolume)); + SetTempVarValue("muted", muted ? "true" : "false"); + obs_source_release(s); return ret; } @@ -137,6 +147,7 @@ bool MacroConditionAudio::CheckSyncOffset() ret = curOffset < _syncOffset; } SetVariableValue(std::to_string(curOffset)); + SetTempVarValue("sync_offset", std::to_string(curOffset)); obs_source_release(s); return ret; } @@ -151,6 +162,8 @@ bool MacroConditionAudio::CheckMonitor() auto s = obs_weak_source_get_source(_audioSource.GetSource()); ret = obs_source_get_monitoring_type(s) == _monitorType; SetVariableValue(""); + SetTempVarValue("monitor", + std::to_string(obs_source_get_monitoring_type(s))); obs_source_release(s); return ret; } @@ -170,6 +183,7 @@ bool MacroConditionAudio::CheckBalance() ret = curBalance < _balance; } SetVariableValue(std::to_string(curBalance)); + SetTempVarValue("balance", std::to_string(curBalance)); obs_source_release(s); return ret; } @@ -290,6 +304,50 @@ void MacroConditionAudio::ResetVolmeter() _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) { list->clear(); @@ -479,10 +537,9 @@ void MacroConditionAudioEdit::ConditionChanged(int cond) } auto lock = LockContext(); - if (_entryData->_checkType == - MacroConditionAudio::Type::OUTPUT_VOLUME || - _entryData->_checkType == MacroConditionAudio::Type::BALANCE || - _entryData->_checkType == MacroConditionAudio::Type::SYNC_OFFSET) { + if (_entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME || + _entryData->GetType() == MacroConditionAudio::Type::BALANCE || + _entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET) { _entryData->_outputCondition = static_cast(cond); } else { @@ -499,16 +556,15 @@ void MacroConditionAudioEdit::CheckTypeChanged(int idx) } auto lock = LockContext(); - _entryData->_checkType = static_cast( - _checkTypes->itemData(idx).toInt()); + _entryData->SetType(static_cast( + _checkTypes->itemData(idx).toInt())); const QSignalBlocker b(_condition); - if (_entryData->_checkType == - MacroConditionAudio::Type::OUTPUT_VOLUME || - _entryData->_checkType == MacroConditionAudio::Type::BALANCE || - _entryData->_checkType == MacroConditionAudio::Type::SYNC_OFFSET) { + if (_entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME || + _entryData->GetType() == MacroConditionAudio::Type::BALANCE || + _entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET) { populateOutputConditionSelection(_condition); - } else if (_entryData->_checkType == + } else if (_entryData->GetType() == MacroConditionAudio::Type::CONFIGURED_VOLUME) { populateVolumeConditionSelection(_condition); } @@ -526,17 +582,16 @@ void MacroConditionAudioEdit::UpdateEntryData() _syncOffset->SetValue(_entryData->_syncOffset); _monitorTypes->setCurrentIndex(_entryData->_monitorType); _balance->SetDoubleValue(_entryData->_balance); - _checkTypes->setCurrentIndex(_checkTypes->findData( - static_cast(_entryData->_checkType))); + _checkTypes->setCurrentIndex( + _checkTypes->findData(static_cast(_entryData->GetType()))); - if (_entryData->_checkType == - MacroConditionAudio::Type::OUTPUT_VOLUME || - _entryData->_checkType == MacroConditionAudio::Type::BALANCE || - _entryData->_checkType == MacroConditionAudio::Type::SYNC_OFFSET) { + if (_entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME || + _entryData->GetType() == MacroConditionAudio::Type::BALANCE || + _entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET) { populateOutputConditionSelection(_condition); _condition->setCurrentIndex( static_cast(_entryData->_outputCondition)); - } else if (_entryData->_checkType == + } else if (_entryData->GetType() == MacroConditionAudio::Type::CONFIGURED_VOLUME) { populateVolumeConditionSelection(_condition); _condition->setCurrentIndex( @@ -554,9 +609,9 @@ void MacroConditionAudioEdit::SetWidgetVisibility() } _volume->setVisible( - _entryData->_checkType == + _entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME || - (_entryData->_checkType == + (_entryData->GetType() == MacroConditionAudio::Type::CONFIGURED_VOLUME && (_entryData->_volumeCondition == MacroConditionAudio::VolumeCondition::ABOVE || @@ -565,20 +620,20 @@ void MacroConditionAudioEdit::SetWidgetVisibility() _entryData->_volumeCondition == MacroConditionAudio::VolumeCondition::BELOW))); _condition->setVisible( - _entryData->_checkType == + _entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME || - _entryData->_checkType == + _entryData->GetType() == MacroConditionAudio::Type::CONFIGURED_VOLUME || - _entryData->_checkType == MacroConditionAudio::Type::BALANCE || - _entryData->_checkType == + _entryData->GetType() == MacroConditionAudio::Type::BALANCE || + _entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET); - _syncOffset->setVisible(_entryData->_checkType == + _syncOffset->setVisible(_entryData->GetType() == MacroConditionAudio::Type::SYNC_OFFSET); - _monitorTypes->setVisible(_entryData->_checkType == + _monitorTypes->setVisible(_entryData->GetType() == MacroConditionAudio::Type::MONITOR); - _balance->setVisible(_entryData->_checkType == + _balance->setVisible(_entryData->GetType() == MacroConditionAudio::Type::BALANCE); - _volMeter->setVisible(_entryData->_checkType == + _volMeter->setVisible(_entryData->GetType() == MacroConditionAudio::Type::OUTPUT_VOLUME); adjustSize(); } diff --git a/src/macro-core/macro-condition-audio.hpp b/src/macro-core/macro-condition-audio.hpp index ef2dfa62..261b9981 100644 --- a/src/macro-core/macro-condition-audio.hpp +++ b/src/macro-core/macro-condition-audio.hpp @@ -37,6 +37,8 @@ public: MONITOR, BALANCE, }; + void SetType(const Type &); + Type GetType() const { return _checkType; } enum class OutputCondition { ABOVE, @@ -56,7 +58,6 @@ public: NumberVariable _syncOffset = 0; obs_monitoring_type _monitorType = OBS_MONITORING_TYPE_NONE; NumberVariable _balance = 0.5; - Type _checkType = Type::OUTPUT_VOLUME; OutputCondition _outputCondition = OutputCondition::ABOVE; VolumeCondition _volumeCondition = VolumeCondition::ABOVE; obs_volmeter_t *_volmeter = nullptr; @@ -67,7 +68,9 @@ private: bool CheckSyncOffset(); bool CheckMonitor(); bool CheckBalance(); + void SetupTempVars(); + Type _checkType = Type::OUTPUT_VOLUME; float _peak = -std::numeric_limits::infinity(); static bool _registered; static const std::string id;