iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
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
38BEGIN_IPLUG_NAMESPACE
39
41struct InstanceInfo {};
42
45class IPlugVST3 : public IPlugAPIBase
48 , public Steinberg::Vst::SingleComponentEffect
49 , public Steinberg::Vst::IMidiMapping
50 , public Steinberg::Vst::ChannelContext::IInfoListener
51{
52public:
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 {}
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 void GetTrackColor(int& r, int& g, int& b) override { r = (mChannelColor>>16)&0xff; g = (mChannelColor>>8)&0xff; b = mChannelColor&0xff; };
119
121 void GetTrackName(WDL_String& str) override { str = mChannelName; };
122
124 int GetTrackIndex() override { return mChannelIndex; };
125
127 void GetTrackNamespace(WDL_String& str) override { str = mChannelNamespace; };
128
130 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
169private:
170 ViewType* mView;
171};
172
173IPlugVST3* MakePlug(const InstanceInfo& info);
174
175END_IPLUG_NAMESPACE
176
177#endif
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
Definition: IPlugAPIBase.h:43
int GetLatency() const
Shared VST3 controller code.
VST3 base class for a non-distributed IPlug VST3 plug-in.
Definition: IPlugVST3.h:51
void InformHostOfParameterDetailsChange() override
Implemented by the API class, call this if you update parameter labels and hopefully the host should ...
Definition: IPlugVST3.cpp:207
int GetTrackIndex() override
Get the index of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:124
void SetLatency(int samples) override
Call this if the latency of your plug-in changes after initialization (perhaps from OnReset() ) This ...
Definition: IPlugVST3.cpp:244
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
void BeginInformHostOfParamChange(int idx) override
Implemented by the API class, called by the UI (or by a delegate) at the beginning of a parameter cha...
Definition: IPlugVST3.cpp:189
void InformHostOfParamChange(int idx, double normalizedValue) override
Implemented by the API class, called by the UI via SetParameterValue() with the value of a parameter ...
Definition: IPlugVST3.cpp:195
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
void EndInformHostOfParamChange(int idx) override
Implemented by the API class, called by the UI (or by a delegate) at the end of a parameter change ge...
Definition: IPlugVST3.cpp:201
int GetTrackNamespaceIndex() override
Get the namespace index of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:130
bool EditorResize(int viewWidth, int viewHeight) override
Implementations call into the APIs resize hooks returns a bool to indicate whether the DAW or plugin ...
Definition: IPlugVST3.cpp:213
void DirtyParametersFromUI() override
In a distributed VST3 or WAM plugin, if you modify the parameters on the UI side (e....
Definition: IPlugVST3.cpp:228
void GetTrackNamespace(WDL_String &str) override
Get the namespace of the track that the plug-in is inserted on.
Definition: IPlugVST3.h:127
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 processor code.