Page 1 of 1

What DAWs use to differentiate plugins?

Posted: Sun Sep 08, 2019 3:35 pm
by pongasoft
I have the following use case:

On macOS, I build my plugin with all debug symbols and I generate a "~/Library/Audio/Plug-ins/VST3/VAC-6V_Debug.vst3" folder.

I also build for "release" without debug symbols and I generate a "~/Library/Audio/Plug-ins/VST3/VAC-6V.vst3" folder.

When I use the VST3 Plugin Test host that comes with the SDK it only shows me one plugin.

So my question is, what needs to be different between these 2 bundles so that they get picked up as 2 different plugins by the DAWs?

Clearly the name of the folder seems to be irrelevant, so what is relevant?


Re: What DAWs use to differentiate plugins?

Posted: Mon Sep 09, 2019 6:33 am
by ygrabit
Each VST3 plugin is identified by its UID defined in the processor component not by its name or filename.

Code: Select all

BEGIN_FACTORY_DEF ("Steinberg Media Technologies", 

	//---First Plug-in included in this factory-------
	// its kVstAudioEffectClass component
				PClassInfo::kManyInstances,	// cardinality
here it is AGainProcessorUID

Re: What DAWs use to differentiate plugins?

Posted: Mon Sep 09, 2019 4:10 pm
by pongasoft
Yes I do confirm that it works... here is what I ended up doing:

Code: Select all

#ifndef NDEBUG
static const ::Steinberg::FUID JambaTestPluginProcessorUID(0x1a410f8a, 0xbfb94a04, 0x9cf832e0, 0xd3f0e2ee);
static const ::Steinberg::FUID JambaTestPluginControllerUID(0xf831107a, 0x489b4284, 0xbe16d9db, 0xe12bb012);
#define stringPluginName "JambaTestPlugin_Debug"
static const ::Steinberg::FUID JambaTestPluginProcessorUID(0xaa3926ff, 0x6d324b93, 0x80f3f867, 0x9545fa05);
static const ::Steinberg::FUID JambaTestPluginControllerUID(0xbe691f77, 0x73d04d92, 0x9ef55ad4, 0x4cc563c8);
#define stringPluginName "JambaTestPlugin"

BEGIN_FACTORY_DEF ("pongasoft",

    // JambaTestPluginProcessor processor
    DEF_CLASS2 (INLINE_UID_FROM_FUID(JambaTestPluginProcessorUID),
                PClassInfo::kManyInstances,  // cardinality
                kVstAudioEffectClass,        // the component category (do not changed this)
                stringPluginName,            // here the Plug-in name (to be changed)
                Vst::kDistributable,         // means that component and controller could be distributed on different computers
                Vst::PlugType::kFx,          // Subcategory for this Plug-in (to be changed)
                FULL_VERSION_STR,            // Plug-in version (to be changed)
                kVstVersionString,           // the VST 3 SDK version (do not changed this, use always this define)
                pongasoft::test::jamba::RT::JambaTestPluginProcessor::createInstance)  // function pointer called when this component should be instantiated

I end up using different IDs based on NDEBUG (Debug vs Release build) as well as a different name so that it can be differentiated in the list of plugins (which usually shows the name not the UIDs...)