V45.29: fix wobble preview VST2 chord van con sau V45.28 - ring worklet bridgeAudioWorklet 48->80 block (~426ms) phu stall render loop C++ toi ~361ms do tu log (fxrt_bridge loopMax=361ms, fxrt_pump pump_gap 362ms, longtask d=346): ring 48 (256ms) van khong du -> underrun lap lai fade ve 0 = wobble; them worklet_stats log dinh ky moi ~2s vao dbg.log (preview_diag chi fire keybed/vkb, duong preview khac khong log ws= duoc) de xac minh ov/un sau fix. v=202608311832
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
var _initialized = false;
|
var _initialized = false;
|
||||||
var _useWorklet = false;
|
var _useWorklet = false;
|
||||||
var _workletStats = null; // stats tu worklet (overrun/underrun) — getDiag
|
var _workletStats = null; // stats tu worklet (overrun/underrun) — getDiag
|
||||||
|
var _statsLogAccum = 0; // dem stats messages — log dbg dinh ky (V45.29)
|
||||||
var _dest = null; // destination gain node da noi (chong connect trung)
|
var _dest = null; // destination gain node da noi (chong connect trung)
|
||||||
|
|
||||||
function _getCtx() {
|
function _getCtx() {
|
||||||
@@ -32,7 +33,7 @@
|
|||||||
console.warn('[BridgeAudioNode] AudioWorklet unavailable — ScriptProcessor fallback');
|
console.warn('[BridgeAudioNode] AudioWorklet unavailable — ScriptProcessor fallback');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var url = '/static/js/services/bridgeAudioWorklet.js?v=202608311820';
|
var url = '/static/js/services/bridgeAudioWorklet.js?v=202608311832';
|
||||||
_ctx.audioWorklet.addModule(url).then(function () {
|
_ctx.audioWorklet.addModule(url).then(function () {
|
||||||
if (!_initialized) return; // disconnect() happened while loading
|
if (!_initialized) return; // disconnect() happened while loading
|
||||||
if (_useWorklet) return; // already set up (init retry)
|
if (_useWorklet) return; // already set up (init retry)
|
||||||
@@ -44,7 +45,18 @@
|
|||||||
});
|
});
|
||||||
_workletNode.connect(_gainNode);
|
_workletNode.connect(_gainNode);
|
||||||
_workletNode.port.onmessage = function (ev) {
|
_workletNode.port.onmessage = function (ev) {
|
||||||
if (ev.data && ev.data.type === 'stats') _workletStats = ev.data;
|
if (ev.data && ev.data.type === 'stats') {
|
||||||
|
_workletStats = ev.data;
|
||||||
|
// V45.29: log dinh ky worklet_stats (moi ~2s) — preview_diag chi
|
||||||
|
// fire khi bam keybed/vkb, duong preview khac khong log ws= duoc.
|
||||||
|
try {
|
||||||
|
_statsLogAccum++;
|
||||||
|
if (_statsLogAccum >= 4) {
|
||||||
|
_statsLogAccum = 0;
|
||||||
|
if (window.__dbgLog) window.__dbgLog('worklet_stats', 'ov=' + ev.data.overruns + ' un=' + ev.data.underruns + ' ring=' + ev.data.ring + ' max=' + ev.data.max);
|
||||||
|
}
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
_useWorklet = true;
|
_useWorklet = true;
|
||||||
// drain pre-buffer into worklet (order preserved)
|
// drain pre-buffer into worklet (order preserved)
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
// app/static/js/services/bridgeAudioWorklet.js
|
// app/static/js/services/bridgeAudioWorklet.js
|
||||||
// VSTi crackle fix: audio sink chay tren audio thread (khong jank main thread).
|
// VSTi crackle fix: audio sink chay tren audio thread (khong jank main thread).
|
||||||
// - Ring block 256 mau, toi da 48 block (~256ms @48k) — hap thu jitter pump
|
// - Ring block 256 mau, toi da 80 block (~426ms @48k) — hap thu jitter pump
|
||||||
// (V45.28: 32->48 de dung wobble VST2 loop/tremolo khi nhan chord — chord
|
// (V45.29: 48->80 theo log thuc te: render loop C++ stall toi ~361ms —
|
||||||
// nhieu voice -> render loop C++ stall dai hon ~170ms -> underrun lap lai
|
// fxrt_bridge loopMax=361ms, fxrt_pump pump_gap 362ms, longtask d=346 —
|
||||||
// (fade ve 0) nghe nhu wobble; 8->16 (V45) dung tremolo crackle, 16->32
|
// ring 48 (256ms) van khong du -> underrun lap lai -> wobble chord van con.
|
||||||
// (V45.27) dung crackle, 32 van chua du cho stall chord). Flush o play
|
// Lich su: 8->16 (V45) dung tremolo crackle, 16->32 (V45.27) dung crackle,
|
||||||
// start (app.jsx) xoa ring nen do tre khong tang: ring thuong can o preview.
|
// 32->48 (V45.28) chua du stall chord, 48->80 (V45.29) phu stall ~426ms).
|
||||||
|
// Flush o play start (app.jsx) xoa ring nen do tre khong tang: ring thuong
|
||||||
|
// can o preview.
|
||||||
// - Underrun: fade ve 0 thay vi click (hard silence).
|
// - Underrun: fade ve 0 thay vi click (hard silence).
|
||||||
// - Resume sau silence: fade vao tu 0.
|
// - Resume sau silence: fade vao tu 0.
|
||||||
// - Overrun: drop block cu nhat + crossfade tich luy — moi block drop cong
|
// - Overrun: drop block cu nhat + crossfade tich luy — moi block drop cong
|
||||||
@@ -17,7 +19,7 @@ class BridgeAudioSinkProcessor extends AudioWorkletProcessor {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this._ring = [];
|
this._ring = [];
|
||||||
this._MAX = 48;
|
this._MAX = 80;
|
||||||
this._gain = 1.0;
|
this._gain = 1.0;
|
||||||
this._lastOutL = 0.0;
|
this._lastOutL = 0.0;
|
||||||
this._lastOutR = 0.0;
|
this._lastOutR = 0.0;
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
<script src="/static/js/services/soundfontStorage.js?v=202608290945"></script>
|
<script src="/static/js/services/soundfontStorage.js?v=202608290945"></script>
|
||||||
<script src="/static/js/services/soundfontPlayer.js?v=202608290945"></script>
|
<script src="/static/js/services/soundfontPlayer.js?v=202608290945"></script>
|
||||||
<script src="/static/js/services/nativeBridgeService.js?v=202608291510"></script>
|
<script src="/static/js/services/nativeBridgeService.js?v=202608291510"></script>
|
||||||
<script src="/static/js/services/bridgeAudioNode.js?v=202608311820"></script>
|
<script src="/static/js/services/bridgeAudioNode.js?v=202608311832"></script>
|
||||||
<script src="/static/js/services/unifiedMidiRouter.js?v=202608311756"></script>
|
<script src="/static/js/services/unifiedMidiRouter.js?v=202608311756"></script>
|
||||||
<script src="/static/js/services/audioRoutingEngine.js?v=202608290945"></script>
|
<script src="/static/js/services/audioRoutingEngine.js?v=202608290945"></script>
|
||||||
<script src="/static/js/services/aiGateway.js?v=202608290945"></script>
|
<script src="/static/js/services/aiGateway.js?v=202608290945"></script>
|
||||||
|
|||||||
Reference in New Issue
Block a user