2#include <Process/Dataflow/PortFactory.hpp>
3#include <Process/GenericProcessFactory.hpp>
4#include <Process/Process.hpp>
6#include <Control/DefaultEffectItem.hpp>
7#include <Effect/EffectFactory.hpp>
8#include <Vst/Loader.hpp>
10#include <score/tools/std/Invoke.hpp>
12#include <ossia/detail/hash_map.hpp>
14#include <score_plugin_vst_export.h>
23 , vst::Model,
"BE8E6BD3-75F2-4102-8895-8A4EB4EA545A",
"VST",
"VST",
24 Process::ProcessCategory::Other,
"Plugins",
"VST plug-in",
25 "VST is a trademark of Steinberg Media Technologies GmbH", {}, {}, {},
26 QUrl(
"https://ossia.io/score-docs/processes/audio-plugins.html#controlling-vst-parameters"),
27 Process::ProcessFlags::ExternalEffect)
29DESCRIPTION_METADATA(, vst::Model, "")
32#define VST_FIRST_CONTROL_INDEX(synth) ((synth) ? 2 : 1)
33struct SCORE_PLUGIN_VST_EXPORT AEffectWrapper
47 .timeSigNumerator = 4,
48 .timeSigDenominator = 4,
51 .samplesToNextClock = 0,
52 .flags = kVstPpqPosValid | kVstTempoValid | kVstBarsValid | kVstTimeSigValid};
55 AEffectWrapper(AEffect* f) noexcept
60 auto getParameter(int32_t index)
const noexcept {
return fx->getParameter(fx, index); }
61 auto setParameter(int32_t index,
float p)
const noexcept
63 return fx->setParameter(fx, index, p);
67 int32_t opcode, int32_t index = 0, intptr_t value = 0,
void* ptr =
nullptr,
68 float opt = 0.0f) const noexcept
70 return fx->dispatcher(fx, opcode, index, value, ptr, opt);
81 SCORE_SERIALIZE_FRIENDS
85 MODEL_METADATA_IMPL(Model)
90 template <
typename Impl>
91 Model(Impl& vis, QObject* parent)
92 : ProcessModel{vis, parent}
93 , m_registration{*this}
99 QString prettyShortName() const noexcept
override
103 QString category() const noexcept
override
109 void setCreatingControls(
bool ok) override;
111 ControlInlet* getControl(const
Id<
Process::Port>& p) const;
112 QString effect() const noexcept override;
113 QString prettyName() const noexcept override;
114 bool hasExternalUI() const noexcept;
119 bool takesMidi() const noexcept;
123 bool sendsMidi() const noexcept;
125 std::shared_ptr<AEffectWrapper> fx{};
127 ossia::hash_map<int, ControlInlet*> controls;
130 void removeControl(
int fxnum);
133 void on_addControl(
int idx,
float v);
134 W_SLOT(on_addControl);
135 void on_addControl_impl(ControlInlet* inl);
136 void on_controlChangedFromScore(
int num,
float newval);
138 void reloadControls();
139 void reloadPrograms();
142 int32_t opcode, int32_t index = 0, intptr_t value = 0,
void* ptr =
nullptr,
145 return fx->dispatch(opcode, index, value, ptr, opt);
150 void selectProgram(
int index);
152 std::atomic_bool needIdle{};
157 std::string m_backup_chunk;
158 ossia::float_vector m_backup_float_data;
159 int32_t m_backup_program{-1};
170 std::vector<
Process::Preset> builtinPresets() const noexcept override;
172 QString getString(AEffectOpcodes op,
int param);
173 void setControlName(
int fxnum, ControlInlet* ctrl);
180 std::vector<
std::pair<
std::
string,
int>> m_programs;
181 int32_t m_effectId{};
182 bool m_createControls{};
184 struct vst_context_handler
187 explicit vst_context_handler(Model& self);
188 ~vst_context_handler();
193AEffect* getPluginInstance(int32_t
id);
194intptr_t vst_host_callback(
195 AEffect* effect, int32_t opcode, int32_t index, intptr_t value,
void* ptr,
202QString EffectProcessFactory_T<vst::Model>::customConstructionData() const noexcept;
206EffectProcessFactory_T<vst::Model>::descriptor(QString d) const noexcept;
210SCORE_PLUGIN_VST_TEST_EXPORT
void JSONWriter::write(vst::Model& eff);
Definition JSONVisitor.hpp:423
Definition EffectFactory.hpp:14
The Process class.
Definition score-lib-process/Process/Process.hpp:82
virtual bool presetChangesPorts(const Preset &preset) const noexcept
Definition score-lib-process/Process/Process.cpp:264
The id_base_t class.
Definition Identifier.hpp:59
Definition Vst/Control.hpp:19
Definition plugins/score-plugin-vst/Vst/commands.hpp:41
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
bool loadPreset(const Process::ProcessModel &proc, const Process::Preset &preset, const score::DocumentContext &ctx)
Definition PresetTree.cpp:167
ProcessFlags
Various settings for processes.
Definition ProcessFlags.hpp:17
Definition TimeValue.hpp:21