From 45a86f09bdbc3406beecd0bdcb55b491e85ef152 Mon Sep 17 00:00:00 2001 From: 3dtours Date: Sun, 26 Jul 2026 22:03:49 +0700 Subject: [PATCH] fix: keep all banks loaded, don't delete on switch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove deleteSoundBank — SpessaSynth merges presets from all banks - Check soundBankList for existing bank before re-downloading - Handle 404 gracefully — warn but don't break subsequent loads - Failed load doesn't delete previously loaded banks --- app/static/js/services/soundfontPlayer.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/static/js/services/soundfontPlayer.js b/app/static/js/services/soundfontPlayer.js index 04a6856..b3d0654 100644 --- a/app/static/js/services/soundfontPlayer.js +++ b/app/static/js/services/soundfontPlayer.js @@ -63,17 +63,22 @@ loadSoundFont: async function (sfId) { if (!_initialized || !_synthInstance) return false; if (_currentSfId === sfId) return true; + // Check if already loaded (SpessaSynth can hold multiple banks) + const already = _synthInstance.soundBankManager?.soundBankList?.some(b => b.id === sfId); + if (already) { + _currentSfId = sfId; + return true; + } try { - // Unload previous SoundFont - if (_currentSfId) { - try { _synthInstance.soundBankManager.deleteSoundBank(_currentSfId); } catch (e) {} - } const cache = window.SonicSFStorage; let buf = cache ? await cache.getBuffer(sfId) : null; if (!buf) { const url = "/api/v1/plugins/soundfonts/download/" + encodeURIComponent(sfId) + "?t=" + Date.now(); const resp = await fetch(url); - if (!resp.ok) return false; + if (!resp.ok) { + console.warn("[SonicSF] SoundFont not found on server:", sfId); + return false; + } buf = await resp.arrayBuffer(); if (cache) await cache.saveBuffer(sfId, buf); }