T16: autosample VST2 via native bridge + SF2/SF3 export hoàn chỉnh, UI chip size/note_count, re-sample on preset change, tests

This commit is contained in:
2026-08-11 18:04:34 +07:00
parent 0af834a8fa
commit 371b1ca665
8 changed files with 184 additions and 50 deletions
+16
View File
@@ -27,6 +27,17 @@ window.SonicVstiAutosample = window.SonicVstiAutosample || {};
} catch (e) {}
}
function formatSize(bytes) {
if (!bytes) return '0 KB';
if (bytes >= 1048576) return (bytes / 1048576).toFixed(1) + ' MB';
return Math.max(1, Math.round(bytes / 1024)) + ' KB';
}
// UI re-render (chip hien thi note_count/size) khi autosample xong/fail
function notify(k) {
try { window.dispatchEvent(new CustomEvent('sf:autosample-update', { detail: { key: k } })); } catch (e) {}
}
// Key = plugin + preset → autosample lại khi đổi preset (âm preset mới).
function keyFor(synthEngine) {
if (!synthEngine) return '';
@@ -65,6 +76,7 @@ window.SonicVstiAutosample = window.SonicVstiAutosample || {};
}
if (!window.SonicAPI || !window.SonicAPI.autosampleVsti) {
recordFail(k, 'API autosample khong kha dung');
notify(k);
return Promise.resolve(null);
}
_inFlight[k] = new Promise(function (resolve) {
@@ -80,14 +92,17 @@ window.SonicVstiAutosample = window.SonicVstiAutosample || {};
var map = readMap();
map[k] = { sf_id: res.sf_id, size_bytes: res.size_bytes || 0, note_count: res.note_count || 0, plugin_id: synthEngine.plugin_id, preset_id: synthEngine.preset_id || synthEngine.presetId || '', ts: Date.now() };
writeMap(map);
notify(k);
resolve(res.sf_id);
} else {
recordFail(k, (res && res.error) ? String(res.error) : 'Server khong tra sf_id');
notify(k);
resolve(null);
}
}).catch(function (err) {
delete _inFlight[k];
recordFail(k, (err && err.message) ? String(err.message) : 'Loi mang / server autosample');
notify(k);
resolve(null);
});
});
@@ -115,6 +130,7 @@ window.SonicVstiAutosample = window.SonicVstiAutosample || {};
keyFor: keyFor,
sfIdFor: sfIdFor,
entryFor: entryFor,
formatSize: formatSize,
ensure: ensure,
failReasonFor: failReasonFor,
clearCache: clearCache