13#pragma mark - IPlugVST3Processor Constructor/Destructor
16using namespace Steinberg;
19IPlugVST3Processor::IPlugVST3Processor(
const InstanceInfo& info,
const Config& config)
23 setControllerClass(info.mOtherGUID);
27IPlugVST3Processor::~IPlugVST3Processor() {}
29#pragma mark AudioEffect overrides
31tresult PLUGIN_API IPlugVST3Processor::initialize(FUnknown* context)
35 if (AudioEffect::initialize(context) == kResultOk)
38 IPlugVST3GetHost(
this, context);
48tresult PLUGIN_API IPlugVST3Processor::terminate()
50 return AudioEffect::terminate();
53tresult PLUGIN_API IPlugVST3Processor::setBusArrangements(SpeakerArrangement* pInputBusArrangements, int32 numInBuses, SpeakerArrangement* pOutputBusArrangements, int32 numOutBuses)
57 return SetBusArrangements(
this, pInputBusArrangements, numInBuses, pOutputBusArrangements, numOutBuses) ? kResultTrue : kResultFalse;
60tresult PLUGIN_API IPlugVST3Processor::setActive(TBool state)
65 return AudioEffect::setActive(state);
68tresult PLUGIN_API IPlugVST3Processor::setupProcessing(ProcessSetup& newSetup)
72 return SetupProcessing(newSetup, processSetup) ? kResultOk : kResultFalse;
75tresult PLUGIN_API IPlugVST3Processor::setProcessing(TBool state)
77 Trace(TRACELOC,
" state: %i", state);
79 return SetProcessing((
bool) state) ? kResultOk : kResultFalse;
82tresult PLUGIN_API IPlugVST3Processor::process(ProcessData& data)
86 Process(data, processSetup, audioInputs, audioOutputs, mMidiMsgsFromEditor, mMidiMsgsFromProcessor, mSysExDataFromEditor, mSysexBuf);
90tresult PLUGIN_API IPlugVST3Processor::canProcessSampleSize(int32 symbolicSampleSize)
92 return CanProcessSampleSize(symbolicSampleSize) ? kResultTrue : kResultFalse;
95tresult PLUGIN_API IPlugVST3Processor::setState(IBStream* pState)
99 return IPlugVST3State::SetState(
this, pState) ? kResultOk : kResultFalse;
102tresult PLUGIN_API IPlugVST3Processor::getState(IBStream* pState)
106 return IPlugVST3State::GetState(
this, pState) ? kResultOk :kResultFalse;
109#pragma mark IEditorDelegate overrides
111void 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);
125void 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);
140void 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
162tresult 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 if (!strcmp(message->getMessageID(),
"SSMFUI"))
187 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
190 message->getAttributes()->getInt(
"O", offset);
191 SysExData sysex {(int) offset, (
int) size, data};
192 mSysExDataFromEditor.Push(sysex);
197 else if (!strcmp(message->getMessageID(),
"SAMFUI"))
202 if (message->getAttributes()->getInt(
"MT", msgTag) == kResultOk && message->getAttributes()->getInt(
"CT", ctrlTag) == kResultOk)
204 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
206 if(OnMessage((
int) msgTag, (
int) ctrlTag, size, data))
216 return AudioEffect::notify(message);
219#pragma mark Messaging overrides
221void IPlugVST3Processor::TransmitMidiMsgFromProcessor(
const IMidiMsg& msg)
223 OPtr<IMessage> message = allocateMessage();
228 message->setMessageID(
"SMMFD");
229 message->getAttributes()->setBinary(
"D", (
void*) &msg,
sizeof(
IMidiMsg));
230 sendMessage(message);
233void IPlugVST3Processor::TransmitSysExDataFromProcessor(
const SysExData& data)
235 OPtr<IMessage> message = allocateMessage();
240 message->setMessageID(
"SSMFD");
241 message->getAttributes()->setBinary(
"D", (
void*) data.mData, data.mSize);
242 message->getAttributes()->setInt(
"O", data.mOffset);
243 sendMessage(message);
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
virtual void OnHostIdentified()
Implement this to do something specific when IPlug becomes aware of the particular host that is hosti...
virtual void OnActivate(bool active)
Override OnActivate() which should be called by the API class when a plug-in is "switched on" by the ...
Shared VST3 processor code.
Encapsulates a MIDI message and provides helper functions.
This structure is used when queueing Sysex messages.