What DAWs use to differentiate plugins?

SDK for VST 3 audio plug-in and host development.
Post Reply
User avatar
pongasoft
Posts: 84
Joined: Sun Mar 11, 2018 5:57 pm
Location: Las Vegas, USA
Contact:

What DAWs use to differentiate plugins?

Post by pongasoft » Sun Sep 08, 2019 3:35 pm

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?

Thanks
Yan

ygrabit
Posts: 129
Joined: Fri Jun 17, 2016 7:52 am
Location: Hamburg

Re: What DAWs use to differentiate plugins?

Post by ygrabit » Mon Sep 09, 2019 6:33 am

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", 
			   "http://www.steinberg.net", 
			   "mailto:info@steinberg.de")

	//---First Plug-in included in this factory-------
	// its kVstAudioEffectClass component
	DEF_CLASS2 (INLINE_UID_FROM_FUID(AGainProcessorUID),
				PClassInfo::kManyInstances,	// cardinality
here it is AGainProcessorUID
YVan Grabit

User avatar
pongasoft
Posts: 84
Joined: Sun Mar 11, 2018 5:57 pm
Location: Las Vegas, USA
Contact:

Re: What DAWs use to differentiate plugins?

Post by pongasoft » Mon Sep 09, 2019 4:10 pm

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"
#else
static const ::Steinberg::FUID JambaTestPluginProcessorUID(0xaa3926ff, 0x6d324b93, 0x80f3f867, 0x9545fa05);
static const ::Steinberg::FUID JambaTestPluginControllerUID(0xbe691f77, 0x73d04d92, 0x9ef55ad4, 0x4cc563c8);
#define stringPluginName "JambaTestPlugin"
#endif

BEGIN_FACTORY_DEF ("pongasoft",
                   "https://www.pongasoft.com",
                   "support@pongasoft.com")

    // 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...)

Yan

Post Reply