From 7478c149b36a181ba4f99b8a886ec5b2c3cf55e8 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Sun, 29 Jun 2025 20:15:06 +0200 Subject: [PATCH] Add option to toggle mute state of audio source --- data/locale/en-US.ini | 1 + plugins/base/macro-action-audio.cpp | 52 +++++++++++++++++------------ plugins/base/macro-action-audio.hpp | 1 + 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 461e4816..4d246564 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -826,6 +826,7 @@ AdvSceneSwitcher.action.wait.entry.random="Wait for{{waitType}}duration from{{du AdvSceneSwitcher.action.audio="Audio" AdvSceneSwitcher.action.audio.type.mute="Mute" AdvSceneSwitcher.action.audio.type.unmute="Unmute" +AdvSceneSwitcher.action.audio.type.toggleMute="Toggle mute" AdvSceneSwitcher.action.audio.type.sourceVolume="Set source volume" AdvSceneSwitcher.action.audio.type.masterVolume="Set master volume" AdvSceneSwitcher.action.audio.type.syncOffset="Set sync offset" diff --git a/plugins/base/macro-action-audio.cpp b/plugins/base/macro-action-audio.cpp index db02dd6b..edf96080 100644 --- a/plugins/base/macro-action-audio.cpp +++ b/plugins/base/macro-action-audio.cpp @@ -16,25 +16,28 @@ bool MacroActionAudio::_registered = MacroActionFactory::Register( {MacroActionAudio::Create, MacroActionAudioEdit::Create, "AdvSceneSwitcher.action.audio"}); -static const std::map actionTypes = { - {MacroActionAudio::Action::MUTE, - "AdvSceneSwitcher.action.audio.type.mute"}, - {MacroActionAudio::Action::UNMUTE, - "AdvSceneSwitcher.action.audio.type.unmute"}, - {MacroActionAudio::Action::SOURCE_VOLUME, - "AdvSceneSwitcher.action.audio.type.sourceVolume"}, - {MacroActionAudio::Action::MASTER_VOLUME, - "AdvSceneSwitcher.action.audio.type.masterVolume"}, - {MacroActionAudio::Action::SYNC_OFFSET, - "AdvSceneSwitcher.action.audio.type.syncOffset"}, - {MacroActionAudio::Action::MONITOR, - "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::vector> + actionTypes = { + {MacroActionAudio::Action::MUTE, + "AdvSceneSwitcher.action.audio.type.mute"}, + {MacroActionAudio::Action::UNMUTE, + "AdvSceneSwitcher.action.audio.type.unmute"}, + {MacroActionAudio::Action::TOGGLE_MUTE, + "AdvSceneSwitcher.action.audio.type.toggleMute"}, + {MacroActionAudio::Action::SOURCE_VOLUME, + "AdvSceneSwitcher.action.audio.type.sourceVolume"}, + {MacroActionAudio::Action::MASTER_VOLUME, + "AdvSceneSwitcher.action.audio.type.masterVolume"}, + {MacroActionAudio::Action::SYNC_OFFSET, + "AdvSceneSwitcher.action.audio.type.syncOffset"}, + {MacroActionAudio::Action::MONITOR, + "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 fadeTypes = { @@ -255,6 +258,9 @@ bool MacroActionAudio::PerformAction() case Action::UNMUTE: obs_source_set_muted(s, false); break; + case Action::TOGGLE_MUTE: + obs_source_set_muted(s, !obs_source_muted(s)); + break; case Action::SOURCE_VOLUME: case Action::MASTER_VOLUME: if (_fade) { @@ -287,7 +293,10 @@ bool MacroActionAudio::PerformAction() void MacroActionAudio::LogAction() const { - auto it = actionTypes.find(_action); + auto it = std::find_if( + actionTypes.begin(), actionTypes.end(), + [this](const std::pair + &item) { return item.first == _action; }); if (it != actionTypes.end()) { auto &[_, action] = *it; ablog(LOG_INFO, @@ -632,8 +641,7 @@ void MacroActionAudioEdit::SetWidgetVisibility() if (_entryData->_action != MacroActionAudio::Action::MASTER_VOLUME && obs_get_version() >= MAKE_SEMANTIC_VERSION(29, 0, 0)) { _actions->removeItem(_actions->findText(obs_module_text( - actionTypes.at(MacroActionAudio::Action::MASTER_VOLUME) - .c_str()))); + "AdvSceneSwitcher.action.audio.type.masterVolume"))); } updateGeometry(); diff --git a/plugins/base/macro-action-audio.hpp b/plugins/base/macro-action-audio.hpp index 44847cce..248a0392 100644 --- a/plugins/base/macro-action-audio.hpp +++ b/plugins/base/macro-action-audio.hpp @@ -34,6 +34,7 @@ public: BALANCE, ENABLE_ON_TRACK, DISABLE_ON_TRACK, + TOGGLE_MUTE, }; enum class FadeType {