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
31uint32 PLUGIN_API IPlugVST3Processor::getTailSamples()
36tresult PLUGIN_API IPlugVST3Processor::initialize(FUnknown* context)
40 if (AudioEffect::initialize(context) == kResultOk)
43 IPlugVST3GetHost(
this, context);
53tresult PLUGIN_API IPlugVST3Processor::terminate()
55 return AudioEffect::terminate();
58tresult PLUGIN_API IPlugVST3Processor::setBusArrangements(SpeakerArrangement* pInputBusArrangements, int32 numInBuses, SpeakerArrangement* pOutputBusArrangements, int32 numOutBuses)
62 return SetBusArrangements(
this, pInputBusArrangements, numInBuses, pOutputBusArrangements, numOutBuses) ? kResultTrue : kResultFalse;
65tresult PLUGIN_API IPlugVST3Processor::setActive(TBool state)
70 return AudioEffect::setActive(state);
73tresult PLUGIN_API IPlugVST3Processor::setupProcessing(ProcessSetup& newSetup)
77 return SetupProcessing(newSetup, processSetup) ? kResultOk : kResultFalse;
80tresult PLUGIN_API IPlugVST3Processor::setProcessing(TBool state)
82 Trace(TRACELOC,
" state: %i", state);
84 return SetProcessing((
bool) state) ? kResultOk : kResultFalse;
87tresult PLUGIN_API IPlugVST3Processor::process(ProcessData& data)
91 Process(data, processSetup, audioInputs, audioOutputs, mMidiMsgsFromEditor, mMidiMsgsFromProcessor, mSysExDataFromEditor, mSysexBuf);
95tresult PLUGIN_API IPlugVST3Processor::canProcessSampleSize(int32 symbolicSampleSize)
97 return CanProcessSampleSize(symbolicSampleSize) ? kResultTrue : kResultFalse;
100tresult PLUGIN_API IPlugVST3Processor::setState(IBStream* pState)
104 return IPlugVST3State::SetState(
this, pState) ? kResultOk : kResultFalse;
107tresult PLUGIN_API IPlugVST3Processor::getState(IBStream* pState)
111 return IPlugVST3State::GetState(
this, pState) ? kResultOk :kResultFalse;
114#pragma mark IEditorDelegate overrides
116void IPlugVST3Processor::SendControlValueFromDelegate(
int ctrlTag,
double normalizedValue)
118 OPtr<IMessage> message = allocateMessage();
123 message->setMessageID(
"SCVFD");
124 message->getAttributes()->setInt(
"CT", ctrlTag);
125 message->getAttributes()->setFloat(
"NV", normalizedValue);
127 sendMessage(message);
130void IPlugVST3Processor::SendControlMsgFromDelegate(
int ctrlTag,
int msgTag,
int dataSize,
const void* pData)
132 OPtr<IMessage> message = allocateMessage();
137 message->setMessageID(
"SCMFD");
138 message->getAttributes()->setInt(
"CT", ctrlTag);
139 message->getAttributes()->setInt(
"MT", msgTag);
140 message->getAttributes()->setBinary(
"D", pData, dataSize);
142 sendMessage(message);
145void IPlugVST3Processor::SendArbitraryMsgFromDelegate(
int msgTag,
int dataSize,
const void* pData)
147 OPtr<IMessage> message = allocateMessage();
159 message->setMessageID(
"SAMFD");
160 message->getAttributes()->setInt(
"MT", msgTag);
161 message->getAttributes()->setBinary(
"D", pData, dataSize);
162 sendMessage(message);
165#pragma mark IConnectionPoint override
167tresult PLUGIN_API IPlugVST3Processor::notify(IMessage* message)
170 return kInvalidArgument;
172 const void* data =
nullptr;
175 if (!strcmp(message->getMessageID(),
"SMMFUI"))
177 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
182 memcpy(&msg, data, size);
183 mMidiMsgsFromEditor.Push(msg);
190 if (!strcmp(message->getMessageID(),
"SSMFUI"))
192 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
195 message->getAttributes()->getInt(
"O", offset);
196 SysExData sysex {(int) offset, (
int) size, data};
197 mSysExDataFromEditor.Push(sysex);
202 else if (!strcmp(message->getMessageID(),
"SAMFUI"))
207 if (message->getAttributes()->getInt(
"MT", msgTag) == kResultOk && message->getAttributes()->getInt(
"CT", ctrlTag) == kResultOk)
209 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
211 if(OnMessage((
int) msgTag, (
int) ctrlTag, size, data))
221 return AudioEffect::notify(message);
224#pragma mark Messaging overrides
226void IPlugVST3Processor::TransmitMidiMsgFromProcessor(
const IMidiMsg& msg)
228 OPtr<IMessage> message = allocateMessage();
233 message->setMessageID(
"SMMFD");
234 message->getAttributes()->setBinary(
"D", (
void*) &msg,
sizeof(
IMidiMsg));
235 sendMessage(message);
238void IPlugVST3Processor::TransmitSysExDataFromProcessor(
const SysExData& data)
240 OPtr<IMessage> message = allocateMessage();
245 message->setMessageID(
"SSMFD");
246 message->getAttributes()->setBinary(
"D", (
void*) data.mData, data.mSize);
247 message->getAttributes()->setInt(
"O", data.mOffset);
248 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...
bool GetTailIsInfinite() const
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.