iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
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
30BEGIN_IPLUG_NAMESPACE
31
34class IPlugVST3Processor : public Steinberg::Vst::AudioEffect
35 , public IPlugAPIBase
37{
38public:
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
77private:
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
88Steinberg::FUnknown* MakeProcessor();
89extern Steinberg::FUnknown* MakeController();
90
91END_IPLUG_NAMESPACE
92
93#endif //_IPLUGAPI_
A class to help with queuing timestamped MIDI messages.
Definition: IPlugMidi.h:678
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 processor code.
VST3 Processor API-base class for a distributed IPlug VST3 plug-in.
Encapsulates a MIDI message and provides helper functions.
Definition: IPlugMidi.h:31
This structure is used when queueing Sysex messages.
Definition: IPlugStructs.h:45