comparison DPF-Prymula-audioplugins/dpf/distrho/DistrhoInfo.hpp @ 3:84e66ea83026

DPF-Prymula-audioplugins-0.231015-2
author prymula <prymula76@outlook.com>
date Mon, 16 Oct 2023 21:53:34 +0200
parents
children
comparison
equal deleted inserted replaced
2:cf2cb71d31dd 3:84e66ea83026
1 /*
2 * DISTRHO Plugin Framework (DPF)
3 * Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com>
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any purpose with
6 * or without fee is hereby granted, provided that the above copyright notice and this
7 * permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 #ifdef DOXYGEN
18
19 #include "src/DistrhoDefines.h"
20
21 START_NAMESPACE_DISTRHO
22
23 /* ------------------------------------------------------------------------------------------------------------
24 * Intro */
25
26 /**
27 @mainpage DISTRHO %Plugin Framework
28
29 DISTRHO %Plugin Framework (or @b DPF for short)
30 is a plugin framework designed to make development of new plugins an easy and enjoyable task.@n
31 It allows developers to create plugins with custom UIs using a simple C++ API.@n
32 The framework facilitates exporting various different plugin formats from the same code-base.
33
34 DPF can build for LADSPA, DSSI, LV2, VST2, VST3 and CLAP formats.@n
35 A JACK/Standalone mode is also available, allowing you to quickly test plugins.
36
37 @section Macros
38 You start by creating a "DistrhoPluginInfo.h" file describing the plugin via macros, see @ref PluginMacros.@n
39 This file is included during compilation of the main DPF code to select which features to activate for each plugin format.
40
41 For example, a plugin (with %UI) that use states will require LV2 hosts to support Atom and Worker extensions for
42 message passing from the %UI to the (DSP) plugin.@n
43 If your plugin does not make use of states, the Worker extension is not set as a required feature.
44
45 @section Plugin
46 The next step is to create your plugin code by subclassing DPF's Plugin class.@n
47 You need to pass the number of parameters in the constructor and also the number of programs and states, if any.
48
49 Do note all of DPF code is within its own C++ namespace (@b DISTRHO for DSP/plugin stuff, @b DGL for UI stuff).@n
50 You can use @ref START_NAMESPACE_DISTRHO / @ref END_NAMESPACE_DISTRHO combo around your code, or globally set @ref USE_NAMESPACE_DISTRHO.@n
51 These are defined as compiler macros so that you can override the namespace name during build. When in doubt, just follow the examples.
52
53 @section Examples
54 Let's begin with some examples.@n
55 Here is one of a stereo audio plugin that simply mutes the host output:
56 @code
57 /* DPF plugin include */
58 #include "DistrhoPlugin.hpp"
59
60 /* Make DPF related classes available for us to use without any extra namespace references */
61 USE_NAMESPACE_DISTRHO;
62
63 /**
64 Our custom plugin class.
65 Subclassing `Plugin` from DPF is how this all works.
66
67 By default, only information-related functions and `run` are pure virtual (that is, must be reimplemented).
68 When enabling certain features (such as programs or states, more on that below), a few extra functions also need to be reimplemented.
69 */
70 class MutePlugin : public Plugin
71 {
72 public:
73 /**
74 Plugin class constructor.
75 */
76 MutePlugin()
77 : Plugin(0, 0, 0) // 0 parameters, 0 programs and 0 states
78 {
79 }
80
81 protected:
82 /* ----------------------------------------------------------------------------------------
83 * Information */
84
85 /**
86 Get the plugin label.
87 This label is a short restricted name consisting of only _, a-z, A-Z and 0-9 characters.
88 */
89 const char* getLabel() const override
90 {
91 return "Mute";
92 }
93
94 /**
95 Get the plugin author/maker.
96 */
97 const char* getMaker() const override
98 {
99 return "DPF";
100 }
101
102 /**
103 Get the plugin license name (a single line of text).
104 For commercial plugins this should return some short copyright information.
105 */
106 const char* getLicense() const override
107 {
108 return "MIT";
109 }
110
111 /**
112 Get the plugin version, in hexadecimal.
113 */
114 uint32_t getVersion() const override
115 {
116 return d_version(1, 0, 0);
117 }
118
119 /**
120 Get the plugin unique Id.
121 This value is used by LADSPA, DSSI, VST2 and VST3 plugin formats.
122 */
123 int64_t getUniqueId() const override
124 {
125 return d_cconst('M', 'u', 't', 'e');
126 }
127
128 /* ----------------------------------------------------------------------------------------
129 * Audio/MIDI Processing */
130
131 /**
132 Run/process function for plugins without MIDI input.
133 */
134 void run(const float**, float** outputs, uint32_t frames) override
135 {
136 // get the left and right audio outputs
137 float* const outL = outputs[0];
138 float* const outR = outputs[1];
139
140 // mute audio
141 std::memset(outL, 0, sizeof(float)*frames);
142 std::memset(outR, 0, sizeof(float)*frames);
143 }
144 };
145
146 /**
147 Create an instance of the Plugin class.
148 This is the entry point for DPF plugins.
149 DPF will call this to either create an instance of your plugin for the host or to fetch some initial information for internal caching.
150 */
151 Plugin* createPlugin()
152 {
153 return new MutePlugin();
154 }
155 @endcode
156
157 See the Plugin class for more information.
158
159 @section Parameters
160 A plugin is nothing without parameters.@n
161 In DPF parameters can be inputs or outputs.@n
162 They have hints to describe how they behave plus a name and a symbol identifying them.@n
163 Parameters also have 'ranges' - a minimum, maximum and default value.
164
165 Input parameters are by default "read-only": the plugin can read them but not change them.
166 (there are exceptions and possibly a request to the host to change values, more on that below)@n
167 It's the host responsibility to save, restore and set input parameters.
168
169 Output parameters can be changed at anytime by the plugin.@n
170 The host will simply read their values and never change them.
171
172 Here's an example of an audio plugin that has 1 input parameter:
173 @code
174 class GainPlugin : public Plugin
175 {
176 public:
177 /**
178 Plugin class constructor.
179 You must set all parameter values to their defaults, matching ParameterRanges::def.
180 */
181 GainPlugin()
182 : Plugin(1, 0, 0), // 1 parameter, 0 programs and 0 states
183 fGain(1.0f)
184 {
185 }
186
187 protected:
188 /* ----------------------------------------------------------------------------------------
189 * Information */
190
191 const char* getLabel() const override
192 {
193 return "Gain";
194 }
195
196 const char* getMaker() const override
197 {
198 return "DPF";
199 }
200
201 const char* getLicense() const override
202 {
203 return "MIT";
204 }
205
206 uint32_t getVersion() const override
207 {
208 return d_version(1, 0, 0);
209 }
210
211 int64_t getUniqueId() const override
212 {
213 return d_cconst('G', 'a', 'i', 'n');
214 }
215
216 /* ----------------------------------------------------------------------------------------
217 * Init */
218
219 /**
220 Initialize a parameter.
221 This function will be called once, shortly after the plugin is created.
222 */
223 void initParameter(uint32_t index, Parameter& parameter) override
224 {
225 // we only have one parameter so we can skip checking the index
226
227 parameter.hints = kParameterIsAutomatable;
228 parameter.name = "Gain";
229 parameter.symbol = "gain";
230 parameter.ranges.min = 0.0f;
231 parameter.ranges.max = 2.0f;
232 parameter.ranges.def = 1.0f;
233 }
234
235 /* ----------------------------------------------------------------------------------------
236 * Internal data */
237
238 /**
239 Get the current value of a parameter.
240 */
241 float getParameterValue(uint32_t index) const override
242 {
243 // same as before, ignore index check
244
245 return fGain;
246 }
247
248 /**
249 Change a parameter value.
250 */
251 void setParameterValue(uint32_t index, float value) override
252 {
253 // same as before, ignore index check
254
255 fGain = value;
256 }
257
258 /* ----------------------------------------------------------------------------------------
259 * Audio/MIDI Processing */
260
261 void run(const float**, float** outputs, uint32_t frames) override
262 {
263 // get the mono input and output
264 const float* const in = inputs[0];
265 /* */ float* const out = outputs[0];
266
267 // apply gain against all samples
268 for (uint32_t i=0; i < frames; ++i)
269 out[i] = in[i] * fGain;
270 }
271
272 private:
273 float fGain;
274 };
275 @endcode
276
277 See the Parameter struct for more information about parameters.
278
279 @section Programs
280 Programs in DPF refer to plugin-side presets (usually called "factory presets").@n
281 This is meant as an initial set of presets provided by plugin authors included in the actual plugin.
282
283 To use programs you must first enable them by setting @ref DISTRHO_PLUGIN_WANT_PROGRAMS to 1 in your DistrhoPluginInfo.h file.@n
284 When enabled you'll need to override 2 new function in your plugin code,
285 Plugin::initProgramName(uint32_t, String&) and Plugin::loadProgram(uint32_t).
286
287 Here's an example of a plugin with a "default" program:
288 @code
289 class PluginWithPresets : public Plugin
290 {
291 public:
292 PluginWithPresets()
293 : Plugin(2, 1, 0), // 2 parameters, 1 program and 0 states
294 fGainL(1.0f),
295 fGainR(1.0f),
296 {
297 }
298
299 protected:
300 /* ----------------------------------------------------------------------------------------
301 * Information */
302
303 const char* getLabel() const override
304 {
305 return "Prog";
306 }
307
308 const char* getMaker() const override
309 {
310 return "DPF";
311 }
312
313 const char* getLicense() const override
314 {
315 return "MIT";
316 }
317
318 uint32_t getVersion() const override
319 {
320 return d_version(1, 0, 0);
321 }
322
323 int64_t getUniqueId() const override
324 {
325 return d_cconst('P', 'r', 'o', 'g');
326 }
327
328 /* ----------------------------------------------------------------------------------------
329 * Init */
330
331 /**
332 Initialize a parameter.
333 This function will be called once, shortly after the plugin is created.
334 */
335 void initParameter(uint32_t index, Parameter& parameter) override
336 {
337 parameter.hints = kParameterIsAutomatable;
338 parameter.ranges.min = 0.0f;
339 parameter.ranges.max = 2.0f;
340 parameter.ranges.def = 1.0f;
341
342 switch (index)
343 {
344 case 0:
345 parameter.name = "Gain Right";
346 parameter.symbol = "gainR";
347 break;
348 case 1:
349 parameter.name = "Gain Left";
350 parameter.symbol = "gainL";
351 break;
352 }
353 }
354
355 /**
356 Set the name of the program @a index.
357 This function will be called once, shortly after the plugin is created.
358 */
359 void initProgramName(uint32_t index, String& programName)
360 {
361 // we only have one program so we can skip checking the index
362
363 programName = "Default";
364 }
365
366 /* ----------------------------------------------------------------------------------------
367 * Internal data */
368
369 /**
370 Get the current value of a parameter.
371 */
372 float getParameterValue(uint32_t index) const override
373 {
374 switch (index)
375 {
376 case 0:
377 return fGainL;
378 case 1:
379 return fGainR;
380 default:
381 return 0.f;
382 }
383 }
384
385 /**
386 Change a parameter value.
387 */
388 void setParameterValue(uint32_t index, float value) override
389 {
390 switch (index)
391 {
392 case 0:
393 fGainL = value;
394 break;
395 case 1:
396 fGainR = value;
397 break;
398 }
399 }
400
401 /**
402 Load a program.
403 */
404 void loadProgram(uint32_t index)
405 {
406 // same as before, ignore index check
407
408 fGainL = 1.0f;
409 fGainR = 1.0f;
410 }
411
412 /* ----------------------------------------------------------------------------------------
413 * Audio/MIDI Processing */
414
415 void run(const float**, float** outputs, uint32_t frames) override
416 {
417 // get the left and right audio buffers
418 const float* const inL = inputs[0];
419 const float* const inR = inputs[0];
420 /* */ float* const outL = outputs[0];
421 /* */ float* const outR = outputs[0];
422
423 // apply gain against all samples
424 for (uint32_t i=0; i < frames; ++i)
425 {
426 outL[i] = inL[i] * fGainL;
427 outR[i] = inR[i] * fGainR;
428 }
429 }
430
431 private:
432 float fGainL, fGainR;
433 };
434 @endcode
435
436 This is a work-in-progress documentation page. States, MIDI, Latency, Time-Position and UI are still TODO.
437 */
438
439 #if 0
440 @section States
441 describe them
442
443 @section MIDI
444 describe them
445
446 @section Latency
447 describe it
448
449 @section Time-Position
450 describe it
451
452 @section UI
453 describe them
454 #endif
455
456 /* ------------------------------------------------------------------------------------------------------------
457 * Plugin Macros */
458
459 /**
460 @defgroup PluginMacros Plugin Macros
461
462 C Macros that describe your plugin. (defined in the "DistrhoPluginInfo.h" file)
463
464 With these macros you can tell the host what features your plugin requires.@n
465 Depending on which macros you enable, new functions will be available to call and/or override.
466
467 All values are either integer or strings.@n
468 For boolean-like values 1 means 'on' and 0 means 'off'.
469
470 The values defined in this group are for documentation purposes only.@n
471 All macros are disabled by default.
472
473 Only 4 macros are required, they are:
474 - @ref DISTRHO_PLUGIN_NAME
475 - @ref DISTRHO_PLUGIN_NUM_INPUTS
476 - @ref DISTRHO_PLUGIN_NUM_OUTPUTS
477 - @ref DISTRHO_PLUGIN_URI
478
479 Additionally, @ref DISTRHO_PLUGIN_CLAP_ID is required if building CLAP plugins.
480 @{
481 */
482
483 /**
484 The plugin name.@n
485 This is used to identify your plugin before a Plugin instance can be created.
486 @note This macro is required.
487 */
488 #define DISTRHO_PLUGIN_NAME "Plugin Name"
489
490 /**
491 Number of audio inputs the plugin has.
492 @note This macro is required.
493 */
494 #define DISTRHO_PLUGIN_NUM_INPUTS 2
495
496 /**
497 Number of audio outputs the plugin has.
498 @note This macro is required.
499 */
500 #define DISTRHO_PLUGIN_NUM_OUTPUTS 2
501
502 /**
503 The plugin URI when exporting in LV2 format.
504 @note This macro is required.
505 */
506 #define DISTRHO_PLUGIN_URI "urn:distrho:name"
507
508 /**
509 Whether the plugin has a custom %UI.
510 @see DISTRHO_UI_USE_NANOVG
511 @see UI
512 */
513 #define DISTRHO_PLUGIN_HAS_UI 1
514
515 /**
516 Whether the plugin processing is realtime-safe.@n
517 TODO - list rtsafe requirements
518 */
519 #define DISTRHO_PLUGIN_IS_RT_SAFE 1
520
521 /**
522 Whether the plugin is a synth.@n
523 @ref DISTRHO_PLUGIN_WANT_MIDI_INPUT is automatically enabled when this is too.
524 @see DISTRHO_PLUGIN_WANT_MIDI_INPUT
525 */
526 #define DISTRHO_PLUGIN_IS_SYNTH 1
527
528 /**
529 Request the minimum buffer size for the input and output event ports.@n
530 Currently only used in LV2, with a default value of 2048 if unset.
531 */
532 #define DISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE 2048
533
534 /**
535 Whether the plugin has an LV2 modgui.
536
537 This will simply add a "rdfs:seeAlso <modgui.ttl>" on the LV2 manifest.@n
538 It is up to you to create this file.
539 */
540 #define DISTRHO_PLUGIN_USES_MODGUI 0
541
542 /**
543 Enable direct access between the %UI and plugin code.
544 @see UI::getPluginInstancePointer()
545 @note DO NOT USE THIS UNLESS STRICTLY NECESSARY!!
546 Try to avoid it at all costs!
547 */
548 #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0
549
550 /**
551 Whether the plugin introduces latency during audio or midi processing.
552 @see Plugin::setLatency(uint32_t)
553 */
554 #define DISTRHO_PLUGIN_WANT_LATENCY 1
555
556 /**
557 Whether the plugin wants MIDI input.@n
558 This is automatically enabled if @ref DISTRHO_PLUGIN_IS_SYNTH is true.
559 */
560 #define DISTRHO_PLUGIN_WANT_MIDI_INPUT 1
561
562 /**
563 Whether the plugin wants MIDI output.
564 @see Plugin::writeMidiEvent(const MidiEvent&)
565 */
566 #define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 1
567
568 /**
569 Whether the plugin wants to change its own parameter inputs.@n
570 Not all hosts or plugin formats support this,
571 so Plugin::canRequestParameterValueChanges() can be used to query support at runtime.
572 @see Plugin::requestParameterValueChange(uint32_t, float)
573 */
574 #define DISTRHO_PLUGIN_WANT_PARAMETER_VALUE_CHANGE_REQUEST 1
575
576 /**
577 Whether the plugin provides its own internal programs.
578 @see Plugin::initProgramName(uint32_t, String&)
579 @see Plugin::loadProgram(uint32_t)
580 */
581 #define DISTRHO_PLUGIN_WANT_PROGRAMS 1
582
583 /**
584 Whether the plugin uses internal non-parameter data.
585 @see Plugin::initState(uint32_t, String&, String&)
586 @see Plugin::setState(const char*, const char*)
587 */
588 #define DISTRHO_PLUGIN_WANT_STATE 1
589
590 /**
591 Whether the plugin implements the full state API.
592 When this macro is enabled, the plugin must implement a new getState(const char* key) function, which the host calls when saving its session/project.
593 This is useful for plugins that have custom internal values not exposed to the host as key-value state pairs or parameters.
594 Most simple effects and synths will not need this.
595 @note this macro is automatically enabled if a plugin has programs and state, as the key-value state pairs need to be updated when the current program changes.
596 @see Plugin::getState(const char*)
597 */
598 #define DISTRHO_PLUGIN_WANT_FULL_STATE 1
599
600 /**
601 Whether the plugin wants time position information from the host.
602 @see Plugin::getTimePosition()
603 */
604 #define DISTRHO_PLUGIN_WANT_TIMEPOS 1
605
606 /**
607 Whether the %UI uses a custom toolkit implementation based on OpenGL.@n
608 When enabled, the macros @ref DISTRHO_UI_CUSTOM_INCLUDE_PATH and @ref DISTRHO_UI_CUSTOM_WIDGET_TYPE are required.
609 */
610 #define DISTRHO_UI_USE_CUSTOM 1
611
612 /**
613 The include path to the header file used by the custom toolkit implementation.
614 This path must be relative to dpf/distrho/DistrhoUI.hpp
615 @see DISTRHO_UI_USE_CUSTOM
616 */
617 #define DISTRHO_UI_CUSTOM_INCLUDE_PATH
618
619 /**
620 The top-level-widget typedef to use for the custom toolkit.
621 This widget class MUST be a subclass of DGL TopLevelWindow class.
622 It is recommended that you keep this widget class inside the DGL namespace,
623 and define widget type as e.g. DGL_NAMESPACE::MyCustomTopLevelWidget.
624 @see DISTRHO_UI_USE_CUSTOM
625 */
626 #define DISTRHO_UI_CUSTOM_WIDGET_TYPE
627
628 /**
629 Default UI width to use when creating initial and temporary windows.@n
630 Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts.
631 (which would normally be done for knowing the UI size before host creates a window for it)
632
633 Value must match 1x scale factor.
634
635 When this macro is defined, the companion DISTRHO_UI_DEFAULT_HEIGHT macro must be defined as well.
636 */
637 #define DISTRHO_UI_DEFAULT_WIDTH 300
638
639 /**
640 Default UI height to use when creating initial and temporary windows.@n
641 Setting this macro allows to skip a temporary UI from being created in certain VST2 and VST3 hosts.
642 (which would normally be done for knowing the UI size before host creates a window for it)
643
644 Value must match 1x scale factor.
645
646 When this macro is defined, the companion DISTRHO_UI_DEFAULT_WIDTH macro must be defined as well.
647 */
648 #define DISTRHO_UI_DEFAULT_HEIGHT 300
649
650 /**
651 Whether the %UI uses NanoVG for drawing instead of the default raw OpenGL calls.@n
652 When enabled your %UI instance will subclass @ref NanoWidget instead of @ref Widget.
653 */
654 #define DISTRHO_UI_USE_NANOVG 1
655
656 /**
657 Whether the %UI is resizable to any size by the user.@n
658 By default this is false, and resizing is only allowed under the plugin UI control,@n
659 Enabling this options makes it possible for the user to resize the plugin UI at anytime.
660 @see UI::setGeometryConstraints(uint, uint, bool, bool)
661 */
662 #define DISTRHO_UI_USER_RESIZABLE 1
663
664 /**
665 The %UI URI when exporting in LV2 format.@n
666 By default this is set to @ref DISTRHO_PLUGIN_URI with "#UI" as suffix.
667 */
668 #define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI"
669
670 /**
671 Custom LV2 category for the plugin.@n
672 This is a single string, and can be one of the following values:
673
674 - lv2:AllpassPlugin
675 - lv2:AmplifierPlugin
676 - lv2:AnalyserPlugin
677 - lv2:BandpassPlugin
678 - lv2:ChorusPlugin
679 - lv2:CombPlugin
680 - lv2:CompressorPlugin
681 - lv2:ConstantPlugin
682 - lv2:ConverterPlugin
683 - lv2:DelayPlugin
684 - lv2:DistortionPlugin
685 - lv2:DynamicsPlugin
686 - lv2:EQPlugin
687 - lv2:EnvelopePlugin
688 - lv2:ExpanderPlugin
689 - lv2:FilterPlugin
690 - lv2:FlangerPlugin
691 - lv2:FunctionPlugin
692 - lv2:GatePlugin
693 - lv2:GeneratorPlugin
694 - lv2:HighpassPlugin
695 - lv2:InstrumentPlugin
696 - lv2:LimiterPlugin
697 - lv2:LowpassPlugin
698 - lv2:MIDIPlugin
699 - lv2:MixerPlugin
700 - lv2:ModulatorPlugin
701 - lv2:MultiEQPlugin
702 - lv2:OscillatorPlugin
703 - lv2:ParaEQPlugin
704 - lv2:PhaserPlugin
705 - lv2:PitchPlugin
706 - lv2:ReverbPlugin
707 - lv2:SimulatorPlugin
708 - lv2:SpatialPlugin
709 - lv2:SpectralPlugin
710 - lv2:UtilityPlugin
711 - lv2:WaveshaperPlugin
712
713 See http://lv2plug.in/ns/lv2core for more information.
714 */
715 #define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:Plugin"
716
717 /**
718 Custom VST3 categories for the plugin.@n
719 This is a single concatenated string of categories, separated by a @c |.
720
721 Each effect category can be one of the following values:
722
723 - Fx
724 - Fx|Ambisonics
725 - Fx|Analyzer
726 - Fx|Delay
727 - Fx|Distortion
728 - Fx|Dynamics
729 - Fx|EQ
730 - Fx|Filter
731 - Fx|Instrument
732 - Fx|Instrument|External
733 - Fx|Spatial
734 - Fx|Generator
735 - Fx|Mastering
736 - Fx|Modulation
737 - Fx|Network
738 - Fx|Pitch Shift
739 - Fx|Restoration
740 - Fx|Reverb
741 - Fx|Surround
742 - Fx|Tools
743
744 Each instrument category can be one of the following values:
745
746 - Instrument
747 - Instrument|Drum
748 - Instrument|External
749 - Instrument|Piano
750 - Instrument|Sampler
751 - Instrument|Synth
752 - Instrument|Synth|Sampler
753
754 And extra categories possible for any plugin type:
755
756 - Mono
757 - Stereo
758 */
759 #define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Stereo"
760
761 /**
762 Custom CLAP features for the plugin.@n
763 This is a list of features defined as a string array body, without the terminating @c , or nullptr.
764
765 A top-level category can be set as feature and be one of the following values:
766
767 - instrument
768 - audio-effect
769 - note-effect
770 - analyzer
771
772 The following sub-categories can also be set:
773
774 - synthesizer
775 - sampler
776 - drum
777 - drum-machine
778
779 - filter
780 - phaser
781 - equalizer
782 - de-esser
783 - phase-vocoder
784 - granular
785 - frequency-shifter
786 - pitch-shifter
787
788 - distortion
789 - transient-shaper
790 - compressor
791 - limiter
792
793 - flanger
794 - chorus
795 - delay
796 - reverb
797
798 - tremolo
799 - glitch
800
801 - utility
802 - pitch-correction
803 - restoration
804
805 - multi-effects
806
807 - mixing
808 - mastering
809
810 And finally the following audio capabilities can be set:
811
812 - mono
813 - stereo
814 - surround
815 - ambisonic
816 */
817 #define DISTRHO_PLUGIN_CLAP_FEATURES "audio-effect", "stereo"
818
819 /**
820 The plugin id when exporting in CLAP format, in reverse URI form.
821 @note This macro is required when building CLAP plugins
822 */
823 #define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.effect"
824
825 /** @} */
826
827 /* ------------------------------------------------------------------------------------------------------------
828 * Plugin Macros */
829
830 /**
831 @defgroup ExtraPluginMacros Extra Plugin Macros
832
833 C Macros to customize DPF behaviour.
834
835 These are macros that do not set plugin features or information, but instead change DPF internals.
836 They are all optional.
837
838 Unless stated otherwise, values are assumed to be a simple/empty define.
839 @{
840 */
841
842 /**
843 Whether to enable runtime plugin tests.@n
844 This will check, during initialization of the plugin, if parameters, programs and states are setup properly.@n
845 Useful to enable as part of CI, can safely be skipped.@n
846 Under DPF makefiles this can be enabled by using `make DPF_RUNTIME_TESTING=true`.
847
848 @note Some checks are only available with the GCC compiler,
849 for detecting if a virtual function has been reimplemented.
850 */
851 #define DPF_RUNTIME_TESTING
852
853 /**
854 Whether to show parameter outputs in the VST2 plugins.@n
855 This is disabled (unset) by default, as the VST2 format has no notion of read-only parameters.
856 */
857 #define DPF_VST_SHOW_PARAMETER_OUTPUTS
858
859 /**
860 Disable all file browser related code.@n
861 Must be set as compiler macro when building DGL. (e.g. `CXXFLAGS="-DDGL_FILE_BROWSER_DISABLED"`)
862 */
863 #define DGL_FILE_BROWSER_DISABLED
864
865 /**
866 Disable resource files, like internally used fonts.@n
867 Must be set as compiler macro when building DGL. (e.g. `CXXFLAGS="-DDGL_NO_SHARED_RESOURCES"`)
868 */
869 #define DGL_NO_SHARED_RESOURCES
870
871 /**
872 Whether to use OpenGL3 instead of the default OpenGL2 compatility profile.
873 Under DPF makefiles this can be enabled by using `make USE_OPENGL3=true` on the dgl build step.
874
875 @note This is experimental and incomplete, contributions are welcome and appreciated.
876 */
877 #define DGL_USE_OPENGL3
878
879 /** @} */
880
881 /* ------------------------------------------------------------------------------------------------------------
882 * Namespace Macros */
883
884 /**
885 @defgroup NamespaceMacros Namespace Macros
886
887 C Macros to use and customize DPF namespaces.
888
889 These are macros that serve as helpers around C++ namespaces, and also as a way to set custom namespaces during a build.
890 @{
891 */
892
893 /**
894 Compiler macro that sets the C++ namespace for DPF plugins.@n
895 If unset during build, it will use the name @b DISTRHO by default.
896
897 Unless you know exactly what you are doing, you do need to modify this value.@n
898 The only probable useful case for customizing it is if you are building a big collection of very similar DPF-based plugins in your application.@n
899 For example, having 2 different versions of the same plugin that should behave differently but still exist within the same binary.
900
901 On macOS (where due to Objective-C restrictions all code that interacts with Cocoa needs to be in a flat namespace),
902 DPF will automatically use the plugin name as prefix to flat namespace functions in order to avoid conflicts.
903
904 So, basically, it is DPF's job to make sure plugin binaries are 100% usable as-is.@n
905 You typically do not need to care about this at all.
906 */
907 #define DISTRHO_NAMESPACE DISTRHO
908
909 /**
910 Compiler macro that begins the C++ namespace for @b DISTRHO, as needed for (the DSP side of) plugins.@n
911 All classes in DPF are within this namespace except for UI/graphics stuff.
912 @see END_NAMESPACE_DISTRHO
913 */
914 #define START_NAMESPACE_DISTRHO namespace DISTRHO_NAMESPACE {
915
916 /**
917 Close the namespace previously started by @ref START_NAMESPACE_DISTRHO.@n
918 This doesn't really need to be a macro, it is just prettier/more consistent that way.
919 */
920 #define END_NAMESPACE_DISTRHO }
921
922 /**
923 Make the @b DISTRHO namespace available in the current function scope.@n
924 This is not set by default in order to avoid conflicts with commonly used names such as "Parameter" and "Plugin".
925 */
926 #define USE_NAMESPACE_DISTRHO using namespace DISTRHO_NAMESPACE;
927
928 /* TODO
929 *
930 * DISTRHO_MACRO_AS_STRING_VALUE
931 * DISTRHO_MACRO_AS_STRING
932 * DISTRHO_PROPER_CPP11_SUPPORT
933 * DONT_SET_USING_DISTRHO_NAMESPACE
934 *
935 */
936
937 // -----------------------------------------------------------------------------------------------------------
938
939 END_NAMESPACE_DISTRHO
940
941 #endif // DOXYGEN