fix: Bug 2 mastering — chainSignature order-sensitive (reorder rebuild graph); applyMasteringSettings sig gom chain; limiter/compressor default neutral (limThreshold 0, compThreshold 0 ratio 1) — them module khong tu cat volume (T2)

This commit is contained in:
2026-08-11 15:33:35 +07:00
parent aa06d40b98
commit 6da0c5b68d
2 changed files with 11 additions and 7 deletions
+5 -4
View File
@@ -639,7 +639,7 @@ function applyMasteringSettings(s) {
// Re-applying identical values in rapid bursts is "fast parameter automation"
// and makes Chromium flag the biquad EQ filters as unstable ("state is bad").
// Only touch the graph when a value actually changed.
const sig = [s.masterConnected, s.isBypassed, s.eqActive, s.eqLowGain, s.eqMid1Gain, s.eqMid2Gain, s.eqHighGain, s.imagerActive, s.w1, s.w2, s.w3, s.w4, s.maximizerActive, s.maxGain, s.maxSoftClip, s.maxUpward, s.ceiling, s.compActive, s.compThreshold, s.compRatio, s.compMakeup, s.limActive, s.limThreshold, s.excActive, s.excDrive, s.rebalActive, s.rebalMid, s.rebalSide].join('|');
const sig = [s.masterConnected, s.isBypassed, s.eqActive, s.eqLowGain, s.eqMid1Gain, s.eqMid2Gain, s.eqHighGain, s.imagerActive, s.w1, s.w2, s.w3, s.w4, s.maximizerActive, s.maxGain, s.maxSoftClip, s.maxUpward, s.ceiling, s.compActive, s.compThreshold, s.compRatio, s.compMakeup, s.limActive, s.limThreshold, s.excActive, s.excDrive, s.rebalActive, s.rebalMid, s.rebalSide, chainSignature(s.chain)].join('|');
if (sig === _lastMasteringSig) return;
_lastMasteringSig = sig;
@@ -1093,7 +1093,8 @@ const DEFAULT_MASTER_CHAIN = [
];
function chainSignature(chainArray) {
return (chainArray || []).map(m => (m.type || '') + (m.active ? '1' : '0')).join(',');
// Order-sensitive: reorder phai lam doi signature -> rebuild graph dung thu tu.
return (chainArray || []).map((m, i) => i + ':' + (m.type || '') + (m.active ? '1' : '0')).join(',');
}
// Track FX module factory (mastering_expand.md §II.4)
@@ -6446,8 +6447,8 @@ const ProfileModal = ({
ceiling: -0.1,
isBypassed: false,
chain: DEFAULT_MASTER_CHAIN.map(m => ({ ...m })),
compActive: false, compThreshold: -16, compRatio: 3, compMakeup: 0,
limActive: false, limThreshold: -1.0,
compActive: false, compThreshold: 0, compRatio: 1, compMakeup: 0, // neutral-then-apply: them module khong tu cat volume
limActive: false, limThreshold: 0, // neutral: limiter khong tu clip -1dB khi bat
excActive: false, excDrive: 40,
rebalActive: false, rebalMid: 0, rebalSide: 0,
});
File diff suppressed because one or more lines are too long