feat(web): master gain slider with -/+ steppers
CI build oscope-of / build-check (push) Has been cancelled

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.
This commit is contained in:
L'électron rare
2026-07-02 22:39:47 +02:00
parent d058858b23
commit 1fe186bdb8
2 changed files with 19 additions and 0 deletions
+1
View File
@@ -38,6 +38,7 @@
</div>
<button id="clear" class="wide">Tout couper</button>
<label>Tempo <button id="tempo-minus" class="tempo-step" type="button">-</button><input id="tempo" type="range" min="60" max="180" value="126"><button id="tempo-plus" class="tempo-step" type="button">+</button><span id="tempo-val">126</span></label>
<label>Master <button id="master-minus" class="tempo-step" type="button">-</button><input id="master" type="range" min="0" max="2" step="0.05" value="1"><button id="master-plus" class="tempo-step" type="button">+</button><span id="master-val">1.00</span></label>
<div class="quant-bar">
<span class="quant-label">Quant</span>
<button class="quant-btn" data-quant="0.5">½</button>
@@ -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));