Files
SonicForgeStudio/app/config.py
T
admin dc331f39d8 phase5: mặc định RENDER_ENGINE=bridge, gỡ pedalboard khỏi requirements/source/LICENSE
- config.py: SF_RENDER_ENGINE default 'bridge' (pedalboard GPL-3.0 đã gỡ)
- requirements.txt: bỏ pedalboard==0.9.19
- vst_engine.py: bỏ HAS_PEDALBOARD/check_pedalboard_safe/load_vst/import pedalboard;
  midi_events_to_messages giữ làm utility thuần (không gate pedalboard)
- render_engine.py: bỏ nhánh elif vst and HAS_PEDALBOARD + import thừa
- plugins.py: preview/midi-render chỉ qua native_bridge; guard SF_RENDER_ENGINE=bridge
- runtime.py: _vst_render_available() check bridge exe (SF_BRIDGE_PATH/install/) thay find_spec('pedalboard')
- LICENSE.md/THIRD_PARTY_LICENSES.md: bỏ cảnh báo GPL-3.0 pedalboard, đánh số lại
- tests: bỏ test golden so pedalboard + test requires_pedalboard; 114 passed 0 skip
2026-08-17 12:58:51 +07:00

76 lines
3.2 KiB
Python

import os
import sys
def _app_dir():
if getattr(sys, "frozen", False):
# PyInstaller onefile: assets read-only nằm trong thư mục giải nén tạm
return os.path.join(sys._MEIPASS, "app")
return os.path.dirname(os.path.abspath(__file__))
def _storage_dir():
# Test/dev isolation: env override thắng (pytest set để không đụng storage
# thật — app production có thể đang chạy và ghi file state).
env_dir = os.getenv("SONICFORGE_STORAGE_DIR")
if env_dir:
return env_dir
if getattr(sys, "frozen", False):
# Dữ liệu ghi được (DB, uploads, processed) phải ngoài thư mục tạm
root = os.environ.get("APPDATA") or os.path.expanduser("~")
return os.path.join(root, "SonicForgeDAW", "storage")
return os.path.join(_app_dir(), "storage")
def _default_vst_dir():
"""Thư mục VST mặc định theo platform (env VST_DIR vẫn thắng).
Windows: thư mục VST3 chuẩn của hệ thống — user có thể thêm thư mục khác
qua Plugins Manager (plugin_dirs.json). Docker/Linux: mount qua compose."""
if os.name == "nt":
pf = os.environ.get("ProgramFiles", r"C:\Program Files")
return os.path.join(pf, "Common Files", "VST3")
if sys.platform == "darwin":
return "/Library/Audio/Plug-Ins/VST3"
return "/opt/daw_engine/vst3"
def _default_soundfont_dir():
if os.name == "nt":
root = os.environ.get("APPDATA") or os.path.expanduser("~")
return os.path.join(root, "SonicForgeDAW", "soundfonts")
if sys.platform == "darwin":
return os.path.expanduser("~/Music/SonicForgeDAW/soundfonts")
return "/opt/daw_engine/soundfonts"
class Settings:
REDIS_URL: str = os.getenv("REDIS_URL", "redis://localhost:6379/0")
CELERY_BROKER_URL: str = os.getenv("CELERY_BROKER_URL", "redis://localhost:6379/0")
CELERY_RESULT_BACKEND: str = os.getenv("CELERY_RESULT_BACKEND", "redis://localhost:6379/0")
APP_DIR: str = _app_dir()
BASE_DIR: str = os.path.dirname(APP_DIR)
TEMPLATES_DIR: str = os.path.join(APP_DIR, "templates")
STORAGE_DIR: str = _storage_dir()
UPLOADS_DIR: str = os.path.join(STORAGE_DIR, "uploads")
PROCESSED_DIR: str = os.path.join(STORAGE_DIR, "processed")
# Plugin dirs — người dùng khai báo qua .env / docker-compose (Docker)
# hoặc qua Plugins Manager (Windows/macOS, lưu theo user). Default theo
# platform (Windows: thư mục VST3 chuẩn; Linux: mount compose).
VST_DIR: str = os.getenv("VST_DIR", _default_vst_dir())
SOUNDFONT_DIR: str = os.getenv("SOUNDFONT_DIR", _default_soundfont_dir())
# Thư viện preset VST3 (.vstpreset) — cầu nối Carla → pedalboard.
# Nằm trong storage nên tự động nằm trong volume mount (docker) / thư mục
# storage (Windows desktop).
PRESET_DIR: str = os.path.join(STORAGE_DIR, "presets")
# Render engine offline (preview/export VSTi): 'bridge' (native_bridge
# --render, MIT). Giá trị khác → fallback synth (pedalboard GPL-3.0 đã gỡ
# phase 5 — PLAN_REPLACE_PEDALBOARD_NATIVE_BRIDGE.md).
RENDER_ENGINE: str = os.getenv("SF_RENDER_ENGINE", "bridge")
settings = Settings()