Hi Charles!
Thank you!
rtclass used as type for *runtime, which use in programm instance:
I upload all C++ code for Mingw compiler, i cand not translate some strange code, which i not seed in O2 examples(((
This basic code which i rewrite.
#include "pluginterfaces\vst2.x\aeffect.h"
#include "pluginterfaces\vst2.x\aeffectx.h"
#include <stdio.h>
typedef audioMasterCallback VSTHostCallback;
typedef AEffect VSTPlugin;
extern "C" {
extern AEffect *VSTPluginMain(audioMasterCallback audioMaster); }
const VstInt32 PLUGIN_VERSION = 1000;
class VSTPluginWrapper
{
public:
VSTPluginWrapper(VSTHostCallback vstHostCallback, VstInt32 vendorUniqueID, VstInt32 vendorVersion, VstInt32 numParams, VstInt32 numPrograms, VstInt32 numInputs, VstInt32 numOutputs);
~VSTPluginWrapper();
inline VSTPlugin *getVSTPlugin()
{
return &_vstPlugin;
}
inline VstInt32 getNumInputs() const
{
return _vstPlugin.numInputs;
}
inline VstInt32 getNumOutputs() const
{
return _vstPlugin.numOutputs;
}
private:
VSTHostCallback _vstHostCallback;
VSTPlugin _vstPlugin;
};
void VSTPluginProcessSamplesFloat32(VSTPlugin *vstPlugin, float **inputs, float **outputs, VstInt32 sampleFrames)
{
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)(vstPlugin->object);
for(int i = 0; i < wrapper->getNumInputs(); i++)
{
auto inputSamples = inputs[i];
auto outputSamples = outputs[i];
for(int j = 0; j < sampleFrames; j++)
{
outputSamples[j] = inputSamples[j] * 0.5f;
} } }
void VSTPluginProcessSamplesFloat64(VSTPlugin *vstPlugin, double **inputs, double **outputs, VstInt32 sampleFrames)
{
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)(vstPlugin->object);
for(int i = 0; i < wrapper->getNumInputs(); i++)
{
auto inputSamples = inputs[i];
auto outputSamples = outputs[i];
for(int j = 0; j < sampleFrames; j++)
{
outputSamples[j] = inputSamples[j] * 0.5;
} } }
VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin, VstInt32 opCode, VstInt32 index, VstIntPtr value, void *ptr, float opt)
{
VstIntPtr v = 0;
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)(vstPlugin->object);
switch(opCode)
{
case effGetPlugCategory:
return kPlugCategSynth;
break;
case effClose:
delete wrapper;
break;
case effGetVendorString:
strncpy((char*)(ptr), "Alex Longard", kVstMaxVendorStrLen);
v = 1;
break;
case effGetVendorVersion:
return PLUGIN_VERSION;
break;
default:
// printf("Unknown opCode %d [ignored] \n", opCode);
break;
}
return v;
}
void VSTPluginSetParameter(VSTPlugin *vstPlugin, VstInt32 index, float parameter)
{
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)(vstPlugin->object);
}
float VSTPluginGetParameter(VSTPlugin *vstPlugin, VstInt32 index)
{
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)(vstPlugin->object);
return 0;
}
VSTPluginWrapper::VSTPluginWrapper(audioMasterCallback vstHostCallback, VstInt32 vendorUniqueID, VstInt32 vendorVersion, VstInt32 numParams, VstInt32 numPrograms, VstInt32 numInputs, VstInt32 numOutputs) : _vstHostCallback(vstHostCallback)
{
memset(&_vstPlugin, 0, sizeof(_vstPlugin));
_vstPlugin.magic = kEffectMagic;
_vstPlugin.object = this;
_vstPlugin.flags = effFlagsCanReplacing | effFlagsCanDoubleReplacing;
_vstPlugin.uniqueID = vendorUniqueID;
_vstPlugin.version = vendorVersion;
_vstPlugin.numParams = numParams;
_vstPlugin.numPrograms = numPrograms;
_vstPlugin.numInputs = numInputs;
_vstPlugin.numOutputs = numOutputs;
_vstPlugin.dispatcher = VSTPluginDispatcher;
_vstPlugin.getParameter = VSTPluginGetParameter;
_vstPlugin.setParameter = VSTPluginSetParameter;
_vstPlugin.processReplacing = VSTPluginProcessSamplesFloat32;
_vstPlugin.processDoubleReplacing = VSTPluginProcessSamplesFloat64;
}
VSTPluginWrapper::~VSTPluginWrapper()
{
}
VSTPlugin *VSTPluginMain(VSTHostCallback vstHostCallback)
{
VSTPluginWrapper *plugin = new VSTPluginWrapper(vstHostCallback, CCONST('u', 's', 'a', 'n'), PLUGIN_VERSION, 1111, 0, 2, 2);
return plugin->getVSTPlugin();
}