13 #include "pluginterfaces/base/ustring.h" 14 #include "pluginterfaces/base/ibstream.h" 15 #include "pluginterfaces/vst/ivstmidicontrollers.h" 18 #include "IPlugVST3_Parameter.h" 20 using namespace iplug;
24 IPlugVST3Controller::IPlugVST3Controller(
const InstanceInfo& info,
const Config& config)
26 , mPlugIsInstrument(config.plugType == kInstrument)
27 , mDoesMidiIn(config.plugDoesMidiIn)
28 , mProcessorGUID(info.mOtherGUID)
34 IPlugVST3Controller::~IPlugVST3Controller()
38 #pragma mark IEditController overrides 40 tresult 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());
60 IPlugView* PLUGIN_API IPlugVST3Controller::createView(
const char* name)
62 if (name && strcmp(name,
"editor") == 0)
64 mView =
new ViewType(*
this);
71 tresult PLUGIN_API IPlugVST3Controller::setComponentState(IBStream* pState)
73 return IPlugVST3State::SetState(
this, pState) ? kResultOk : kResultFalse;
76 tresult PLUGIN_API IPlugVST3Controller::setState(IBStream* pState)
82 tresult PLUGIN_API IPlugVST3Controller::getState(IBStream* pState)
88 ParamValue PLUGIN_API IPlugVST3Controller::getParamNormalized(ParamID tag)
90 return IPlugVST3ControllerBase::GetParamNormalized(tag);
93 tresult PLUGIN_API IPlugVST3Controller::setParamNormalized(ParamID tag, ParamValue value)
95 if (IPlugVST3ControllerBase::SetParamNormalized(
this, tag, value))
101 tresult 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 128 Steinberg::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 160 tresult 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);
233 void 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);
245 void 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);
258 void 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);
279 void IPlugVST3Controller::SendParameterValueFromUI(
int paramIdx,
double normalisedValue)
281 IPlugVST3ControllerBase::SetVST3ParamNormalized(paramIdx, normalisedValue);
282 IPlugAPIBase::SendParameterValueFromUI(paramIdx, normalisedValue);
void DirtyParametersFromUI() override
In a distributed VST3 or WAM plugin, if you modify the parameters on the UI side (e.g.
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
Encapsulates a MIDI message and provides helper functions.
Shared VST3 controller code.
virtual void DirtyParametersFromUI() override
In a distributed VST3 or WAM plugin, if you modify the parameters on the UI side (e.g.
VST3 Controller API-base class for a distributed IPlug VST3 plug-in.
A struct for dealing with SysEx messages.
bool EditorResize(int viewWidth, int viewHeight) override
Implementations call into the APIs resize hooks returns a bool to indicate whether the DAW or plugin ...