13#include "pluginterfaces/base/ustring.h"
14#include "pluginterfaces/base/ibstream.h"
15#include "pluginterfaces/vst/ivstmidicontrollers.h"
18#include "IPlugVST3_Parameter.h"
21using namespace Steinberg;
24IPlugVST3Controller::IPlugVST3Controller(
const InstanceInfo& info,
const Config& config)
26, mPlugIsInstrument(config.plugType == kInstrument)
27, mDoesMidiIn(config.plugDoesMidiIn)
28, mProcessorGUID(info.mOtherGUID)
34IPlugVST3Controller::~IPlugVST3Controller()
38#pragma mark IEditController overrides
40tresult PLUGIN_API IPlugVST3Controller::initialize(FUnknown* context)
42 if (EditControllerEx1::initialize(context) == kResultTrue)
44 Initialize(
this, mPlugIsInstrument, mDoesMidiIn);
45 IPlugVST3GetHost(
this, context);
51 for (
int i = 0; i < NParams(); ++i)
52 parameters.getParameter(i)->setNormalized(GetParam(i)->GetNormalized());
60IPlugView* PLUGIN_API IPlugVST3Controller::createView(
const char* name)
62 if (
HasUI() && name && strcmp(name,
"editor") == 0)
64 mView =
new ViewType(*
this);
71tresult PLUGIN_API IPlugVST3Controller::setComponentState(IBStream* pState)
73 return IPlugVST3State::SetState(
this, pState) ? kResultOk : kResultFalse;
76tresult PLUGIN_API IPlugVST3Controller::setState(IBStream* pState)
82tresult PLUGIN_API IPlugVST3Controller::getState(IBStream* pState)
88ParamValue PLUGIN_API IPlugVST3Controller::getParamNormalized(ParamID tag)
90 return IPlugVST3ControllerBase::GetParamNormalized(tag);
93tresult PLUGIN_API IPlugVST3Controller::setParamNormalized(ParamID tag, ParamValue value)
95 if (IPlugVST3ControllerBase::SetParamNormalized(
this, tag, value))
101tresult PLUGIN_API IPlugVST3Controller::getMidiControllerAssignment(int32 busIndex, int16 midiChannel, CtrlNumber midiCCNumber, ParamID& tag)
103 if (busIndex == 0 && midiChannel < VST3_NUM_CC_CHANS)
105 tag = kMIDICCParamStartIdx + (midiChannel * kCountCtrlNumber) + midiCCNumber;
112#pragma mark IUnitInfo overrides
126#pragma mark IInfoListener overrides
128Steinberg::tresult PLUGIN_API IPlugVST3Controller::setChannelContextInfos(Steinberg::Vst::IAttributeList* pList)
130 return IPlugVST3ControllerBase::SetChannelContextInfos(pList) ? kResultTrue : kResultFalse;
139 if (viewWidth != GetEditorWidth() || viewHeight != GetEditorHeight())
140 mView->Resize(viewWidth, viewHeight);
142 SetEditorSize(viewWidth, viewHeight);
150 for (
int i = 0; i < NParams(); i++)
151 IPlugVST3ControllerBase::SetVST3ParamNormalized(i, GetParam(i)->GetNormalized());
158#pragma mark Message with Processor
160tresult PLUGIN_API IPlugVST3Controller::notify(IMessage* message)
163 return kInvalidArgument;
165 if (!strcmp(message->getMessageID(),
"SCVFD"))
167 Steinberg::int64 ctrlTag = kNoTag;
168 double normalizedValue = 0.;
170 if(message->getAttributes()->getInt(
"CT", ctrlTag) == kResultFalse)
173 if(message->getAttributes()->getFloat(
"NV", normalizedValue) == kResultFalse)
176 SendControlValueFromDelegate((
int) ctrlTag, normalizedValue);
179 else if (!strcmp(message->getMessageID(),
"SCMFD"))
182 Steinberg::int64 ctrlTag = kNoTag;
183 Steinberg::int64 msgTag = kNoTag;
185 if(message->getAttributes()->getInt(
"CT", ctrlTag) == kResultFalse)
188 if(message->getAttributes()->getInt(
"MT", msgTag) == kResultFalse)
191 Steinberg::uint32 size;
193 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
195 SendControlMsgFromDelegate((
int) ctrlTag, (
int) msgTag, size, data);
199 else if (!strcmp(message->getMessageID(),
"SMMFD"))
201 const void* data =
nullptr;
204 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
209 memcpy(&msg, data, size);
210 SendMidiMsgFromDelegate(msg);
214 else if (!strcmp(message->getMessageID(),
"SSMFD"))
216 const void* data =
nullptr;
220 if (message->getAttributes()->getBinary(
"D", data, size) == kResultOk)
222 if (message->getAttributes()->getInt(
"O", offset) == kResultOk)
224 ISysEx msg {
static_cast<int>(offset),
static_cast<const uint8_t*
>(data),
static_cast<int>(size)};
225 SendSysexMsgFromDelegate(msg);
230 return ComponentBase::notify(message);
233void IPlugVST3Controller::SendMidiMsgFromUI(
const IMidiMsg& msg)
235 OPtr<IMessage> message = allocateMessage();
240 message->setMessageID(
"SMMFUI");
241 message->getAttributes()->setBinary(
"D", (
void*) &msg,
sizeof(
IMidiMsg));
242 sendMessage(message);
245void IPlugVST3Controller::SendSysexMsgFromUI(
const ISysEx& msg)
247 OPtr<IMessage> message = allocateMessage();
252 message->setMessageID(
"SSMFUI");
253 message->getAttributes()->setInt(
"O", (int64) msg.mOffset);
254 message->getAttributes()->setBinary(
"D", msg.mData, msg.mSize);
255 sendMessage(message);
258void IPlugVST3Controller::SendArbitraryMsgFromUI(
int msgTag,
int ctrlTag,
int dataSize,
const void* pData)
260 OPtr<IMessage> message = allocateMessage();
272 message->setMessageID(
"SAMFUI");
273 message->getAttributes()->setInt(
"MT", msgTag);
274 message->getAttributes()->setInt(
"CT", ctrlTag);
275 message->getAttributes()->setBinary(
"D", pData, dataSize);
276 sendMessage(message);
279void IPlugVST3Controller::SendParameterValueFromUI(
int paramIdx,
double normalisedValue)
281 IPlugVST3ControllerBase::SetVST3ParamNormalized(paramIdx, normalisedValue);
282 IPlugAPIBase::SendParameterValueFromUI(paramIdx, normalisedValue);
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
virtual void DirtyParametersFromUI() override
In a distributed VST3 or WAM plugin, if you modify the parameters on the UI side (e....
virtual void OnHostIdentified()
Implement this to do something specific when IPlug becomes aware of the particular host that is hosti...
Shared VST3 controller code.
void DirtyParametersFromUI() override
In a distributed VST3 or WAM plugin, if you modify the parameters on the UI side (e....
bool EditorResize(int viewWidth, int viewHeight) override
Implementations call into the APIs resize hooks returns a bool to indicate whether the DAW or plugin ...
Encapsulates a MIDI message and provides helper functions.
A struct for dealing with SysEx messages.