V45.27: fix (1) PR tab preview cam khi sub-tab PR khong ARM - ARM MAIN/SECTION cuc bo, khong leak sang PR (3 nhanh: vkbNoteOn prArmedIds + attachMidiHandler bridge bPrArmed + SonicSF arSubs them && isArmed); (2) crackle preview VST2 instrument loop/tremolo - ring worklet bridgeAudioWorklet 16->32 block (~170ms) hap thu stall render loop C++ khi instrument xu li loop/tremolo nang CPU (8->16 truoc da dung tremolo, 16 chua du); them stats overrun/underrun tu worklet -> getDiag/preview_diag (ws=ov/un) de xac minh con crackle khong. v=202608311809
This commit is contained in:
+10
-9
@@ -280,7 +280,8 @@ const _dbgWorkletState = () => {
|
||||
try {
|
||||
if (window.BridgeAudioNode && window.BridgeAudioNode.getDiag) {
|
||||
const _d = window.BridgeAudioNode.getDiag();
|
||||
return 'wl=' + (_d.useWorklet ? 'y' : 'n') + ' pre=' + _d.preBufferLen + ' ch=' + _d.chunksLen;
|
||||
const _ws = _d.ws ? (' ov=' + _d.ws.overruns + ' un=' + _d.ws.underruns + ' ring=' + _d.ws.ring) : '';
|
||||
return 'wl=' + (_d.useWorklet ? 'y' : 'n') + ' pre=' + _d.preBufferLen + ' ch=' + _d.chunksLen + _ws;
|
||||
}
|
||||
} catch (e) {}
|
||||
return 'wl=n/a';
|
||||
@@ -11118,7 +11119,7 @@ const PianoRollTabEditor = ({ st, zoom, bpm, viewportWidth, activeTracks, onClos
|
||||
const _pdTab = activeTabRef.current;
|
||||
const _pdSub = subTabsRef.current ? (subTabsRef.current.find(s => s.id === _pdTab) || {}).type : null;
|
||||
const _kbArmedTab = !!(subTabsRef.current || []).some(function (s) { return s.type === 'PIANO_ROLL' && s.isArmed && s.trackId === st.trackId; });
|
||||
_dbgLog('preview_diag', 'src=keybed trk=' + st.trackId + ' kbTrk=' + (kbTrk ? kbTrk.id : 'UNDEF') + ' kbArmedTab=' + (_kbArmedTab ? 1 : 0) + ' armedTrk=' + (kbTrk && kbTrk.isArmed ? 1 : 0) + ' sl=' + (_kbSilent ? 1 : 0) + ' tab=' + _pdTab + ' sub=' + (_pdSub || 'none') + ' play=' + (isPlayingRef.current ? 1 : 0) + ' br=' + (window.SonicMidiRouter && window.SonicMidiRouter.isBridgeActive() ? 1 : 0) + ' fxRt=' + (fxRt.active ? 1 : 0) + ' dest=' + _pdDest + ' bd=' + (_pdD ? ('i=' + _pdD.initialized + ' wl=' + _pdD.useWorklet + ' nd=' + _pdD.hasWorkletNode + ' pre=' + _pdD.preBufferLen + ' ch=' + _pdD.chunksLen + ' g=' + _pdD.gain) : 'MISSING') + ' mb=' + (!!masterBus));
|
||||
_dbgLog('preview_diag', 'src=keybed trk=' + st.trackId + ' kbTrk=' + (kbTrk ? kbTrk.id : 'UNDEF') + ' kbArmedTab=' + (_kbArmedTab ? 1 : 0) + ' armedTrk=' + (kbTrk && kbTrk.isArmed ? 1 : 0) + ' sl=' + (_kbSilent ? 1 : 0) + ' tab=' + _pdTab + ' sub=' + (_pdSub || 'none') + ' play=' + (isPlayingRef.current ? 1 : 0) + ' br=' + (window.SonicMidiRouter && window.SonicMidiRouter.isBridgeActive() ? 1 : 0) + ' fxRt=' + (fxRt.active ? 1 : 0) + ' dest=' + _pdDest + ' bd=' + (_pdD ? ('i=' + _pdD.initialized + ' wl=' + _pdD.useWorklet + ' nd=' + _pdD.hasWorkletNode + ' pre=' + _pdD.preBufferLen + ' ch=' + _pdD.chunksLen + ' g=' + _pdD.gain + ' ws=' + (_pdD.ws ? (_pdD.ws.overruns + '/' + _pdD.ws.underruns) : '-')) : 'MISSING') + ' mb=' + (!!masterBus));
|
||||
} catch (e) {}
|
||||
// V45.19 Bug 2: _kbSilent -> bo qua phat (MAIN/SECTION + ARM off = cam).
|
||||
if (!_kbSilent) {
|
||||
@@ -18666,9 +18667,9 @@ const App = () => {
|
||||
var bPrArmed = {};
|
||||
if (_isPrTabNow) {
|
||||
try {
|
||||
// V45.25: chi sub-tab PR dang active; khong gom ARM sub-tab khac.
|
||||
// V45.27: chi sub-tab PR dang active VA co ARM (isArmed); khong gom ARM sub-tab khac / MAIN.
|
||||
var _actPrSub = (subTabsRef.current || []).find(function (s) { return s.id === activeTabRef.current; });
|
||||
if (_actPrSub && _actPrSub.type === 'PIANO_ROLL' && _actPrSub.trackId) bPrArmed[_actPrSub.trackId] = true;
|
||||
if (_actPrSub && _actPrSub.type === 'PIANO_ROLL' && _actPrSub.isArmed && _actPrSub.trackId) bPrArmed[_actPrSub.trackId] = true;
|
||||
} catch (e) {}
|
||||
}
|
||||
bTracks.forEach(function (bt) {
|
||||
@@ -18687,10 +18688,10 @@ const App = () => {
|
||||
} else if (window.SonicSF) {
|
||||
var allTracks = activeTracksRef.current || [];
|
||||
var arSubs = [];
|
||||
// V45.25: chi sub-tab PR dang active; khong gom ARM sub-tab khac.
|
||||
// V45.27: chi sub-tab PR dang active VA co ARM (isArmed); khong gom ARM sub-tab khac / MAIN.
|
||||
if (_isPrTabNow && subTabsRef && subTabsRef.current) {
|
||||
var _actPrSub = subTabsRef.current.find(function(s) { return s.id === activeTabRef.current; });
|
||||
if (_actPrSub && _actPrSub.type === 'PIANO_ROLL' && _actPrSub.trackId) arSubs.push(_actPrSub);
|
||||
if (_actPrSub && _actPrSub.type === 'PIANO_ROLL' && _actPrSub.isArmed && _actPrSub.trackId) arSubs.push(_actPrSub);
|
||||
}
|
||||
var armedTracks = _isPrTabNow ? [] : allTracks.filter(function(t) { return t.isArmed; });
|
||||
// Piano Roll arming has priority: route to each armed sub-tab's parent track
|
||||
@@ -23925,11 +23926,11 @@ const App = () => {
|
||||
const _prTabNow = (subTabsRef.current || []).find(function (s) { return s.id === activeTabRef.current; });
|
||||
const _isPrTabNow = !!(_prTabNow && _prTabNow.type === 'PIANO_ROLL');
|
||||
const prArmedIds = {};
|
||||
// V45.25: PR tab preview chi track dang edit (sub-tab active) - bat ke ARM.
|
||||
// V45.27: PR tab preview chi track dang edit (sub-tab active) VA chi khi sub-tab do ARM (isArmed).
|
||||
// ARM tu sub-tab PR khac / track MAIN KHONG leak sang PR tab nay.
|
||||
try {
|
||||
if (_isPrTabNow) {
|
||||
if (_prTabNow.trackId) prArmedIds[_prTabNow.trackId] = true;
|
||||
if (_prTabNow.isArmed && _prTabNow.trackId) prArmedIds[_prTabNow.trackId] = true;
|
||||
}
|
||||
} catch (e) {}
|
||||
const armed = allTracks.filter(function (t) { return t.isArmed; });
|
||||
@@ -23948,7 +23949,7 @@ const App = () => {
|
||||
const _pdD = window.BridgeAudioNode ? window.BridgeAudioNode.getDiag() : null;
|
||||
const _pdTab = activeTabRef.current;
|
||||
const _pdSub = subTabsRef.current ? (subTabsRef.current.find(s => s.id === _pdTab) || {}).type : null;
|
||||
_dbgLog('preview_diag', 'armed=' + armed.length + ' trg=' + targets.length + ' prTab=' + (_isPrTabNow ? 1 : 0) + ' tab=' + _pdTab + ' sub=' + (_pdSub || 'none') + ' play=' + (isPlayingRef.current ? 1 : 0) + ' br=' + (window.SonicMidiRouter && window.SonicMidiRouter.isBridgeActive() ? 1 : 0) + ' fxRt=' + (fxRt.active ? 1 : 0) + ' dest=' + _pdDest + ' bd=' + (_pdD ? ('i=' + _pdD.initialized + ' wl=' + _pdD.useWorklet + ' nd=' + _pdD.hasWorkletNode + ' pre=' + _pdD.preBufferLen + ' ch=' + _pdD.chunksLen + ' g=' + _pdD.gain) : 'MISSING') + ' mb=' + (!!masterBus));
|
||||
_dbgLog('preview_diag', 'armed=' + armed.length + ' trg=' + targets.length + ' prTab=' + (_isPrTabNow ? 1 : 0) + ' tab=' + _pdTab + ' sub=' + (_pdSub || 'none') + ' play=' + (isPlayingRef.current ? 1 : 0) + ' br=' + (window.SonicMidiRouter && window.SonicMidiRouter.isBridgeActive() ? 1 : 0) + ' fxRt=' + (fxRt.active ? 1 : 0) + ' dest=' + _pdDest + ' bd=' + (_pdD ? ('i=' + _pdD.initialized + ' wl=' + _pdD.useWorklet + ' nd=' + _pdD.hasWorkletNode + ' pre=' + _pdD.preBufferLen + ' ch=' + _pdD.chunksLen + ' g=' + _pdD.gain + ' ws=' + (_pdD.ws ? (_pdD.ws.overruns + '/' + _pdD.ws.underruns) : '-')) : 'MISSING') + ' mb=' + (!!masterBus));
|
||||
} catch (e) {}
|
||||
// DIAG Bug 3/4: arm bo dem audio frames (500ms sau note-on) de biet
|
||||
// engine co gui audio ve JS khong (tach engine vs JS routing).
|
||||
|
||||
Reference in New Issue
Block a user