diff --git a/native_bridge/src/RenderFxJob.cpp b/native_bridge/src/RenderFxJob.cpp index eb025bf..7c98cf8 100644 --- a/native_bridge/src/RenderFxJob.cpp +++ b/native_bridge/src/RenderFxJob.cpp @@ -456,16 +456,18 @@ bool vst3FxLoadInner(Vst3FxState* s, const std::string& path, double sampleRate, int32 maxBlockSize, std::string& err) { using namespace VST3::Hosting; #ifdef _WIN32 - // Ozone 11 (iZotope) tự __fastfail (c0000409, license/anti-tamper) khi - // load — KHÔNG bị SEH chặn → giết cả bridge process (scan + render + - // realtime). Không load: trả lỗi sạch cho chain. Ozone Pro vẫn load OK. - // ponytail: muốn chạy Ozone 11 → SandboxVst3Host (mỗi module 1 process). + // Ozone 11 / Ozone Pro (iZotope) tự __fastfail (c0000409, license/anti- + // tamper) khi load — KHÔNG bị SEH chặn → giết cả bridge process (scan + + // render + realtime). Không load: trả lỗi sạch cho chain. WER: Ozone + // Pro.vst3 (v9.11.0.1955) cũng crash c0000409 trên fx_vst_bridge. + // ponytail: muốn chạy Ozone → SandboxVst3Host (mỗi module 1 process). { std::string low = path; for (auto& c : low) c = (char)std::tolower((unsigned char)c); - if (low.find("ozone 11") != std::string::npos) { - err = "Ozone 11 not loadable (license fastfail) - use Ozone Pro"; - std::cerr << "[RenderFx] skip (Ozone 11): " << path << std::endl; + if (low.find("ozone 11") != std::string::npos || + low.find("ozone pro") != std::string::npos) { + err = "Ozone not loadable (license fastfail) - use another module"; + std::cerr << "[RenderFx] skip (Ozone fastfail): " << path << std::endl; return false; } } @@ -2092,14 +2094,16 @@ int run_scan_dir(const std::string& dirPath) { #ifdef HAVE_VST3SDK for (const auto& p : vst3Paths) { std::vector entries; - // Ozone 11 (iZotope) tự __fastfail (c0000409, license/anti-tamper) - // khi load trong --scan — không bị SEH chặn → chết cả process → mất - // TOÀN BỘ dir → FX list rỗng. Không load: emit UNKNOWN (giống skip - // module lỗi). ponytail: SandboxVst3Host (mỗi module 1 process). + // Ozone 11 / Ozone Pro (iZotope) tự __fastfail (c0000409, license/ + // anti-tamper) khi load trong --scan — không bị SEH chặn → chết cả + // process → mất TOÀN BỘ dir → FX list rỗng. Không load: emit UNKNOWN + // (giống skip module lỗi). ponytail: SandboxVst3Host (mỗi module 1 + // process). { std::string low = p; for (auto& c : low) c = (char)std::tolower((unsigned char)c); - if (low.find("ozone 11") != std::string::npos) { + if (low.find("ozone 11") != std::string::npos || + low.find("ozone pro") != std::string::npos) { emit(p, p.substr(p.find_last_of("/\\") + 1), false, false, "VST3"); continue; } diff --git a/native_bridge/src/Vst2Instrument.cpp b/native_bridge/src/Vst2Instrument.cpp index e905681..cf7d6a7 100644 --- a/native_bridge/src/Vst2Instrument.cpp +++ b/native_bridge/src/Vst2Instrument.cpp @@ -9,6 +9,8 @@ #include "vestige/aeffect.h" +#include "VstDllSearch.h" + #include #include @@ -301,6 +303,11 @@ Vst2Instrument::~Vst2Instrument() { } bool Vst2Instrument::loadPlugin(const std::string& path, double sampleRate) { + // iZotope VST2 wrapper DLL (iZOzonePro.dll...) LoadLibrary companion core + // DLL (iZOzone11Core.dll) ở C:\Program Files\iZotope\\Cores — + // không cạnh wrapper → iZotope SDK tự hiện MessageBox "Fatal Error 0x7E". + // Append Cores dirs vào PATH trước khi LoadLibraryA. + vstAddDllSearchPath(vstDllSearchExtras()); HMODULE h = LoadLibraryA(path.c_str()); if (!h) { std::cerr << "[Vst2Instrument] LoadLibraryA failed: " << path