4#include <ossia/detail/flat_map.hpp>
5#include <ossia/detail/flat_set.hpp>
9#include <score_plugin_vst3_export.h>
11#include <pluginterfaces/base/funknown.h>
12#include <pluginterfaces/gui/iplugview.h>
13#include <pluginterfaces/vst/ivstaudioprocessor.h>
14#include <pluginterfaces/vst/ivstcomponent.h>
15#include <pluginterfaces/vst/ivstmessage.h>
16#include <pluginterfaces/vst/ivstunits.h>
20#include <public.sdk/source/vst/hosting/hostclasses.h>
21#include <public.sdk/source/vst/hosting/module.h>
22#include <public.sdk/source/vst/hosting/plugprovider.h>
26class ApplicationPlugin;
29inline QString fromString(
const Steinberg::Vst::String128& str)
32 return [] <
typename T>(
const T& str) {
33 using char_type = std::decay_t<
decltype(str[0])>;
34 if constexpr(std::is_same_v<char_type, char16_t>)
35 return QString::fromUtf16(str);
37 return QString::fromWCharArray(str);
40 return QString::fromUtf16(str);
49 = ossia::flat_map<std::tuple<int, int, int>, Steinberg::Vst::ParamID>;
51class ComponentHandler;
52struct SCORE_PLUGIN_VST3_TEST_EXPORT
Plugin
64 const VST3::UID& uid,
double sr,
int max_bs);
65 operator bool()
const noexcept {
return component && processor; }
68 VST3::Hosting::Module::Ptr mdl;
69 Steinberg::Vst::IComponent* component{};
70 Steinberg::Vst::IAudioProcessor* processor{};
71 Steinberg::Vst::IEditController* controller{};
72 Steinberg::Vst::IUnitInfo* units{};
73 Steinberg::IPlugView* view{};
78 Steinberg::Vst::IConnectionPoint* componentCP{};
79 Steinberg::Vst::IConnectionPoint* controllerCP{};
87 void loadView(
Model& model);
91 void loadProcessorStateToController();
95 void start(
double sample_rate,
int max_bs);
97 void restart(
double sample_rate,
int max_bs);
101 double sample_rate{};
104 bool supports_double{};
109 bool component_initialized{};
110 bool controller_initialized{};
114 bool controller_is_component{};
120 MIDIControls midiControls{};
127 Steinberg::Vst::ProgramListInfo programs;
130#if __cpp_concepts >= 201907
132concept BusVisitor =
requires(T&& vis)
134 vis.audioIn(Steinberg::Vst::BusInfo{},
int{});
135 vis.audioOut(Steinberg::Vst::BusInfo{},
int{});
136 vis.eventIn(Steinberg::Vst::BusInfo{},
int{});
137 vis.eventOut(Steinberg::Vst::BusInfo{},
int{});
139void forEachBus(BusVisitor
auto&& visitor, Steinberg::Vst::IComponent& component)
142void forEachBus(T&& visitor, Steinberg::Vst::IComponent& component)
146 = component.getBusCount(Steinberg::Vst::kAudio, Steinberg::Vst::kInput);
148 = component.getBusCount(Steinberg::Vst::kEvent, Steinberg::Vst::kInput);
150 = component.getBusCount(Steinberg::Vst::kAudio, Steinberg::Vst::kOutput);
152 = component.getBusCount(Steinberg::Vst::kEvent, Steinberg::Vst::kOutput);
154 Steinberg::Vst::BusInfo bus;
155 for(
int i = 0; i < audio_ins; i++)
157 component.getBusInfo(Steinberg::Vst::kAudio, Steinberg::Vst::kInput, i, bus);
158 visitor.audioIn(bus, i);
161 for(
int i = 0; i < event_ins; i++)
163 component.getBusInfo(Steinberg::Vst::kEvent, Steinberg::Vst::kInput, i, bus);
164 visitor.eventIn(bus, i);
167 for(
int i = 0; i < audio_outs; i++)
169 component.getBusInfo(Steinberg::Vst::kAudio, Steinberg::Vst::kOutput, i, bus);
170 visitor.audioOut(bus, i);
173 for(
int i = 0; i < event_outs; i++)
175 component.getBusInfo(Steinberg::Vst::kEvent, Steinberg::Vst::kOutput, i, bus);
176 visitor.eventOut(bus, i);
Definition score-plugin-vst3/Vst3/ApplicationPlugin.hpp:131
Definition EditHandler.hpp:17
Definition score-plugin-vst3/Vst3/EffectModel.hpp:45
Definition PlugFrame.hpp:14
ossia::flat_set< Steinberg::Vst::ParamID > unsentParameters
Definition Plugin.hpp:125