M26: diag m26d envelope PWR ON (pdc/gains/peak mix+nguon) quanh wake/cold

This commit is contained in:
2026-09-07 20:55:52 +07:00
parent 3601748881
commit 19c1e032ee
2 changed files with 55 additions and 8 deletions
+44
View File
@@ -2084,6 +2084,44 @@ async function fxRtWsConnect(wsUrl, directPort) {
try { shim._worker.postMessage({ kind: 'init', wsUrl, port: directPort || undefined }, directPort ? [directPort] : []); } catch (e) {}
return shim;
}
// m26d DIAG (tam): do envelope that quanh PWR ON -- pdcDelay samples / masterFx
// gains / peak mix that (masterBus.analyser) + peak nguon pre-FX
// (outputAnalyser). XOA toan bo sau khi co ket luan (M26 fix phase).
function _m26dPeak(an) {
try {
if (!an) return -1;
const _b = new Float32Array(an.fftSize || 2048);
an.getFloatTimeDomainData(_b);
let _m = 0;
for (let _i = 0; _i < _b.length; _i++) { const _v = Math.abs(_b[_i]); if (_v > _m) _m = _v; }
return _m;
} catch (e) { return -2; }
}
function _m26dSnap(tag) {
try {
if (!_phArmed()) return;
const _ctx = getAudioContext();
const _bus = masterBus;
let _pd = -1, _gx = -1, _gd = -1, _pk = -1, _ps = -1;
try { if (_bus && _bus.pdcDelay && _ctx) _pd = Math.round(_bus.pdcDelay.delayTime.value * _ctx.sampleRate); } catch (e) {}
try { if (_bus && _bus.masterFxGain) _gx = _bus.masterFxGain.gain.value; } catch (e) {}
try { if (_bus && _bus.masterFxDryGain) _gd = _bus.masterFxDryGain.gain.value; } catch (e) {}
try { if (_bus && _bus.analyser) _pk = _m26dPeak(_bus.analyser); } catch (e) {}
try { if (_bus && _bus.outputAnalyser) _ps = _m26dPeak(_bus.outputAnalyser); } catch (e) {}
_dbgLog('m26d_' + tag, 'pdc=' + _pd + ' gx=' + (_gx >= 0 ? _gx.toFixed(4) : 'na') + ' gd=' + (_gd >= 0 ? _gd.toFixed(4) : 'na') + ' pk=' + _pk + ' ps=' + _ps + ' act=' + (fxRt && fxRt.active ? 1 : 0) + ' wrm=' + (fxRt && fxRt.warm ? 1 : 0) + ' fi=' + (fxRt && fxRt.fadedIn ? 1 : 0));
} catch (e) {}
}
function _m26dSeries(tok, tag) {
const _t = [40, 90, 150, 250, 400, 650, 1000, 1500, 2500];
for (let _i = 0; _i < _t.length; _i++) {
(function (_ms, _i2) {
setTimeout(function () {
try { if (tok !== fxRt.startToken) return; if (!_phArmed()) return; _m26dSnap(tag + '_' + _i2); } catch (e) {}
}, _ms);
})(_t[_i], _i);
}
}
async function fxRtStart() {
// V21: mọi play/chain-change gọi đây — hủy idle timer của lần stop trước
// (không để session warm bị teardown giữa lúc đang chơi).
@@ -2146,6 +2184,7 @@ async function fxRtStart() {
try { if (fxRt.node) fxRt.node.disconnect(masterBus.masterFxGain); } catch (e) {}
try { if (fxRt.node) fxRt.node.connect(masterBus.masterFxGain); } catch (e) {}
fxRt.active = true;
try { _m26dSnap('wake0'); } catch (e) {}
fxRt.inQueue = [];
fxRt.outL = null;
fxRt.outR = null;
@@ -2168,8 +2207,10 @@ async function fxRtStart() {
const _wHook = (ev) => {
try {
if (ev.data && ev.data.type === 'started' && wToken === fxRt.startToken) {
try { _m26dSnap('won_st'); } catch (e) {}
fxRt.fadedIn = true;
fxRtCrossfade(true, wToken);
try { _m26dSeries(wToken, 'won'); } catch (e) {}
setTimeout(() => { if (wToken === fxRt.startToken) fxRtApplyPdc(); }, 250);
}
} catch (e) {}
@@ -2297,8 +2338,10 @@ async function fxRtStart() {
if (fxRt.fadedIn) return;
setTimeout(() => {
if (token !== fxRt.startToken) return;
try { _m26dSnap('con_st'); } catch (e) {}
fxRt.fadedIn = true;
fxRtCrossfade(true, token);
try { _m26dSeries(token, 'con'); } catch (e) {}
// Dry gan silent (tc 0.025) roi moi tre pdcDelay — tranh gap khi delay
// dang lon dan.
setTimeout(() => fxRtApplyPdc(), 250);
@@ -2679,6 +2722,7 @@ function fxRtCrossfade(toFx, token) {
const bus = masterBus;
if (!ctx || !bus || !bus.masterFxGain || !bus.masterFxDryGain) return;
if (token !== undefined && token !== fxRt.startToken) return;
try { _m26dSnap(toFx ? 'xf_on' : 'xf_off'); } catch (e) {}
const tc = 0.025;
try {
bus.masterFxGain.gain.setTargetAtTime(toFx ? 1 : 0, ctx.currentTime, tc);