From 1fe186bdb8ec2666f4ec35762bf3ad0070345127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=27=C3=A9lectron=20rare?= <108685187+electron-rare@users.noreply.github.com> Date: Thu, 2 Jul 2026 22:39:47 +0200 Subject: [PATCH] feat(web): master gain slider with -/+ steppers The web surface had no master control at all (SC-only via /control/doMaster 0..2). Adds the slider next to Tempo with 0.05 steppers and a live readout, same pattern as the tempo control. --- web_realart/public/control/index.html | 1 + web_realart/public/control/js/transport.js | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/web_realart/public/control/index.html b/web_realart/public/control/index.html index c46352a..62d52af 100644 --- a/web_realart/public/control/index.html +++ b/web_realart/public/control/index.html @@ -38,6 +38,7 @@ +
Quant diff --git a/web_realart/public/control/js/transport.js b/web_realart/public/control/js/transport.js index 26bf4e6..00d1aeb 100644 --- a/web_realart/public/control/js/transport.js +++ b/web_realart/public/control/js/transport.js @@ -42,6 +42,24 @@ export function init() { tMinus && tMinus.addEventListener("click", () => stepTempo(-1)); tPlus && tPlus.addEventListener("click", () => stepTempo(1)); + // Master gain: slider + -/+ steppers (0.05 per click), SC /control/doMaster (0..2) + const master = document.getElementById("master"); + const masterVal = document.getElementById("master-val"); + const pushMaster = () => { + if (masterVal) masterVal.textContent = (+master.value).toFixed(2); + send("/control/doMaster", +master.value); + }; + master && master.addEventListener("input", pushMaster); + const stepMaster = (d) => { + if (!master) return; + master.value = Math.max(+master.min, Math.min(+master.max, +master.value + d)).toFixed(2); + pushMaster(); + }; + const mMinus = document.getElementById("master-minus"); + const mPlus = document.getElementById("master-plus"); + mMinus && mMinus.addEventListener("click", () => stepMaster(-0.05)); + mPlus && mPlus.addEventListener("click", () => stepMaster(0.05)); + // Filter const filt = document.getElementById("filter"); filt && filt.addEventListener("input", () => send("/control/fx/filter", +filt.value));