4 #include <ossia/detail/flat_map.hpp>
8 #include <pluginterfaces/base/funknown.h>
9 #include <pluginterfaces/gui/iplugview.h>
10 #include <pluginterfaces/vst/ivstaudioprocessor.h>
11 #include <pluginterfaces/vst/ivstcomponent.h>
12 #include <pluginterfaces/vst/ivstunits.h>
14 #include <string_view>
16 #include <public.sdk/source/vst/hosting/hostclasses.h>
17 #include <public.sdk/source/vst/hosting/module.h>
18 #include <public.sdk/source/vst/hosting/plugprovider.h>
22 class ApplicationPlugin;
25 inline QString fromString(
const Steinberg::Vst::String128& str)
28 return QString::fromWCharArray(str);
30 return QString::fromUtf16(str);
34 using MIDIControls = ossia::flat_map<std::pair<int, int>, Steinberg::Vst::ParamID>;
48 const VST3::UID& uid,
double sr,
int max_bs);
49 operator bool()
const noexcept {
return component && processor; }
52 VST3::Hosting::Module::Ptr mdl;
53 Steinberg::Vst::IComponent* component{};
54 Steinberg::Vst::IAudioProcessor* processor{};
55 Steinberg::Vst::IEditController* controller{};
56 Steinberg::Vst::IUnitInfo* units{};
57 Steinberg::IPlugView* view{};
64 void loadProcessorStateToController();
66 void start(
double sample_rate,
int max_bs);
69 bool supportsDouble{};
76 MIDIControls midiControls{};
78 Steinberg::Vst::ProgramListInfo programs;
81 #if __cpp_concepts >= 201907
83 concept BusVisitor = requires(T&& vis)
85 vis.audioIn(Steinberg::Vst::BusInfo{},
int{});
86 vis.audioOut(Steinberg::Vst::BusInfo{},
int{});
87 vis.eventIn(Steinberg::Vst::BusInfo{},
int{});
88 vis.eventOut(Steinberg::Vst::BusInfo{},
int{});
90 void forEachBus(BusVisitor
auto&& visitor, Steinberg::Vst::IComponent& component)
93 void forEachBus(T&& visitor, Steinberg::Vst::IComponent& component)
97 =
component.getBusCount(Steinberg::Vst::kAudio, Steinberg::Vst::kInput);
99 =
component.getBusCount(Steinberg::Vst::kEvent, Steinberg::Vst::kInput);
101 =
component.getBusCount(Steinberg::Vst::kAudio, Steinberg::Vst::kOutput);
103 =
component.getBusCount(Steinberg::Vst::kEvent, Steinberg::Vst::kOutput);
105 Steinberg::Vst::BusInfo bus;
106 for(
int i = 0; i < audio_ins; i++)
108 component.getBusInfo(Steinberg::Vst::kAudio, Steinberg::Vst::kInput, i, bus);
109 visitor.audioIn(bus, i);
112 for(
int i = 0; i < event_ins; i++)
114 component.getBusInfo(Steinberg::Vst::kEvent, Steinberg::Vst::kInput, i, bus);
115 visitor.eventIn(bus, i);
118 for(
int i = 0; i < audio_outs; i++)
120 component.getBusInfo(Steinberg::Vst::kAudio, Steinberg::Vst::kOutput, i, bus);
121 visitor.audioOut(bus, i);
124 for(
int i = 0; i < event_outs; i++)
126 component.getBusInfo(Steinberg::Vst::kEvent, Steinberg::Vst::kOutput, i, bus);
127 visitor.eventOut(bus, i);
Definition: score-plugin-vst3/Vst3/ApplicationPlugin.hpp:86
Definition: score-plugin-vst3/Vst3/EffectModel.hpp:40
T & component(const score::Components &c)
component Fetch a Component from Components by type
Definition: ComponentUtils.hpp:20
Definition: Plugin.hpp:37