iPlug2 - C++ Audio Plug-in Framework
IPlugVST3_Processor.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 
14 #undef stricmp
15 #undef strnicmp
16 #include "public.sdk/source/vst/vstaudioeffect.h"
17 #include "public.sdk/source/vst/hosting/parameterchanges.h"
18 #include "pluginterfaces/vst/ivstprocesscontext.h"
19 
20 #include "IPlugAPIBase.h"
21 
22 #include "IPlugVST3_ProcessorBase.h"
23 #include "IPlugVST3_Common.h"
24 
30 BEGIN_IPLUG_NAMESPACE
31 
34 class IPlugVST3Processor : public Steinberg::Vst::AudioEffect
35  , public IPlugAPIBase
36  , public IPlugVST3ProcessorBase
37 {
38 public:
39  struct InstanceInfo
40  {
41  Steinberg::FUID mOtherGUID;
42  };
43 
44  IPlugVST3Processor(const InstanceInfo& info, const Config& config);
45  virtual ~IPlugVST3Processor();
46 
47  // AudioEffect overrides:
48  Steinberg::tresult PLUGIN_API initialize(FUnknown* context) override;
49  Steinberg::tresult PLUGIN_API terminate() override;
50  Steinberg::tresult PLUGIN_API setBusArrangements(Steinberg::Vst::SpeakerArrangement* inputs, Steinberg::int32 numIns, Steinberg::Vst::SpeakerArrangement* outputs, Steinberg::int32 numOuts) override;
51  Steinberg::tresult PLUGIN_API setActive(Steinberg::TBool state) override;
52  Steinberg::tresult PLUGIN_API setupProcessing(Steinberg::Vst::ProcessSetup& newSetup) override;
53  Steinberg::tresult PLUGIN_API setProcessing (Steinberg::TBool state) override;
54  Steinberg::tresult PLUGIN_API process(Steinberg::Vst::ProcessData& data) override;
55  Steinberg::tresult PLUGIN_API canProcessSampleSize(Steinberg::int32 symbolicSampleSize) override;
56  Steinberg::uint32 PLUGIN_API getLatencySamples() override { return GetLatency(); }
57  Steinberg::uint32 PLUGIN_API getTailSamples() override { return GetTailSize(); } //TODO - infinite tail
58  Steinberg::tresult PLUGIN_API setState(Steinberg::IBStream* pState) override;
59  Steinberg::tresult PLUGIN_API getState(Steinberg::IBStream* pState) override;
60 
61  // IEditorDelegate - these methods are overridden because we need to hook into VST3 messaging system
62  void SendControlValueFromDelegate(int ctrlTag, double normalizedValue) override;
63  void SendControlMsgFromDelegate(int ctrlTag, int msgTag, int dataSize, const void* pData) override;
64  void SendParameterValueFromDelegate(int paramIdx, double value, bool normalized) override {} // NOOP in VST3 processor -> param change gets there via IPlugVST3Controller::setParamNormalized
65  void SendArbitraryMsgFromDelegate(int msgTag, int dataSize = 0, const void* pData = nullptr) override;
66 
67  void removeAudioInputBus(Steinberg::Vst::AudioBus* pBus)
68  {
69  audioInputs.erase(std::remove(audioInputs.begin(), audioInputs.end(), pBus));
70  }
71 
72  void removeAudioOutputBus(Steinberg::Vst::AudioBus* pBus)
73  {
74  audioOutputs.erase(std::remove(audioOutputs.begin(), audioOutputs.end(), pBus));
75  }
76 
77 private:
78  void TransmitMidiMsgFromProcessor(const IMidiMsg& msg) override;
79  void TransmitSysExDataFromProcessor(const SysExData& data) override;
80 
81  // IConnectionPoint
82  Steinberg::tresult PLUGIN_API notify(Steinberg::Vst::IMessage* message) override;
83 
84 // Steinberg::Vst::ParameterChanges mOutputParamChanges;
85  IMidiQueue mMidiOutputQueue;
86 };
87 
88 Steinberg::FUnknown* MakeProcessor();
89 extern Steinberg::FUnknown* MakeController();
90 
91 END_IPLUG_NAMESPACE
92 
93 #endif //_IPLUGAPI_
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
Definition: IPlugAPIBase.h:42
A class to help with queuing timestamped MIDI messages.
Definition: IPlugMidi.h:677
Encapsulates a MIDI message and provides helper functions.
Definition: IPlugMidi.h:30
int GetLatency() const
VST3 Processor API-base class for a distributed IPlug VST3 plug-in.
Shared VST3 processor code.
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
This structure is used when queueing Sysex messages.
Definition: IPlugStructs.h:44