23 #if defined OS_WIN && !defined VST3C_API 24 HINSTANCE gHINSTANCE = 0;
25 #if defined(VST2_API) || defined(AAX_API) 29 BOOL WINAPI DllMain(HINSTANCE hDllInst, DWORD fdwReason, LPVOID res)
31 gHINSTANCE = hDllInst;
36 UINT(WINAPI *__GetDpiForWindow)(HWND);
38 float GetScaleForHWND(HWND hWnd)
40 if (!__GetDpiForWindow)
42 HINSTANCE h = LoadLibraryA(
"user32.dll");
43 if (h) *(
void **)&__GetDpiForWindow = GetProcAddress(h,
"GetDpiForWindow");
45 if (!__GetDpiForWindow)
49 int dpi = __GetDpiForWindow(hWnd);
51 if (dpi != USER_DEFAULT_SCREEN_DPI)
53 #if defined IGRAPHICS_QUANTISE_SCREENSCALE 54 return std::round(static_cast<float>(dpi) / USER_DEFAULT_SCREEN_DPI);
56 return static_cast<float>(dpi) / USER_DEFAULT_SCREEN_DPI;
66 #pragma mark - ** Global Functions and Defines ** 72 EXPORT
void* VSTPluginMain(audioMasterCallback hostCallback)
74 using namespace iplug;
76 IPlugVST2* pPlug = MakePlug(InstanceInfo{hostCallback});
80 AEffect& aEffect = pPlug->GetAEffect();
82 aEffect.numPrograms = std::max(aEffect.numPrograms, 1);
88 EXPORT
int main(
int hostCallback)
91 return (VstIntPtr) VSTPluginMain((audioMasterCallback)hostCallback);
93 return (
int) VSTPluginMain((audioMasterCallback)hostCallback);
97 #pragma mark - VST3 (All) 98 #elif defined VST3_API || VST3C_API || defined VST3P_API 99 #include "public.sdk/source/main/pluginfactory.h" 100 #include "pluginterfaces/vst/ivstcomponent.h" 101 #include "pluginterfaces/vst/ivsteditcontroller.h" 103 #if !defined VST3_PROCESSOR_UID && !defined VST3_CONTROLLER_UID 104 #define VST3_PROCESSOR_UID 0xF2AEE70D, 0x00DE4F4E, PLUG_MFR_ID, PLUG_UNIQUE_ID 105 #define VST3_CONTROLLER_UID 0xF2AEE70E, 0x00DE4F4F, PLUG_MFR_ID, PLUG_UNIQUE_ID 108 #ifndef EFFECT_TYPE_VST3 110 #define EFFECT_TYPE_VST3 kInstrumentSynth 112 #define EFFECT_TYPE_VST3 kFx 116 #if defined VST3P_API || defined VST3_API 120 extern void* moduleHandle;
121 gHINSTANCE = (HINSTANCE) moduleHandle;
134 static Steinberg::FUnknown* createInstance(
void*)
136 return (Steinberg::Vst::IAudioProcessor*) MakePlug(InstanceInfo());
139 BEGIN_FACTORY_DEF(PLUG_MFR, PLUG_URL_STR, PLUG_EMAIL_STR)
141 DEF_CLASS2(INLINE_UID_FROM_FUID(FUID(VST3_PROCESSOR_UID)),
143 kVstAudioEffectClass,
152 #pragma mark - VST3 Processor 153 #elif defined VST3P_API 154 static Steinberg::FUnknown* createProcessorInstance(
void*)
156 return MakeProcessor();
159 static Steinberg::FUnknown* createControllerInstance(
void*)
161 return MakeController();
164 BEGIN_FACTORY_DEF(PLUG_MFR, PLUG_URL_STR, PLUG_EMAIL_STR)
166 DEF_CLASS2 (INLINE_UID_FROM_FUID(FUID(VST3_PROCESSOR_UID)),
167 PClassInfo::kManyInstances,
168 kVstAudioEffectClass,
174 createProcessorInstance)
176 DEF_CLASS2(INLINE_UID_FROM_FUID(FUID(VST3_CONTROLLER_UID)),
177 PClassInfo::kManyInstances,
178 kVstComponentControllerClass,
179 PLUG_NAME " Controller",
184 createControllerInstance)
192 #ifndef AU_NO_COMPONENT_ENTRY 194 EXPORT ComponentResult AUV2_ENTRY(ComponentParameters* pParams,
void* pPlug)
196 return IPlugAU::IPlugAUEntry(pParams, pPlug);
201 EXPORT
void* AUV2_FACTORY(
const AudioComponentDescription* pInDesc)
207 #elif defined WAM_API 210 EMSCRIPTEN_KEEPALIVE
void* createModule()
212 Processor* pWAM =
dynamic_cast<Processor*
>(iplug::MakePlug(InstanceInfo()));
217 #elif defined WEB_API 220 std::unique_ptr<iplug::IPlugWeb> gPlug;
221 extern void StartMainLoopTimer();
225 EMSCRIPTEN_KEEPALIVE
void iplug_syncfs()
228 if(Module.syncdone == 1) {
230 FS.syncfs(false, function (err) {
232 console.log(
"Synced to IDBFS...");
239 EMSCRIPTEN_KEEPALIVE
void iplug_fsready()
241 gPlug = std::unique_ptr<iplug::IPlugWeb>(iplug::MakePlug(InstanceInfo()));
242 gPlug->SetHost(
"www", 0);
243 gPlug->OpenWindow(
nullptr);
252 var name =
'/' + UTF8ToString($0) +
'_data';
254 FS.mount(IDBFS, {}, name);
257 FS.syncfs(
true,
function (err) {
259 console.log(
"Synced from IDBFS...");
261 ccall(
'iplug_fsready',
'v');
265 StartMainLoopTimer();
272 #elif defined AUv3_API || defined AAX_API || defined APP_API 275 #error "No API defined!" 278 #pragma mark - ** Instantiation ** 280 BEGIN_IPLUG_NAMESPACE
283 #pragma mark VST2, VST3, AAX, AUv3, APP, WAM, WEB 285 #if defined VST2_API || defined VST3_API || defined AAX_API || defined AUv3_API || defined APP_API || defined WAM_API || defined WEB_API 287 Plugin* MakePlug(
const InstanceInfo& info)
290 static WDL_Mutex sMutex;
291 WDL_MutexLock lock(&sMutex);
293 return new PLUG_CLASS_NAME(info);
299 Plugin* MakePlug(
void* pMemory)
302 info.mCocoaViewFactoryClassName.Set(AUV2_VIEW_CLASS_STR);
305 return new(pMemory) PLUG_CLASS_NAME(info);
307 return new PLUG_CLASS_NAME(info);
310 #pragma mark - VST3 Controller 311 #elif defined VST3C_API 313 Steinberg::FUnknown* MakeController()
315 static WDL_Mutex sMutex;
316 WDL_MutexLock lock(&sMutex);
317 IPlugVST3Controller::InstanceInfo info;
318 info.mOtherGUID = Steinberg::FUID(VST3_PROCESSOR_UID);
321 return static_cast<Steinberg::Vst::IEditController*
>(
new PLUG_CLASS_NAME(info));
324 #pragma mark - VST3 Processor 325 #elif defined VST3P_API 327 Steinberg::FUnknown* MakeProcessor()
329 static WDL_Mutex sMutex;
330 WDL_MutexLock lock(&sMutex);
331 IPlugVST3Processor::InstanceInfo info;
332 info.mOtherGUID = Steinberg::FUID(VST3_CONTROLLER_UID);
333 return static_cast<Steinberg::Vst::IAudioProcessor*
>(
new PLUG_CLASS_NAME(info));
337 #error "No API defined!" 340 #pragma mark - ** Config Utility ** 342 static Config MakeConfig(
int nParams,
int nPresets)
344 return Config(nParams, nPresets, PLUG_CHANNEL_IO, PLUG_NAME, PLUG_NAME, PLUG_MFR, PLUG_VERSION_HEX, PLUG_UNIQUE_ID, PLUG_MFR_ID, PLUG_LATENCY, PLUG_DOES_MIDI_IN, PLUG_DOES_MIDI_OUT, PLUG_DOES_MPE, PLUG_DOES_STATE_CHUNKS, PLUG_TYPE, PLUG_HAS_UI, PLUG_WIDTH, PLUG_HEIGHT, PLUG_HOST_RESIZE, PLUG_MIN_WIDTH, PLUG_MAX_WIDTH, PLUG_MIN_HEIGHT, PLUG_MAX_HEIGHT, BUNDLE_ID);
362 #if !defined NO_IGRAPHICS && !defined VST3P_API 363 #include "IGraphics_include_in_plug_src.h" void EnsureDefaultPreset()
[VST2 only] Called to fill uninitialzed presets
VST2.4 API base class for an IPlug plug-in.
AudioUnit v2 Factory Class Template.