(function () { if (window.__FluidSynthReady) return; var FLUIDSYNTH_JS_URL; var FLUIDSYNTH_WASM_URL; if (window.__FLUIDSYNTH_CDN) { FLUIDSYNTH_JS_URL = window.__FLUIDSYNTH_CDN; } else { // Luôn dùng WASM local — Tauri webview hostname=localhost nên CDN (jsdelivr) bị // chặn làm FluidSynth không load, phải rơi về beep. File có sẵn trong source+dist. FLUIDSYNTH_JS_URL = '/static/js/vendor/libfluidsynth-2.3.0-sf3.js'; } FLUIDSYNTH_WASM_URL = FLUIDSYNTH_JS_URL.replace(/\.js$/, '.wasm'); window.__FluidSynthLocateWasm = function () { return FLUIDSYNTH_WASM_URL; }; window.__FluidSynthReady = new Promise(function (resolve) { var script = document.createElement('script'); script.type = 'module'; script.textContent = [ 'import FluidsynthModule from "' + FLUIDSYNTH_JS_URL + '";', 'window.__FluidSynthModuleFactory = FluidsynthModule;', 'console.log("[FluidSynth] Loaded:", "' + FLUIDSYNTH_JS_URL + '");' ].join('\n'); document.head.appendChild(script); var check = setInterval(function () { if (window.__FluidSynthModuleFactory) { clearInterval(check); resolve(); } }, 50); setTimeout(function () { clearInterval(check); resolve(); }, 15000); }); })();