|
@@ -0,0 +1,117 @@ |
|
|
|
|
|
// vst_eureka_standalone_test.cpp : Defines the entry point for the console application. |
|
|
|
|
|
// |
|
|
|
|
|
|
|
|
|
|
|
#define DLL_PATH "../../vst2_bin/veeseevstrack_effect.dll" |
|
|
|
|
|
#define SO_PATH "../../vst2_bin/veeseevstrack_effect.so" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <yac.h> |
|
|
|
|
|
|
|
|
|
|
|
#ifdef YAC_WIN32 |
|
|
|
|
|
#include "stdafx.h" |
|
|
|
|
|
#include <windows.h> |
|
|
|
|
|
#else |
|
|
|
|
|
#include <dlfcn.h> |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#include <aeffect.h> |
|
|
|
|
|
#include <aeffectx.h> |
|
|
|
|
|
|
|
|
|
|
|
typedef AEffect* (*PluginEntryProc) (audioMasterCallback audioMaster); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static VstIntPtr VSTCALLBACK HostCallback(AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt) { |
|
|
|
|
|
static VstInt32 lastOpcode = -1; |
|
|
|
|
|
static VstIntPtr lastTimeMask = ~0; |
|
|
|
|
|
VstIntPtr result = 0; |
|
|
|
|
|
|
|
|
|
|
|
lastOpcode = opcode; |
|
|
|
|
|
|
|
|
|
|
|
(void)lastOpcode; |
|
|
|
|
|
(void)lastTimeMask; |
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
float *inputBuffers[48]; |
|
|
|
|
|
float *outputBuffers[48]; |
|
|
|
|
|
|
|
|
|
|
|
void open_and_close(void) { |
|
|
|
|
|
#ifdef YAC_WIN32 |
|
|
|
|
|
HINSTANCE dllHandle = ::LoadLibraryA(DLL_PATH); |
|
|
|
|
|
#else |
|
|
|
|
|
void *dllHandle = ::dlopen(SO_PATH, RTLD_NOW); |
|
|
|
|
|
if(NULL == dllHandle) |
|
|
|
|
|
{ |
|
|
|
|
|
printf("Failed to load library %s: %s", SO_PATH, dlerror()); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < 48; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
inputBuffers[i] = new float[4096]; |
|
|
|
|
|
outputBuffers[i] = new float[4096]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(NULL != dllHandle) |
|
|
|
|
|
{ |
|
|
|
|
|
#ifdef YAC_WIN32 |
|
|
|
|
|
PluginEntryProc mainProc = (PluginEntryProc) ::GetProcAddress((HMODULE)dllHandle, "VSTPluginMain"); |
|
|
|
|
|
if(NULL == mainProc) |
|
|
|
|
|
{ |
|
|
|
|
|
mainProc = (PluginEntryProc) ::GetProcAddress((HMODULE)dllHandle, "main"); |
|
|
|
|
|
} |
|
|
|
|
|
#else |
|
|
|
|
|
PluginEntryProc mainProc = (PluginEntryProc) ::dlsym(dllHandle, "VSTPluginMain"); |
|
|
|
|
|
if(NULL == mainProc) |
|
|
|
|
|
{ |
|
|
|
|
|
mainProc = (PluginEntryProc) ::dlsym(dllHandle, "main"); |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
if(NULL != mainProc) |
|
|
|
|
|
{ |
|
|
|
|
|
AEffect *effect; |
|
|
|
|
|
effect = mainProc(HostCallback); |
|
|
|
|
|
|
|
|
|
|
|
if(NULL != effect) |
|
|
|
|
|
{ |
|
|
|
|
|
effect->dispatcher(effect, effOpen, 0, 0, NULL, 0.0f); |
|
|
|
|
|
VstIntPtr ip = effect->dispatcher(effect, effEditOpen, 0, 0, NULL/*hWnd*/, 0.0f); |
|
|
|
|
|
(void)ip; |
|
|
|
|
|
printf("xxx call processreplacing\n"); |
|
|
|
|
|
for(int i = 0; i < 1024; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
effect->processReplacing(effect, inputBuffers, outputBuffers, (VstInt32)64); |
|
|
|
|
|
} |
|
|
|
|
|
effect->dispatcher(effect, effEditClose, 0, 0, NULL, 0.0f); |
|
|
|
|
|
effect->dispatcher(effect, effClose, 0, 0, NULL, 0.0f); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
printf("[---] failed to find mainProc\n"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifdef YAC_WIN32 |
|
|
|
|
|
::FreeLibrary(dllHandle); |
|
|
|
|
|
#else |
|
|
|
|
|
::dlclose(dllHandle); |
|
|
|
|
|
#endif |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < 48; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
delete [] inputBuffers[i]; |
|
|
|
|
|
delete [] outputBuffers[i]; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
for(;;) |
|
|
|
|
|
{ |
|
|
|
|
|
open_and_close(); |
|
|
|
|
|
} |
|
|
|
|
|
return 0; |
|
|
|
|
|
} |