--[[ Adds hotkeys to quickly alter audio level. Might be helpful for something like quickly lowering volume for a bit with voice chat. ]] local btn0 = ac.ControlButton('__EXT_AUDIO_BTN_0', nil, nil, 0.2) local btn1 = ac.ControlButton('__EXT_AUDIO_BTN_1', nil, nil, 0.2) if not btn0:configured() and not btn1:configured() then return end local cfg = Config:mapSection('AUDIO_VOLUME_BUTTONS', { MODE = 'SET_RESTORE', LEVEL_0 = 0, LEVEL_1 = 0, STEP = 0.05, TRANSITION_LAG = 0.9, SHOW_MESSAGE = true, }) local audioTarget = 1 local audioSmooth = 1 local flag0 = false local flag1 = false local modes = { function () -- SET_RESTORE, default mode if btn0:down() then audioTarget = cfg.LEVEL_0 end if btn1:down() then audioTarget = 1 end end, HOLD_TO_ALTER = function () audioTarget = 1 if btn0:down() then audioTarget = cfg.LEVEL_0 end if btn1:down() then audioTarget = cfg.LEVEL_1 end end, PRESS_TO_ALTER = function () if btn0:pressed() then flag1 = false flag0 = not flag0 end if btn1:pressed() then flag0 = false flag1 = not flag1 end audioTarget = flag0 and cfg.LEVEL_0 or flag1 and cfg.LEVEL_1 or 1 end, UP_DOWN = function () if btn0:pressed() then audioTarget = audioTarget + cfg.STEP end if btn1:pressed() then audioTarget = audioTarget - cfg.STEP end end } local modeFn = modes[cfg.MODE] or modes[1] local function audioCallback() local previousTarget = audioTarget modeFn() audioTarget = math.saturateN(audioTarget) if previousTarget ~= audioTarget and cfg.SHOW_MESSAGE then ac.setSystemMessage('Volume Level', string.format('Volume changed to %.0f%%', audioTarget * 100)) end audioSmooth = math.applyLag(audioSmooth, audioTarget, cfg.TRANSITION_LAG, ac.getDeltaT()) return audioSmooth end ac.onAudioVolumeCalculation(audioCallback)