iPlug2 - C++ Audio Plug-in Framework
IPlugVST3.h
Go to the documentation of this file.
1 /*
2  ==============================================================================
3 
4  This file is part of the iPlug 2 library. Copyright (C) the iPlug 2 developers.
5 
6  See LICENSE.txt for more info.
7 
8  ==============================================================================
9 */
10 
11 #ifndef _IPLUGAPI_
12 #define _IPLUGAPI_
13 // Only load one API class!
14 
20 #include <vector>
21 
22 #undef stricmp
23 #undef strnicmp
24 
25 #include "public.sdk/source/vst/vstsinglecomponenteffect.h"
26 #include "pluginterfaces/vst/ivstprocesscontext.h"
27 #include "pluginterfaces/vst/vsttypes.h"
28 #include "pluginterfaces/vst/ivstcontextmenu.h"
29 #include "pluginterfaces/vst/ivstchannelcontextinfo.h"
30 
31 #include "IPlugAPIBase.h"
32 #include "IPlugProcessor.h"
33 
34 #include "IPlugVST3_Common.h"
35 #include "IPlugVST3_ProcessorBase.h"
36 #include "IPlugVST3_View.h"
37 
38 BEGIN_IPLUG_NAMESPACE
39 
41 struct InstanceInfo {};
42 
45 class IPlugVST3 : public IPlugAPIBase
46  , public IPlugVST3ProcessorBase
48  , public Steinberg::Vst::SingleComponentEffect
49  , public Steinberg::Vst::IMidiMapping
50  , public Steinberg::Vst::ChannelContext::IInfoListener
51 {
52 public:
53  using ViewType = IPlugVST3View<IPlugVST3>;
54 
55  IPlugVST3(const InstanceInfo& info, const Config& config);
56  ~IPlugVST3();
57 
58  // IPlugAPIBase
59  void BeginInformHostOfParamChange(int idx) override;
60  void InformHostOfParamChange(int idx, double normalizedValue) override;
61  void EndInformHostOfParamChange(int idx) override;
62  void InformHostOfPresetChange() override {}
63  void InformHostOfParameterDetailsChange() override;
64  bool EditorResize(int viewWidth, int viewHeight) override;
65 
66  // IEditorDelegate
67  void DirtyParametersFromUI() override;
68  void SendParameterValueFromUI(int paramIdx, double normalisedValue) override;
69 
70  // IPlugProcessor
71  void SetLatency(int samples) override;
72 
73  // AudioEffect
74  Steinberg::tresult PLUGIN_API initialize(FUnknown* context) override;
75  Steinberg::tresult PLUGIN_API terminate() override;
76  Steinberg::tresult PLUGIN_API setBusArrangements(Steinberg::Vst::SpeakerArrangement* pInputs, Steinberg::int32 numIns, Steinberg::Vst::SpeakerArrangement* pOutputs, Steinberg::int32 numOuts) override;
77  Steinberg::tresult PLUGIN_API setActive(Steinberg::TBool state) override;
78  Steinberg::tresult PLUGIN_API setupProcessing(Steinberg::Vst::ProcessSetup& newSetup) override;
79  Steinberg::tresult PLUGIN_API setProcessing (Steinberg::TBool state) override;
80  Steinberg::tresult PLUGIN_API process(Steinberg::Vst::ProcessData& data) override;
81  Steinberg::tresult PLUGIN_API canProcessSampleSize(Steinberg::int32 symbolicSampleSize) override;
82  Steinberg::uint32 PLUGIN_API getLatencySamples() override { return GetLatency(); }
83  Steinberg::uint32 PLUGIN_API getTailSamples() override { return GetTailSize(); } //TODO - infinite tail
84  Steinberg::tresult PLUGIN_API setState(Steinberg::IBStream* pState) override;
85  Steinberg::tresult PLUGIN_API getState(Steinberg::IBStream* pState) override;
86 
87  // IEditController
88  Steinberg::Vst::ParamValue PLUGIN_API getParamNormalized(Steinberg::Vst::ParamID tag) override;
89  Steinberg::tresult PLUGIN_API setParamNormalized(Steinberg::Vst::ParamID tag, Steinberg::Vst::ParamValue value) override;
90  Steinberg::IPlugView* PLUGIN_API createView(const char* name) override;
91  Steinberg::tresult PLUGIN_API setEditorState(Steinberg::IBStream* pState) override;
92  Steinberg::tresult PLUGIN_API getEditorState(Steinberg::IBStream* pState) override;
93  Steinberg::tresult PLUGIN_API setComponentState(Steinberg::IBStream *state) override;
94 
95  // IMidiMapping
96  Steinberg::tresult PLUGIN_API getMidiControllerAssignment(Steinberg::int32 busIndex, Steinberg::int16 channel, Steinberg::Vst::CtrlNumber midiCCNumber, Steinberg::Vst::ParamID& tag) override;
97 
98  // IUnitInfo
99  Steinberg::tresult PLUGIN_API getProgramName(Steinberg::Vst::ProgramListID listId, Steinberg::int32 programIndex, Steinberg::Vst::String128 name /*out*/) override
100  {
101  return GetProgramName(this, listId, programIndex, name);
102  }
103 
104  Steinberg::int32 PLUGIN_API getProgramListCount() override
105  {
106  return GetProgramListCount(this);
107  }
108 
109  Steinberg::tresult PLUGIN_API getProgramListInfo(Steinberg::int32 listIndex, Steinberg::Vst::ProgramListInfo& info) override
110  {
111  return GetProgramListInfo(this, listIndex, info);
112  }
113 
114  // IInfoListener
115  Steinberg::tresult PLUGIN_API setChannelContextInfos(Steinberg::Vst::IAttributeList* list) override;
116 
118  virtual void GetTrackColor(int& r, int& g, int& b) override { r = (mChannelColor>>16)&0xff; g = (mChannelColor>>8)&0xff; b = mChannelColor&0xff; };
119 
121  virtual void GetTrackName(WDL_String& str) override { str = mChannelName; };
122 
124  virtual int GetTrackIndex() override { return mChannelIndex; };
125 
127  virtual void GetTrackNamespace(WDL_String& str) override { str = mChannelNamespace; };
128 
130  virtual int GetTrackNamespaceIndex() override { return mChannelNamespaceIndex; };
131 
132  Steinberg::Vst::IComponentHandler* GetComponentHandler() { return componentHandler; }
133  ViewType* GetView() { return mView; }
134 
135  Steinberg::Vst::AudioBus* getAudioInput(Steinberg::int32 index)
136  {
137  Steinberg::Vst::AudioBus* bus = nullptr;
138  if (index < static_cast<Steinberg::int32> (audioInputs.size ()))
139  bus = Steinberg::FCast<Steinberg::Vst::AudioBus> (audioInputs.at (index));
140  return bus;
141  }
142 
143  Steinberg::Vst::AudioBus* getAudioOutput(Steinberg::int32 index)
144  {
145  Steinberg::Vst::AudioBus* bus = nullptr;
146  if (index < static_cast<Steinberg::int32> (audioOutputs.size ()))
147  bus = Steinberg::FCast<Steinberg::Vst::AudioBus> (audioOutputs.at (index));
148  return bus;
149  }
150 
151  void removeAudioInputBus(Steinberg::Vst::AudioBus* pBus)
152  {
153  audioInputs.erase(std::remove(audioInputs.begin(), audioInputs.end(), pBus));
154  }
155 
156  void removeAudioOutputBus(Steinberg::Vst::AudioBus* pBus)
157  {
158  audioOutputs.erase(std::remove(audioOutputs.begin(), audioOutputs.end(), pBus));
159  }
160 
161  // Interface
162  OBJ_METHODS(IPlugVST3, SingleComponentEffect)
163  DEFINE_INTERFACES
164  DEF_INTERFACE(IMidiMapping)
165  DEF_INTERFACE(IInfoListener)
166  END_DEFINE_INTERFACES(SingleComponentEffect)
167  REFCOUNT_METHODS(SingleComponentEffect)
168 
169 private:
170  ViewType* mView;
171 };
172 
173 IPlugVST3* MakePlug(const InstanceInfo& info);
174 
175 END_IPLUG_NAMESPACE
176 
177 #endif
The base class for IPlug Audio Processing.
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
Definition: IPlugAPIBase.h:42
virtual void GetTrackName(WDL_String &str) override
Get the name of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:121
Shared VST3 controller code.
virtual void GetTrackColor(int &r, int &g, int &b) override
Get the color of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:118
virtual int GetTrackIndex() override
Get the index of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:124
VST3 base class for a non-distributed IPlug VST3 plug-in.
Definition: IPlugVST3.h:45
void InformHostOfPresetChange() override
Implemented by the API class, called by the UI (etc) when the plug-in initiates a program/preset chan...
Definition: IPlugVST3.h:62
virtual int GetTrackNamespaceIndex() override
Get the namespace index of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:130
Shared VST3 processor code.
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
virtual void GetTrackNamespace(WDL_String &str) override
Get the namespace of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:127