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
+10 -4
View File
@@ -1144,17 +1144,22 @@ async def autosample_vsti(req: AutosampleRequest, current_user: dict = Depends(g
Tra sf_id (bare uuid) de client tai SF2 va phat qua SonicSF nhu soundfont
thuong. Chi phi autosample mot lan -> cache o client (localStorage)."""
enforce_password_changed(current_user)
if not HAS_PEDALBOARD:
raise HTTPException(status_code=501, detail="pedalboard khong kha dung tren may nay")
_dirs = _effective_dirs().get("plugin_dirs") or []
# tools/ nam ngoai package app - import voi fallback path
try:
from tools.autosample_vsti import autosample_sf2 as _autosample_sf2
from tools.autosample_vsti import autosample_sf2 as _autosample_sf2, _is_vst2_path
except ImportError:
_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
if _root not in sys.path:
sys.path.insert(0, _root)
from tools.autosample_vsti import autosample_sf2 as _autosample_sf2
from tools.autosample_vsti import autosample_sf2 as _autosample_sf2, _is_vst2_path
if not HAS_PEDALBOARD:
# VST2 native bridge khong can pedalboard — chi chan khi plugin la VST3
_p = PluginManager(extra_vst_dirs=_dirs)._scan_plugins().get(req.instrument_id)
if not _p or not _is_vst2_path(_p):
raise HTTPException(status_code=501, detail="pedalboard khong kha dung tren may nay")
file_uuid = str(uuid.uuid4())
dest_path = os.path.join(UPLOAD_SF_DIR, file_uuid + ".sf2")
@@ -1174,6 +1179,7 @@ async def autosample_vsti(req: AutosampleRequest, current_user: dict = Depends(g
duration=req.duration, release=req.release,
velocity=req.velocity, sample_rate=req.sample_rate,
log=_log,
extra_vst_dirs=_dirs,
)
except FileNotFoundError as e:
raise HTTPException(status_code=404, detail=str(e))