29ebbfc1c0
- Thay librosa bang app/core/audio_features.py (numpy/scipy/soundfile):
load, beat_track, frames_to_time, spectral_centroid, rms, zero_crossing_rate,
time_stretch, pitch_shift, chroma_stft. A/B ngang librosa (BPM <1% sai lech,
pitch_shift chuan toi Hz). Loai bo llvmlite 171MB + scikit-learn + numba.
- Task layer 2 che do (app/tasks/worker.py): server giu celery; desktop slim
chay in-process thread + registry, giu nguyen API contract (.delay/.id/status
/tasks/{id}) nen frontend khong doi.
- engine.spec: excludes librosa/numba/llvmlite/sklearn/celery/redis/kombu/
billiard/amqp/msgpack/yaml/PIL/cairosvg/zstandard/...; scan scipy gioi han
scipy.signal; giu click (uvicorn.main import click).
- render_engine: scipy.signal thanh lazy import (giam cold start).
- tauri.conf.json: targets [nsis, msi] - NSIS tro lai (bundle nho) de
hooks.nsh cai VC++ Redistributable - sua bug daw_engine.exe khong chay
tren Windows (truoc day MSI-only khong chay hooks).
- build_linux.sh / build_macos.sh: build 1 lenh moi OS.
- Doc: DESKTOP_INSTALL_PLAN.md muc 5.1.
- Verify: 86 tests pass, engine dong goi upload/analyze/waveform/export OK.
53 lines
2.1 KiB
Bash
Executable File
53 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# build_linux.sh - build daw_engine (PyInstaller ONEDIR) + Tauri v2 (deb + AppImage)
|
|
# Chay tren Linux: bash build_linux.sh
|
|
# Yeu cau: python3, pip, node/npm, rust/cargo, webkit2gtk-4.1, libappindicator,
|
|
# librsvg (xem README / DISTRIBUTION_PLAN.md)
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
echo "== [1/6] Python dependencies =="
|
|
# PyInstaller tren Linux can objdump (binutils). May build that phai co:
|
|
# sudo apt-get install -y binutils
|
|
python3 -m pip install --upgrade pip >/dev/null
|
|
python3 -m pip install -r requirements.txt pyinstaller
|
|
|
|
echo "== [2/6] Frontend bundle (app.jsx -> app.precompiled.js) =="
|
|
npm install --no-audit --no-fund
|
|
if [ ! -d "node_modules/@babel/standalone" ]; then
|
|
echo "Thieu @babel/standalone - dang cai them..."
|
|
npm install @babel/standalone --no-audit --no-fund
|
|
fi
|
|
node build.mjs
|
|
|
|
echo "== [3/6] Build daw_engine (PyInstaller ONEDIR) =="
|
|
python3 -m PyInstaller engine.spec --clean --noconfirm
|
|
|
|
echo "== [3.5/6] Verify bundle contents (app/static, app/templates phai co) =="
|
|
python3 tools/verify_bundle.py || { echo "ERROR: Bundle thieu asset - dung build!"; exit 1; }
|
|
|
|
echo "== [4/6] Copy onedir engine -> src-tauri/resources/daw_engine =="
|
|
if [ ! -f "dist/daw_engine/daw_engine" ]; then
|
|
echo "ERROR: dist/daw_engine/daw_engine khong ton tai (onedir build loi?)"
|
|
exit 1
|
|
fi
|
|
rm -rf src-tauri/resources/daw_engine
|
|
mkdir -p src-tauri/resources/daw_engine
|
|
cp -a dist/daw_engine/. src-tauri/resources/daw_engine/
|
|
echo "Copied onedir engine -> src-tauri/resources/daw_engine"
|
|
|
|
echo "== [5/6] Kiem tra resources truoc khi tauri build =="
|
|
if [ ! -f "src-tauri/resources/daw_engine/daw_engine" ] || [ ! -d "src-tauri/resources/daw_engine/_internal" ]; then
|
|
echo "ERROR: thieu src-tauri/resources/daw_engine/{daw_engine,_internal}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "== [6/6] Tauri build (deb + AppImage) =="
|
|
npm install -D @tauri-apps/cli --no-audit --no-fund
|
|
npx tauri build
|
|
|
|
echo ""
|
|
echo "== DONE =="
|
|
echo " deb : src-tauri/target/release/bundle/deb/sonicforge-daw_1.0.0_amd64.deb"
|
|
echo " AppImage: src-tauri/target/release/bundle/appimage/SonicForgeDAW_1.0.0_amd64.AppImage"
|