13 #pragma mark - IPlugVST3Processor Constructor/Destructor 15 using namespace iplug;
19 IPlugVST3Processor::IPlugVST3Processor(
const InstanceInfo& info,
const Config& config)
23 setControllerClass(info.mOtherGUID);
27 IPlugVST3Processor::~IPlugVST3Processor() {}
29 #pragma mark AudioEffect overrides 31 tresult PLUGIN_API IPlugVST3Processor::initialize(FUnknown* context)
35 if (AudioEffect::initialize(context) == kResultOk)
38 IPlugVST3GetHost(
this, context);
48 tresult PLUGIN_API IPlugVST3Processor::terminate()
50 return AudioEffect::terminate();
53 tresult PLUGIN_API IPlugVST3Processor::setBusArrangements(SpeakerArrangement* pInputBusArrangements, int32 numInBuses, SpeakerArrangement* pOutputBusArrangements, int32 numOutBuses)
57 return SetBusArrangements(
this, pInputBusArrangements, numInBuses, pOutputBusArrangements, numOutBuses) ? kResultTrue : kResultFalse;
60 tresult PLUGIN_API IPlugVST3Processor::setActive(TBool state)
64 OnActivate((
bool) state);
65 return AudioEffect::setActive(state);
68 tresult PLUGIN_API IPlugVST3Processor::setupProcessing(ProcessSetup& newSetup)
72 return SetupProcessing(newSetup, processSetup) ? kResultOk : kResultFalse;
75 tresult PLUGIN_API IPlugVST3Processor::setProcessing(TBool state)
77 Trace(TRACELOC,
" state: %i", state);
79 return SetProcessing((
bool) state) ? kResultOk : kResultFalse;
82 tresult PLUGIN_API IPlugVST3Processor::process(ProcessData& data)
86 Process(data, processSetup, audioInputs, audioOutputs, mMidiMsgsFromEditor, mMidiMsgsFromProcessor, mSysExDataFromEditor, mSysexBuf);
90 tresult PLUGIN_API IPlugVST3Processor::canProcessSampleSize(int32 symbolicSampleSize)
92 return CanProcessSampleSize(symbolicSampleSize) ? kResultTrue : kResultFalse;
95 tresult PLUGIN_API IPlugVST3Processor::setState(IBStream* pState)
99 return IPlugVST3State::SetState(
this, pState) ? kResultOk : kResultFalse;
102 tresult PLUGIN_API IPlugVST3Processor::getState(IBStream* pState)
106 return IPlugVST3State::GetState(
this, pState) ? kResultOk :kResultFalse;
109 #pragma mark IEditorDelegate overrides 111 void IPlugVST3Processor::SendControlValueFromDelegate(
int ctrlTag,
double normalizedValue)
113 OPtr<IMessage> message = allocateMessage();
118 message->setMessageID(
"SCVFD");
119 message->getAttributes()->setInt(
"CT", ctrlTag);
120 message->getAttributes()->setFloat(
"NV", normalizedValue);
122 sendMessage(message);
125 void IPlugVST3Processor::SendControlMsgFromDelegate(
int ctrlTag,
int msgTag,
int dataSize,
const void* pData)
127 OPtr<IMessage> message = allocateMessage();
132 message->setMessageID(
"SCMFD");
133 message->getAttributes()->setInt(
"CT", ctrlTag);
134 message->getAttributes()->setInt(
"MT", msgTag);
135 message->getAttributes()->setBinary(
"D", pData, dataSize);
137 sendMessage(message);
140 void IPlugVST3Processor::SendArbitraryMsgFromDelegate(
int msgTag,
int dataSize,
const void* pData)
142 OPtr<IMessage> message = allocateMessage();
154 message->setMessageID(
"SAMFD");
155 message->getAttributes()->setInt(
"MT", msgTag);
156 message->getAttributes()->setBinary(
"D", pData, dataSize);
157 sendMessage(message);
160 #pragma mark IConnectionPoint override 162 tresult PLUGIN_API IPlugVST3Processor::notify(IMessage* message)
165 return kInvalidArgument;
167 const void* data =
nullptr;
170 if (!strcmp(message->getMessageID(),
"SMMFUI"))
172 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
177 memcpy(&msg, data, size);
178 mMidiMsgsFromEditor.Push(msg);
185 else if (!strcmp(message->getMessageID(),
"SAMFUI"))
190 if (message->getAttributes()->getInt(
"MT", msgTag) == kResultOk && message->getAttributes()->getInt(
"CT", ctrlTag) == kResultOk)
192 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
194 if(OnMessage((
int) msgTag, (
int) ctrlTag, size, data))
204 return AudioEffect::notify(message);
207 #pragma mark Messaging overrides 209 void IPlugVST3Processor::TransmitMidiMsgFromProcessor(
const IMidiMsg& msg)
211 OPtr<IMessage> message = allocateMessage();
216 message->setMessageID(
"SMMFD");
217 message->getAttributes()->setBinary(
"D", (
void*) &msg,
sizeof(
IMidiMsg));
218 sendMessage(message);
221 void IPlugVST3Processor::TransmitSysExDataFromProcessor(
const SysExData& data)
223 OPtr<IMessage> message = allocateMessage();
228 message->setMessageID(
"SSMFD");
229 message->getAttributes()->setBinary(
"D", (
void*) data.mData, data.mSize);
230 message->getAttributes()->setInt(
"O", data.mOffset);
231 sendMessage(message);
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
Encapsulates a MIDI message and provides helper functions.
VST3 Processor API-base class for a distributed IPlug VST3 plug-in.
Shared VST3 processor code.
This structure is used when queueing Sysex messages.