feat: VST FX rack per-track + masterbus render via native_bridge

This commit is contained in:
2026-08-17 21:31:57 +07:00
parent 8fbacd1d2b
commit b261eb0d7e
18 changed files with 1805 additions and 14 deletions
+24
View File
@@ -6,6 +6,7 @@
#include "NativeInstrumentEngine.h"
#include "StateStore.h"
#include "RenderJob.h"
#include "RenderFxJob.h"
#ifdef _WIN32
#include <windows.h>
@@ -614,6 +615,29 @@ int main(int argc, char* argv[]) {
return run_render_job(renderJob, renderOut);
}
// --render-fx <job.json> --in <input.wav> --out <output.wav>: one-shot
// offline FX render (VST3 effects + builtins), no SHM/loop.
std::string renderFxJob, renderFxIn, renderFxOut;
for (int i = 1; i < argc; ++i) {
if (std::strcmp(argv[i], "--render-fx") == 0 && i + 1 < argc) renderFxJob = argv[i + 1];
else if (std::strcmp(argv[i], "--in") == 0 && i + 1 < argc) renderFxIn = argv[i + 1];
else if (std::strcmp(argv[i], "--out") == 0 && i + 1 < argc) renderFxOut = argv[i + 1];
}
if (!renderFxJob.empty()) {
if (renderFxIn.empty() || renderFxOut.empty()) {
std::cerr << "[RenderFxJob] --render-fx requires --in <input.wav> --out <output.wav>" << std::endl;
return 1;
}
return run_render_fx_job(renderFxJob, renderFxIn, renderFxOut);
}
// --scan <dir>: one-shot plugin scan, no SHM/loop.
std::string scanDir;
for (int i = 1; i + 1 < argc; ++i) {
if (std::strcmp(argv[i], "--scan") == 0) scanDir = argv[i + 1];
}
if (!scanDir.empty()) return run_scan_dir(scanDir);
// 1. Shared memory name: argv --shm <name> | env SF_SHM_NAME | default
std::string shmName = "SonicForge_DAW_IPC";
for (int i = 1; i + 1 < argc; ++i) {