FIX: sửa lỗi không load soundfont trên window
This commit is contained in:
@@ -174,9 +174,51 @@ async def list_plugins(current_user: dict = Depends(get_current_user)):
|
||||
for v in extra:
|
||||
by_id.setdefault(v["id"], v)
|
||||
avail["vst_instruments"] = list(by_id.values())
|
||||
# Tương tự cho SOUNDFONT: gộp .sf2/.sf3 từ plugin_dirs user — nếu không,
|
||||
# nút Synth không liệt kê instrument của soundfont trong thư mục user thêm.
|
||||
sf_by_id = {s["id"]: s for s in avail["soundfonts"]}
|
||||
for s in _scan_soundfonts_in_dirs(d["plugin_dirs"]):
|
||||
sf_by_id.setdefault(s["id"], s)
|
||||
avail["soundfonts"] = list(sf_by_id.values())
|
||||
return avail
|
||||
|
||||
|
||||
def _scan_soundfonts_in_dirs(dirs: list) -> list:
|
||||
"""Walk các thư mục (plugin_dirs user) → danh sách soundfont .sf2/.sf3
|
||||
(id = tên file; name từ .meta nếu có — cùng format PluginManager)."""
|
||||
found = {}
|
||||
for d in dirs:
|
||||
if not d or not os.path.isdir(d):
|
||||
continue
|
||||
for root, dirs2, files in os.walk(d):
|
||||
for f in files:
|
||||
low = f.lower()
|
||||
if not (low.endswith(".sf2") or low.endswith(".sf3")):
|
||||
continue
|
||||
base_id = os.path.splitext(f)[0]
|
||||
if base_id in found:
|
||||
continue
|
||||
meta = {}
|
||||
mp = os.path.join(root, os.path.splitext(f)[0] + ".meta")
|
||||
if os.path.isfile(mp):
|
||||
try:
|
||||
with open(mp, "r", encoding="utf-8") as mf:
|
||||
meta = json.load(mf)
|
||||
except Exception:
|
||||
meta = {}
|
||||
name = meta.get("original_name", f) if meta else f
|
||||
found[base_id] = {
|
||||
"id": base_id,
|
||||
"name": name,
|
||||
"file": f,
|
||||
"display": os.path.splitext(name)[0][:40],
|
||||
"source": "user",
|
||||
}
|
||||
# Không walk sâu thêm (soundfont thường đặt ngay trong thư mục khai báo)
|
||||
dirs2[:] = []
|
||||
return list(found.values())
|
||||
|
||||
|
||||
def _scan_vst_in_dirs(dirs: list) -> list:
|
||||
"""Walk các thư mục (plugin_dirs user) → danh sách VST giống /scan:
|
||||
file .vst3/.dll/.so + FOLDER tên X.vst3 (Windows VST3 = folder chứa
|
||||
|
||||
Reference in New Issue
Block a user