diff --git a/source/backend/CarlaBackend.hpp b/source/backend/CarlaBackend.hpp
index a88240649..58036058b 100644
--- a/source/backend/CarlaBackend.hpp
+++ b/source/backend/CarlaBackend.hpp
@@ -162,10 +162,11 @@ enum PluginType {
PLUGIN_LADSPA = 2, //!< LADSPA plugin.\see LadspaPlugin
PLUGIN_DSSI = 3, //!< DSSI plugin.\see DssiPlugin
PLUGIN_LV2 = 4, //!< LV2 plugin.\see Lv2Plugin
- PLUGIN_VST = 5, //!< VST plugin.\see VstPlugin
- PLUGIN_GIG = 6, //!< GIG sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
- PLUGIN_SF2 = 7, //!< SF2 sound kit (aka SoundFont), implemented via FluidSynth.\see FluidSynthPlugin
- PLUGIN_SFZ = 8 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
+ PLUGIN_VST = 5, //!< VST1/2 plugin.\see VstPlugin
+ PLUGIN_VST3 = 6, //!< VST3 plugin.\see VstPlugin
+ PLUGIN_GIG = 7, //!< GIG sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
+ PLUGIN_SF2 = 8, //!< SF2 sound kit (aka SoundFont), implemented via FluidSynth.\see FluidSynthPlugin
+ PLUGIN_SFZ = 9 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin
};
/*!
diff --git a/source/backend/CarlaPlugin.hpp b/source/backend/CarlaPlugin.hpp
index 380843e14..ad0d5b075 100644
--- a/source/backend/CarlaPlugin.hpp
+++ b/source/backend/CarlaPlugin.hpp
@@ -838,6 +838,7 @@ public:
static CarlaPlugin* newDSSI(const Initializer& init, const char* const guiFilename);
static CarlaPlugin* newLV2(const Initializer& init);
static CarlaPlugin* newVST(const Initializer& init);
+ static CarlaPlugin* newVST3(const Initializer& init);
static CarlaPlugin* newGIG(const Initializer& init, const bool use16Outs);
static CarlaPlugin* newSF2(const Initializer& init, const bool use16Outs);
static CarlaPlugin* newSFZ(const Initializer& init, const bool use16Outs);
diff --git a/source/backend/engine/CarlaEngine.cpp b/source/backend/engine/CarlaEngine.cpp
index deb65457e..665114810 100644
--- a/source/backend/engine/CarlaEngine.cpp
+++ b/source/backend/engine/CarlaEngine.cpp
@@ -762,6 +762,10 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, cons
plugin = CarlaPlugin::newVST(init);
break;
+ case PLUGIN_VST3:
+ plugin = CarlaPlugin::newVST3(init);
+ break;
+
case PLUGIN_GIG:
plugin = CarlaPlugin::newGIG(init, (extra != nullptr));
break;
diff --git a/source/backend/plugin/CarlaPlugin.cpp b/source/backend/plugin/CarlaPlugin.cpp
index d7e2bff71..183a8eb14 100644
--- a/source/backend/plugin/CarlaPlugin.cpp
+++ b/source/backend/plugin/CarlaPlugin.cpp
@@ -425,6 +425,9 @@ const SaveState& CarlaPlugin::getSaveState()
switch (type())
{
+ case PLUGIN_NONE:
+ saveState.type = carla_strdup("None");
+ break;
case PLUGIN_INTERNAL:
saveState.type = carla_strdup("Internal");
break;
@@ -440,6 +443,9 @@ const SaveState& CarlaPlugin::getSaveState()
case PLUGIN_VST:
saveState.type = carla_strdup("VST");
break;
+ case PLUGIN_VST3:
+ saveState.type = carla_strdup("VST3");
+ break;
case PLUGIN_GIG:
saveState.type = carla_strdup("GIG");
break;
@@ -449,9 +455,6 @@ const SaveState& CarlaPlugin::getSaveState()
case PLUGIN_SFZ:
saveState.type = carla_strdup("SFZ");
break;
- default:
- saveState.type = carla_strdup("Unknown");
- break;
}
getLabel(strBuf);
diff --git a/source/backend/plugin/Makefile b/source/backend/plugin/Makefile
index 6b66652ea..78d3a7917 100644
--- a/source/backend/plugin/Makefile
+++ b/source/backend/plugin/Makefile
@@ -37,6 +37,7 @@ OBJS = \
DssiPlugin.cpp.o \
Lv2Plugin.cpp.o \
VstPlugin.cpp.o \
+ Vst3Plugin.cpp.o \
FluidSynthPlugin.cpp.o \
LinuxSamplerPlugin.cpp.o
diff --git a/source/bridges/CarlaBridgePlugin.cpp b/source/bridges/CarlaBridgePlugin.cpp
index 27d5cd015..02bdc726b 100644
--- a/source/bridges/CarlaBridgePlugin.cpp
+++ b/source/bridges/CarlaBridgePlugin.cpp
@@ -494,6 +494,8 @@ int main(int argc, char* argv[])
itype = CarlaBackend::PLUGIN_LV2;
else if (std::strcmp(stype, "VST") == 0)
itype = CarlaBackend::PLUGIN_VST;
+ else if (std::strcmp(stype, "VST3") == 0)
+ itype = CarlaBackend::PLUGIN_VST3;
else
{
carla_stderr("Invalid plugin type '%s'", stype);
diff --git a/source/bridges/Makefile b/source/bridges/Makefile
index 04eab8a7d..087a4d3fb 100644
--- a/source/bridges/Makefile
+++ b/source/bridges/Makefile
@@ -261,6 +261,7 @@ OBJS_NATIVE += \
../backend/plugin/DssiPlugin__native.o \
../backend/plugin/Lv2Plugin__native.o \
../backend/plugin/VstPlugin__native.o \
+ ../backend/plugin/Vst3Plugin__native.o \
../backend/plugin/FluidSynthPlugin__native.o \
../backend/plugin/LinuxSamplerPlugin__native.o
diff --git a/source/bridges/qtcreator/carla-bridge-plugin.pro b/source/bridges/qtcreator/carla-bridge-plugin.pro
index 736837bcb..45098f189 100644
--- a/source/bridges/qtcreator/carla-bridge-plugin.pro
+++ b/source/bridges/qtcreator/carla-bridge-plugin.pro
@@ -42,6 +42,7 @@ SOURCES += \
../../backend/plugin/DssiPlugin.cpp \
../../backend/plugin/Lv2Plugin.cpp \
../../backend/plugin/VstPlugin.cpp \
+ ../../backend/plugin/Vst3Plugin.cpp \
../../backend/plugin/FluidSynthPlugin.cpp \
../../backend/plugin/LinuxSamplerPlugin.cpp
@@ -113,7 +114,7 @@ DEFINES += DEBUG
DEFINES += BUILD_BRIDGE BUILD_BRIDGE_PLUGIN BRIDGE_PLUGIN
DEFINES += WANT_JACK
-DEFINES += WANT_NATIVE WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST
+DEFINES += WANT_NATIVE WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST WANT_VST3
DEFINES += WANT_FLUIDSYNTH WANT_LINUXSAMPLER
LIBS = -ldl \
diff --git a/source/carla_shared.py b/source/carla_shared.py
index 0d123aeaa..68bce8f14 100644
--- a/source/carla_shared.py
+++ b/source/carla_shared.py
@@ -215,9 +215,10 @@ PLUGIN_LADSPA = 2
PLUGIN_DSSI = 3
PLUGIN_LV2 = 4
PLUGIN_VST = 5
-PLUGIN_GIG = 6
-PLUGIN_SF2 = 7
-PLUGIN_SFZ = 8
+PLUGIN_VST3 = 6
+PLUGIN_GIG = 7
+PLUGIN_SF2 = 8
+PLUGIN_SFZ = 9
# Plugin Category
PLUGIN_CATEGORY_NONE = 0
diff --git a/source/utils/CarlaBackendUtils.hpp b/source/utils/CarlaBackendUtils.hpp
index bd8d75601..0db2b1268 100644
--- a/source/utils/CarlaBackendUtils.hpp
+++ b/source/utils/CarlaBackendUtils.hpp
@@ -96,6 +96,8 @@ const char* PluginType2Str(const PluginType& type)
return "PLUGIN_LV2";
case PLUGIN_VST:
return "PLUGIN_VST";
+ case PLUGIN_VST3:
+ return "PLUGIN_VST3";
case PLUGIN_GIG:
return "PLUGIN_GIG";
case PLUGIN_SF2:
@@ -402,6 +404,8 @@ const char* getPluginTypeAsString(const PluginType& type)
return "LV2";
case PLUGIN_VST:
return "VST";
+ case PLUGIN_VST3:
+ return "VST3";
case PLUGIN_GIG:
return "GIG";
case PLUGIN_SF2:
diff --git a/source/utils/CarlaStateUtils.hpp b/source/utils/CarlaStateUtils.hpp
index 406e81c81..fba186787 100644
--- a/source/utils/CarlaStateUtils.hpp
+++ b/source/utils/CarlaStateUtils.hpp
@@ -479,6 +479,10 @@ QString getXMLFromSaveState(const SaveState& saveState)
case PLUGIN_VST:
info += QString(" %1\n").arg(xmlSafeString(saveState.binary, true));
info += QString(" %1\n").arg(saveState.uniqueID);
+ case PLUGIN_VST3:
+ // TODO?
+ info += QString(" %1\n").arg(xmlSafeString(saveState.binary, true));
+ info += QString(" %1\n").arg(saveState.uniqueID);
break;
case PLUGIN_GIG:
case PLUGIN_SF2: