Signed-off-by: falkTX <falktx@falktx.com>pull/452/head
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -667,6 +667,29 @@ START_NAMESPACE_DISTRHO | |||
*/ | |||
#define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" | |||
/** | |||
The AudioUnit type for a plugin.@n | |||
This is a 4-character symbol, automatically set by DPF based on other plugin macros. | |||
See https://developer.apple.com/documentation/audiotoolbox/1584142-audio_unit_types for more information. | |||
*/ | |||
#define DISTRHO_PLUGIN_AU_TYPE aufx | |||
/** | |||
The AudioUnit subtype for a plugin.@n | |||
This is a 4-character symbol which identifies a plugin.@n | |||
It must be unique within a manufacturer's plugins, but different manufacturers can use the same subtype. | |||
@note This macro is required when building AU plugins | |||
*/ | |||
#define DISTRHO_PLUGIN_AU_SUBTYPE test | |||
/** | |||
The AudioUnit manufacturer for a plugin.@n | |||
This is a 4-character symbol with at least one non-lower case character.@n | |||
Plugins from the same brand/maker should use the same symbol. | |||
@note This macro is required when building AU plugins | |||
*/ | |||
#define DISTRHO_PLUGIN_AU_MANUFACTURER Dstr | |||
/** | |||
Custom LV2 category for the plugin.@n | |||
This is a single string, and can be one of the following values: | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2023 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -23,7 +23,7 @@ | |||
#include "DistrhoPluginInfo.h" | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Check if all required macros are defined | |||
#ifndef DISTRHO_PLUGIN_NAME | |||
@@ -42,7 +42,7 @@ | |||
# error DISTRHO_PLUGIN_URI undefined! | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Define optional macros if not done yet | |||
#ifndef DISTRHO_PLUGIN_HAS_UI | |||
@@ -110,7 +110,26 @@ | |||
# define DISTRHO_UI_USE_NANOVG 0 | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Define DISTRHO_PLUGIN_AU_TYPE if needed | |||
#ifndef DISTRHO_PLUGIN_AU_TYPE | |||
# if DISTRHO_PLUGIN_IS_SYNTH | |||
# define DISTRHO_PLUGIN_AU_TYPE aumu /* kAudioUnitType_MusicDevice */ | |||
# elif (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT) && DISTRHO_PLUGIN_NUM_INPUTS != 0 && DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
# define DISTRHO_PLUGIN_AU_TYPE aumf /* kAudioUnitType_MusicEffect */ | |||
# elif (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT) && DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
# define DISTRHO_PLUGIN_AU_TYPE aumu /* kAudioUnitType_MusicDevice */ | |||
# elif (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT) && DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
# define DISTRHO_PLUGIN_AU_TYPE aumi /* kAudioUnitType_MIDIProcessor */ | |||
# elif DISTRHO_PLUGIN_NUM_INPUTS == 0 && DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
# define DISTRHO_PLUGIN_AU_TYPE augn /* kAudioUnitType_Generator */ | |||
# else | |||
# define DISTRHO_PLUGIN_AU_TYPE aufx /* kAudioUnitType_Effect */ | |||
# endif | |||
#endif | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Define DISTRHO_PLUGIN_HAS_EMBED_UI if needed | |||
#ifndef DISTRHO_PLUGIN_HAS_EMBED_UI | |||
@@ -121,21 +140,21 @@ | |||
# endif | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Define DISTRHO_UI_URI if needed | |||
#ifndef DISTRHO_UI_URI | |||
# define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#DPF_UI" | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Test if synth has audio outputs | |||
#if DISTRHO_PLUGIN_IS_SYNTH && DISTRHO_PLUGIN_NUM_OUTPUTS == 0 | |||
# error Synths need audio output to work! | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Enable MIDI input if synth, test if midi-input disabled when synth | |||
#ifndef DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||
@@ -144,7 +163,7 @@ | |||
# error Synths need MIDI input to work! | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Enable state if plugin wants state files (deprecated) | |||
#ifdef DISTRHO_PLUGIN_WANT_STATEFILES | |||
@@ -156,7 +175,7 @@ | |||
# endif | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Enable full state if plugin exports presets | |||
#if DISTRHO_PLUGIN_WANT_PROGRAMS && DISTRHO_PLUGIN_WANT_STATE && defined(DISTRHO_PLUGIN_WANT_FULL_STATE_WAS_NOT_SET) | |||
@@ -165,7 +184,7 @@ | |||
# define DISTRHO_PLUGIN_WANT_FULL_STATE 1 | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Disable file browser if using external UI | |||
#if DISTRHO_UI_FILE_BROWSER && DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||
@@ -174,7 +193,7 @@ | |||
# define DISTRHO_UI_FILE_BROWSER 0 | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Disable UI if DGL or external UI is not available | |||
#if (defined(DGL_CAIRO) && ! defined(HAVE_CAIRO)) || (defined(DGL_OPENGL) && ! defined(HAVE_OPENGL)) | |||
@@ -187,7 +206,7 @@ | |||
# define DISTRHO_PLUGIN_HAS_UI 0 | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Make sure both default width and height are provided | |||
#if defined(DISTRHO_UI_DEFAULT_WIDTH) && !defined(DISTRHO_UI_DEFAULT_HEIGHT) | |||
@@ -198,7 +217,7 @@ | |||
# error DISTRHO_UI_DEFAULT_HEIGHT is defined but DISTRHO_UI_DEFAULT_WIDTH is not | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Other UI defaults | |||
#ifndef DISTRHO_UI_USE_CAIRO | |||
@@ -209,13 +228,13 @@ | |||
# define DISTRHO_UI_USE_CUSTOM 0 | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Prevent users from messing about with DPF internals | |||
#ifdef DISTRHO_UI_IS_STANDALONE | |||
# error DISTRHO_UI_IS_STANDALONE must not be defined | |||
#endif | |||
// ----------------------------------------------------------------------- | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
#endif // DISTRHO_PLUGIN_CHECKS_H_INCLUDED |
@@ -17,6 +17,14 @@ | |||
#include "DistrhoPluginInternal.hpp" | |||
#include "../DistrhoPluginUtils.hpp" | |||
#ifndef DISTRHO_PLUGIN_AU_SUBTYPE | |||
# error DISTRHO_PLUGIN_AU_SUBTYPE undefined! | |||
#endif | |||
#ifndef DISTRHO_PLUGIN_AU_MANUFACTURER | |||
# error DISTRHO_PLUGIN_AU_MANUFACTURER undefined! | |||
#endif | |||
#include <fstream> | |||
#include <iostream> | |||
@@ -37,6 +45,13 @@ void generate_au_plist(const PluginExporter& plugin, | |||
const uint32_t minorVersion = (version & 0x00FF00) >> 8; | |||
const uint32_t microVersion = (version & 0x0000FF) >> 0; | |||
#define MACRO_STR2(s) #s | |||
#define MACRO_STR(s) MACRO_STR2(s) | |||
static_assert(sizeof(MACRO_STR(DISTRHO_PLUGIN_AU_TYPE)) == 5, "The macro DISTRHO_PLUGIN_AU_TYPE has incorrect length"); | |||
static_assert(sizeof(MACRO_STR(DISTRHO_PLUGIN_AU_SUBTYPE)) == 5, "The macro DISTRHO_PLUGIN_AU_SUBTYPE has incorrect length"); | |||
static_assert(sizeof(MACRO_STR(DISTRHO_PLUGIN_AU_MANUFACTURER)) == 5, "The macro DISTRHO_PLUGIN_AU_MANUFACTURER has incorrect length"); | |||
outputFile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; | |||
outputFile << "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"; | |||
outputFile << "<plist>\n"; | |||
@@ -72,24 +87,12 @@ void generate_au_plist(const PluginExporter& plugin, | |||
outputFile << " <string>" << plugin.getDescription() << "</string>\n"; | |||
outputFile << " <key>factoryFunction</key>\n"; | |||
outputFile << " <string>PluginAUFactory</string>\n"; | |||
outputFile << " <key>manufacturer</key>\n"; | |||
outputFile << " <string>Dstr</string>\n"; | |||
outputFile << " <key>type</key>\n"; | |||
#if DISTRHO_PLUGIN_IS_SYNTH | |||
outputFile << " <string>aumu</string>\n"; // kAudioUnitType_MusicDevice | |||
#elif (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT) && DISTRHO_PLUGIN_NUM_INPUTS != 0 && DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
outputFile << " <string>aumf</string>\n"; // kAudioUnitType_MusicEffect | |||
#elif (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT) && DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
outputFile << " <string>aumu</string>\n"; // kAudioUnitType_MusicDevice | |||
#elif (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT) && DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
outputFile << " <string>aumi</string>\n"; // kAudioUnitType_MIDIProcessor | |||
#elif DISTRHO_PLUGIN_NUM_INPUTS == 0 && DISTRHO_PLUGIN_NUM_OUTPUTS != 0 | |||
outputFile << " <string>augn</string>\n"; // kAudioUnitType_Generator | |||
#else | |||
outputFile << " <string>aufx</string>\n"; // kAudioUnitType_Effect | |||
#endif | |||
outputFile << " <string>" MACRO_STR(DISTRHO_PLUGIN_AU_TYPE) "</string>\n"; | |||
outputFile << " <key>subtype</key>\n"; | |||
outputFile << " <string>Cair</string>\n"; | |||
outputFile << " <string>" MACRO_STR(DISTRHO_PLUGIN_AU_SUBTYPE) "</string>\n"; | |||
outputFile << " <key>manufacturer</key>\n"; | |||
outputFile << " <string>" MACRO_STR(DISTRHO_PLUGIN_AU_MANUFACTURER) "</string>\n"; | |||
outputFile << " <key>version</key>\n"; | |||
outputFile << " <integer>" << version << "</integer>\n"; | |||
outputFile << " <key>resourceUsage</key>\n"; | |||
@@ -104,6 +107,9 @@ void generate_au_plist(const PluginExporter& plugin, | |||
outputFile << " </dict>\n"; | |||
outputFile << "</plist>\n"; | |||
#undef MACRO_STR | |||
#undef MACRO_STR2 | |||
outputFile.close(); | |||
std::cout << " done!" << std::endl; | |||
} | |||
@@ -1017,14 +1017,14 @@ public: | |||
return true; | |||
} | |||
bool setSampleRate(const double sampleRate, const bool doCallback = false) | |||
void setSampleRate(const double sampleRate, const bool doCallback = false) | |||
{ | |||
DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, false); | |||
DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, false); | |||
DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); | |||
DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr,); | |||
DISTRHO_SAFE_ASSERT(sampleRate > 0.0); | |||
if (d_isEqual(fData->sampleRate, sampleRate)) | |||
return false; | |||
return; | |||
fData->sampleRate = sampleRate; | |||
@@ -1034,8 +1034,6 @@ public: | |||
fPlugin->sampleRateChanged(sampleRate); | |||
if (fIsActive) fPlugin->activate(); | |||
} | |||
return true; | |||
} | |||
private: | |||
@@ -19,12 +19,20 @@ | |||
#define Point AudioUnitPoint | |||
#define Size AudioUnitSize | |||
// #include <AudioUnit/AudioUnit.h> | |||
#include <AudioUnit/AudioUnit.h> | |||
#include <AudioUnit/AUCocoaUIView.h> | |||
#undef Point | |||
#undef Size | |||
#ifndef DISTRHO_PLUGIN_AU_SUBTYPE | |||
# error DISTRHO_PLUGIN_AU_SUBTYPE undefined! | |||
#endif | |||
#ifndef DISTRHO_PLUGIN_AU_MANUFACTURER | |||
# error DISTRHO_PLUGIN_AU_MANUFACTURER undefined! | |||
#endif | |||
START_NAMESPACE_DISTRHO | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -47,11 +55,11 @@ extern const char* d_nextBundlePath; | |||
class DPF_UI_AU | |||
{ | |||
public: | |||
DPF_UI_AU(const AudioUnit inAU, | |||
DPF_UI_AU(const AudioUnit component, | |||
const intptr_t winId, | |||
const double sampleRate, | |||
void* const instancePointer) | |||
: fAU(inAU), | |||
: fComponent(component), | |||
fTimerRef(nullptr), | |||
fUI(this, winId, sampleRate, | |||
editParameterCallback, | |||
@@ -72,10 +80,14 @@ public: | |||
DISTRHO_SAFE_ASSERT_RETURN(fTimerRef != nullptr,); | |||
CFRunLoopAddTimer(CFRunLoopGetCurrent(), fTimerRef, kCFRunLoopCommonModes); | |||
AudioUnitAddPropertyListener(fComponent, 19003, auPropertyChangedCallback, this); | |||
} | |||
~DPF_UI_AU() | |||
{ | |||
AudioUnitRemovePropertyListenerWithUserData(fComponent, 19003, auPropertyChangedCallback, this); | |||
if (fTimerRef != nullptr) | |||
{ | |||
CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), fTimerRef, kCFRunLoopCommonModes); | |||
@@ -89,7 +101,7 @@ public: | |||
} | |||
private: | |||
const AudioUnit fAU; | |||
const AudioUnit fComponent; | |||
CFRunLoopTimerRef fTimerRef; | |||
UIExporter fUI; | |||
@@ -107,11 +119,44 @@ private: | |||
static_cast<DPF_UI_AU*>(info)->idleCallback(); | |||
} | |||
// ---------------------------------------------------------------------------------------------------------------- | |||
// AU callbacks | |||
void auPropertyChanged(const AudioUnitPropertyID prop, const AudioUnitElement elem) | |||
{ | |||
switch (prop) | |||
{ | |||
case 19003: | |||
{ | |||
AudioUnitParameterValue value; | |||
if (AudioUnitGetParameter(fComponent, elem, kAudioUnitScope_Global, 0, &value) == noErr) | |||
fUI.parameterChanged(elem, value); | |||
} | |||
break; | |||
} | |||
} | |||
static void auPropertyChangedCallback(void* const userData, | |||
const AudioUnit component, | |||
const AudioUnitPropertyID prop, | |||
const AudioUnitScope scope, | |||
const AudioUnitElement elem) | |||
{ | |||
DPF_UI_AU* const self = static_cast<DPF_UI_AU*>(userData); | |||
DISTRHO_SAFE_ASSERT_RETURN(self != nullptr,); | |||
DISTRHO_SAFE_ASSERT_RETURN(self->fComponent == component,); | |||
DISTRHO_SAFE_ASSERT_UINT_RETURN(scope == kAudioUnitScope_Global, scope,); | |||
self->auPropertyChanged(prop, elem); | |||
} | |||
// ---------------------------------------------------------------------------------------------------------------- | |||
// DPF callbacks | |||
void editParameter(uint32_t, bool) const | |||
void editParameter(const uint32_t rindex, const bool started) const | |||
{ | |||
AudioUnitSetProperty(fComponent, 19002, kAudioUnitScope_Global, rindex, &started, sizeof(bool)); | |||
} | |||
static void editParameterCallback(void* const ptr, const uint32_t rindex, const bool started) | |||
@@ -119,8 +164,9 @@ private: | |||
static_cast<DPF_UI_AU*>(ptr)->editParameter(rindex, started); | |||
} | |||
void setParameterValue(uint32_t, float) | |||
void setParameterValue(const uint32_t rindex, const float value) | |||
{ | |||
AudioUnitSetProperty(fComponent, 19001, kAudioUnitScope_Global, rindex, &value, sizeof(float)); | |||
} | |||
static void setParameterCallback(void* const ptr, const uint32_t rindex, const float value) | |||
@@ -166,13 +212,18 @@ END_NAMESPACE_DISTRHO | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@interface DPF_UI_ViewFactory : NSObject<AUCocoaUIBase> | |||
#define MACRO_NAME2(a, b, c, d, e, f) a ## b ## c ## d ## e ## f | |||
#define MACRO_NAME(a, b, c, d, e, f) MACRO_NAME2(a, b, c, d, e, f) | |||
#define COCOA_VIEW_CLASS_NAME MACRO_NAME(CocoaAUView_, DISTRHO_PLUGIN_AU_TYPE, _, DISTRHO_PLUGIN_AU_SUBTYPE, _, DISTRHO_PLUGIN_AU_MANUFACTURER) | |||
@interface COCOA_VIEW_CLASS_NAME : NSObject<AUCocoaUIBase> | |||
{ | |||
DPF_UI_AU* ui; | |||
} | |||
@end | |||
@implementation DPF_UI_ViewFactory | |||
@implementation COCOA_VIEW_CLASS_NAME | |||
- (NSString*) description | |||
{ | |||
@@ -184,17 +235,20 @@ END_NAMESPACE_DISTRHO | |||
return 0; | |||
} | |||
- (NSView*) uiViewForAudioUnit:(AudioUnit)inAU withSize:(NSSize)inPreferredSize | |||
- (NSView*) uiViewForAudioUnit:(AudioUnit)component withSize:(NSSize)inPreferredSize | |||
{ | |||
const double sampleRate = d_nextSampleRate; | |||
const intptr_t winId = 0; | |||
void* const instancePointer = nullptr; | |||
ui = new DPF_UI_AU(inAU, winId, sampleRate, instancePointer); | |||
ui = new DPF_UI_AU(component, winId, sampleRate, instancePointer); | |||
return ui->getNativeView(); | |||
} | |||
@end | |||
#undef MACRO_NAME | |||
#undef MACRO_NAME2 | |||
// -------------------------------------------------------------------------------------------------------------------- |
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -39,6 +39,22 @@ | |||
*/ | |||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/CairoUI" | |||
/** | |||
The AudioUnit subtype for a plugin. | |||
This is a 4-character symbol which identifies a plugin. | |||
It must be unique within a manufacturer's plugins, but different manufacturers can use the same subtype. | |||
@note This macro is required when building AU plugins | |||
*/ | |||
#define DISTRHO_PLUGIN_AU_SUBTYPE cair | |||
/** | |||
The AudioUnit manufacturer for a plugin. | |||
This is a 4-character symbol with at least one non-lower case character. | |||
Plugins from the same brand/maker should use the same symbol. | |||
@note This macro is required when building AU plugins | |||
*/ | |||
#define DISTRHO_PLUGIN_AU_MANUFACTURER Dstr | |||
/** | |||
The plugin id when exporting in CLAP format, in reverse URI form. | |||
@note This macro is required when building CLAP plugins | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -22,6 +22,9 @@ | |||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/Info" | |||
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.examples.info" | |||
#define DISTRHO_PLUGIN_AU_SUBTYPE info | |||
#define DISTRHO_PLUGIN_AU_MANUFACTURER Dstr | |||
#define DISTRHO_PLUGIN_HAS_UI 1 | |||
#define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
#define DISTRHO_PLUGIN_NUM_INPUTS 2 | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -22,6 +22,9 @@ | |||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/Parameters" | |||
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.examples.parameters" | |||
#define DISTRHO_PLUGIN_AU_SUBTYPE parm | |||
#define DISTRHO_PLUGIN_AU_MANUFACTURER Dstr | |||
#define DISTRHO_PLUGIN_HAS_UI 1 | |||
#define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||
#define DISTRHO_PLUGIN_NUM_INPUTS 2 | |||