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));