diff --git a/modules/web/fm95.html b/modules/web/fm95.html index 828954e..b84b7bb 100644 --- a/modules/web/fm95.html +++ b/modules/web/fm95.html @@ -161,10 +161,11 @@ let histInput = new Array(MAX_PTS).fill(null); let histAudio = new Array(MAX_PTS).fill(null); let histAgc = new Array(MAX_PTS).fill(null); + let histBs = new Array(MAX_PTS).fill(null); // animation state - let targets = { input: null, audio: null, agc: null }; - let current = { input: null, audio: null, agc: null }; + let targets = { input: null, audio: null, agc: null, bs: null }; + let current = { input: null, audio: null, agc: null, bs: null }; let rafId = null; const LERP = 0.18; @@ -177,7 +178,7 @@ rafId = null; let dirty = false; - for (const key of ['input', 'audio', 'agc']) { + for (const key of ['input', 'audio', 'agc', 'bs']) { if (targets[key] === null) continue; const prev = current[key] ?? targets[key]; const next = prev + (targets[key] - prev) * LERP; @@ -192,7 +193,8 @@ // update only the tip of each history array histInput[histInput.length - 1] = current.input; histAudio[histAudio.length - 1] = current.audio; - histAgc[histAgc.length - 1] = current.agc; + histAgc[histAgc.length - 1] = current.agc; + histBs[histBs.length - 1] = current.bs; drawScope(); if (dirty) rafId = requestAnimationFrame(animStep); @@ -226,7 +228,7 @@ ctx.fillRect(0, 0, W, H); let yMin = -1, yMax = 1; - const vals = [...histInput, ...histAudio, ...histAgc].filter(v => v !== null); + const vals = [...histInput, ...histAudio, ...histAgc, ...histBs].filter(v => v !== null); if (vals.length) { yMin = Math.min(...vals); yMax = Math.max(...vals); @@ -286,6 +288,7 @@ drawLine(histInput, '#f472b6'); drawLine(histAudio, '#38bdf8'); drawLine(histAgc, '#fb923c'); + drawLine(histBs, '#34d399'); } function decode(b64) { @@ -314,13 +317,16 @@ const iv = current.input ?? values[3]; const av = current.audio ?? values[4]; const gv = current.agc ?? values[2]; + const hv = current.bs ?? values[1]; histInput.push(iv); if (histInput.length > MAX_PTS) histInput.shift(); histAudio.push(av); if (histAudio.length > MAX_PTS) histAudio.shift(); histAgc.push(gv); if (histAgc.length > MAX_PTS) histAgc.shift(); + histBs.push(hv); if (histBs.length > MAX_PTS) histBs.shift(); animateTo('input', values[3]); animateTo('audio', values[4]); animateTo('agc', values[2]); + animateTo('bs', values[1]); document.getElementById('last-update').textContent = `Last update: ${new Date().toLocaleTimeString()}`; }