zynaddsubfx as lv2 plugin

All your LV2 and LADSPA goodness and more.

Moderators: MattKingUSA, khz

User avatar
Heikki Ketoharju
Established Member
Posts: 40
Joined: Thu Mar 22, 2012 9:24 am

Re: zynaddsubfx as lv2 plugin

Post by Heikki Ketoharju »

I got it compiled (pulled code today), but can't see any UI. Just the plugin playing default patch. Tried both QTractor and Ardour 3.2. Should I update them? It's really impressive, though! Maybe I'll just make a triumph with that default patch...
User avatar
Heikki Ketoharju
Established Member
Posts: 40
Joined: Thu Mar 22, 2012 9:24 am

Re: zynaddsubfx as lv2 plugin

Post by Heikki Ketoharju »

falkTX wrote:
Heikki Ketoharju wrote:I got it compiled (pulled code today), but can't see any UI. Just the plugin playing default patch. Tried both QTractor and Ardour 3.2. Should I update them? It's really impressive, though! Maybe I'll just make a triumph with that default patch...
read the first post in more detail, you must make sure you have all the required dependencies for the UI (ie, NTK).
Oh, didn't notice that (without UI) there. Compiled again with all depedencies, and now it opens great!
User avatar
MaurizioB
Posts: 2
Joined: Thu Oct 03, 2013 3:48 pm

Re: zynaddsubfx as lv2 plugin

Post by MaurizioB »

I had the same problem, I was looking for NOs in the make feature output, until I realized that (half of an hour of googling later). Maybe you should specify that also in the main post.

Btw. It works and it's perfect, except for the usual problem with Zyn: parameter change on the fly doesn't work for notes which already playing, and if you'll add automation support, that thing would be great, even if I know that it depends on Zyn engine itself.
The old zynadd project seems to support that feature, but even if I was able to compile it, turns out that once it's loaded it doesn't work at all.
Do you have any plans about this?
tatch
Established Member
Posts: 662
Joined: Fri Nov 16, 2012 3:18 pm

Re: zynaddsubfx as lv2 plugin

Post by tatch »

falkTX wrote: If possible, you should use only 1 zyn instance, sending it MIDI data from different channels.
I don't think this is an ideal setup when you want to mix/eq/compress/add effects to different channels using other plugins. From what I remember zyn's mixer is usable and you can also apply its internal plugins to different channels, so maybe it works as a standalone app but i wish it could either output to multiple audio channels or just forgo that capability altogether (in line with most other softsynths/plugins).

falkTX wrote:
tatch wrote:can it do parameter automation?
that's pending on some work on the current zynaddsubfx developer.
he's working on exposing all parameters, I'm waiting to see how that goes.
If that is not good enough, I'll just add the most basic params to be automable (like filter cut-off)
any news on this or are you planning to go in yourself?
skygge
Posts: 1
Joined: Wed Dec 04, 2013 9:20 pm

Re: zynaddsubfx as lv2 plugin

Post by skygge »

Hello everybody, it's my first post here :)

First, I really want to thank falkTX for porting Zynaddsubfx to LV2!

Next, I have a little trouble with compile this plugin. Maybe someone could help me. Distro: Slackware 14 32-bit, gcc 4.8.2.

make features output:

Code: Select all

bash-4.2# make features
\033[36m---> Engine drivers: \033[0m
JACK:       \033[32m YES \033[0m
ALSA:       \033[32m YES \033[0m
PulseAudio: \033[32m YES \033[0m
CoreAudio:  \033[31m NO \033[0m  \033[30;1m[MacOS only]\033[0m
ASIO:       \033[31m NO \033[0m  \033[30;1m[Windows only]\033[0m
DirectSound:\033[31m NO \033[0m  \033[30;1m[Windows only]\033[0m

\033[36m---> Plugin formats: \033[0m
Internal:\033[32m YES \033[0m
LADSPA:  \033[32m YES \033[0m
DSSI:    \033[32m YES \033[0m
LV2:     \033[32m YES \033[0m
VST:     \033[32m YES \033[0m
AU:      \033[31m NO \033[0m  \033[30;1m[MacOS only]\033[0m

\033[36m---> LV2 UI toolkit support: \033[0m
External:\033[32m YES \033[0m (direct+bridge)
Gtk2:    \033[32m YES \033[0m (bridge)
Gtk3:    \033[32m YES \033[0m (bridge)
Qt4:     \033[32m YES \033[0m (bridge)
Qt5:     \033[31m NO \033[0m  \033[33m[Qt5 missing]\033[0m
X11:     \033[32m YES \033[0m (direct+bridge)
Cocoa:   \033[31m NO \033[0m  \033[30;1m[MacOS only]\033[0m
Windows: \033[31m NO \033[0m  \033[30;1m[Windows only]\033[0m

\033[36m---> File formats: \033[0m
CSD:\033[32m YES \033[0m
GIG:\033[32m YES \033[0m
SF2:\033[32m YES \033[0m
SFZ:\033[32m YES \033[0m

\033[36m---> Internal plugins: \033[0m
AudioFile:  \033[32m YES \033[0m (without ffmpeg) \033[33m[ffmpeg/libav missing or too new]\033[0m
MidiFile:   \033[32m YES \033[0m
DISTRHO:    \033[32m YES \033[0m
ZynAddSubFX:\033[32m YES \033[0m (with UI)
ffmpeg version: ffmpeg-1.1.2

But make -C source/plugin/ gives me a lot of errors:

Code: Select all

bash-4.2# make -C source/plugin/
make: Entering directory `/usr/src/Carla/source/plugin'
g++ carla-native-lv2-export.cpp -Wall -Wextra -fPIC -DPIC -pipe -DREAL_BUILD -DNDEBUG -O3 -ffast-math -mtune=generic -msse -msse2 -mfpmath=sse -fdata-sections -ffunction-sections -fvisibility=hidden -std=gnu++0x -fvisibility-inlines-hidden -I../includes -I../modules -I../utils -DWANT_OPENGL -DWANT_AUDIOFILE -DWANT_MIDIFILE -DWANT_ZYNADDSUBFX -c -o carla-native-lv2-export.cpp.o
In file included from carla-native-lv2-export.cpp:19:0:
carla-native-base.cpp:45:5: error: 'NonRtList' does not name a type
     NonRtList<const PluginDescriptor*> descs;
     ^
carla-native-base.cpp:46:5: error: 'NonRtList' does not name a type
     NonRtList<const LV2_Descriptor*> lv2Descs;
     ^
carla-native-base.cpp: In destructor 'PluginListManager::~PluginListManager()':
carla-native-base.cpp:34:14: error: 'NonRtList' was not declared in this scope
         for (NonRtList<const LV2_Descriptor*>::Itenerator it = lv2Descs.begin(); it.valid(); it.next())
              ^
carla-native-base.cpp:34:24: error: expected primary-expression before 'const'
         for (NonRtList<const LV2_Descriptor*>::Itenerator it = lv2Descs.begin(); it.valid(); it.next())
                        ^
carla-native-base.cpp:34:24: error: expected ';' before 'const'
carla-native-base.cpp:34:82: error: 'it' was not declared in this scope
         for (NonRtList<const LV2_Descriptor*>::Itenerator it = lv2Descs.begin(); it.valid(); it.next())
                                                                                  ^
carla-native-base.cpp:41:9: error: 'descs' was not declared in this scope
         descs.clear();
         ^
carla-native-base.cpp:42:9: error: 'lv2Descs' was not declared in this scope
         lv2Descs.clear();
         ^
carla-native-base.cpp: At global scope:
carla-native-base.cpp:53:41: error: 'PluginDescriptor' does not name a type
 void carla_register_native_plugin(const PluginDescriptor* desc)
                                         ^
carla-native-base.cpp:53:59: error: ISO C++ forbids declaration of 'desc' with no type [-fpermissive]
 void carla_register_native_plugin(const PluginDescriptor* desc)
                                                           ^
carla-native-base.cpp: In function 'void carla_register_native_plugin(const int*)':
carla-native-base.cpp:57:15: error: request for member 'midiOuts' in '* desc', which is of non-class type 'const int'
     if (desc->midiOuts > 0 || (desc->hints & PLUGIN_NEEDS_UI_OPEN_SAVE) != 0)
               ^
carla-native-base.cpp:57:38: error: request for member 'hints' in '* desc', which is of non-class type 'const int'
     if (desc->midiOuts > 0 || (desc->hints & PLUGIN_NEEDS_UI_OPEN_SAVE) != 0)
                                      ^
carla-native-base.cpp:60:21: error: 'struct PluginListManager' has no member named 'descs'
     sPluginDescsMgr.descs.append(desc);
                     ^
carla-native-lv2-export.cpp: In function 'void writeManifestFile()':
carla-native-lv2-export.cpp:117:10: error: 'NonRtList' was not declared in this scope
     for (NonRtList<const PluginDescriptor*>::Itenerator it = sPluginDescsMgr.descs.begin(); it.valid(); it.next())
          ^
carla-native-lv2-export.cpp:117:20: error: expected primary-expression before 'const'
     for (NonRtList<const PluginDescriptor*>::Itenerator it = sPluginDescsMgr.descs.begin(); it.valid(); it.next())
                    ^
carla-native-lv2-export.cpp:117:20: error: expected ';' before 'const'
carla-native-lv2-export.cpp:117:93: error: 'it' was not declared in this scope
     for (NonRtList<const PluginDescriptor*>::Itenerator it = sPluginDescsMgr.descs.begin(); it.valid(); it.next())
                                                                                             ^
carla-native-lv2-export.cpp:119:15: error: 'PluginDescriptor' does not name a type
         const PluginDescriptor*& pluginDesc(*it);
               ^
carla-native-lv2-export.cpp:120:28: error: 'pluginDesc' was not declared in this scope
         const String label(pluginDesc->label);
                            ^
carla-native-lv2-export.cpp: At global scope:
carla-native-lv2-export.cpp:152:36: error: 'HostHandle' was not declared in this scope
 static uint32_t host_getBufferSize(HostHandle) { return 512;     }
                                    ^
carla-native-lv2-export.cpp:152:48: error: expected ',' or ';' before '{' token
 static uint32_t host_getBufferSize(HostHandle) { return 512;     }
                                                ^
carla-native-lv2-export.cpp:153:36: error: 'HostHandle' was not declared in this scope
 static double   host_getSampleRate(HostHandle) { return 44100.0; }
                                    ^
carla-native-lv2-export.cpp:153:48: error: expected ',' or ';' before '{' token
 static double   host_getSampleRate(HostHandle) { return 44100.0; }
                                                ^
carla-native-lv2-export.cpp:154:32: error: 'HostHandle' was not declared in this scope
 static bool     host_isOffline(HostHandle)     { return true;    }
                                ^
carla-native-lv2-export.cpp:154:48: error: expected ',' or ';' before '{' token
 static bool     host_isOffline(HostHandle)     { return true;    }
                                                ^
carla-native-lv2-export.cpp:155:33: error: 'HostHandle' was not declared in this scope
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                 ^
carla-native-lv2-export.cpp:155:45: error: 'HostDispatcherOpcode' was not declared in this scope
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                             ^
carla-native-lv2-export.cpp:155:74: error: expected primary-expression before ',' token
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                                                          ^
carla-native-lv2-export.cpp:155:84: error: expected primary-expression before ',' token
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                                                                    ^
carla-native-lv2-export.cpp:155:86: error: expected primary-expression before 'void'
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                                                                      ^
carla-native-lv2-export.cpp:155:93: error: expected primary-expression before 'float'
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                                                                             ^
carla-native-lv2-export.cpp:155:98: error: expression list treated as compound expression in initializer [-fpermissive]
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                                                                                  ^
carla-native-lv2-export.cpp:155:100: error: expected ',' or ';' before '{' token
 static intptr_t host_dispatcher(HostHandle, HostDispatcherOpcode, int32_t, intptr_t, void*, float) { return 0; }
                                                                                                    ^
carla-native-lv2-export.cpp:157:28: error: 'PluginDescriptor' does not name a type
 void writePluginFile(const PluginDescriptor* const pluginDesc)
                            ^
carla-native-lv2-export.cpp:157:52: error: ISO C++ forbids declaration of 'pluginDesc' with no type [-fpermissive]
 void writePluginFile(const PluginDescriptor* const pluginDesc)
                                                    ^
carla-native-lv2-export.cpp: In function 'void writePluginFile(const int*)':
carla-native-lv2-export.cpp:159:42: error: request for member 'label' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     const String pluginLabel(pluginDesc->label);
                                          ^
carla-native-lv2-export.cpp:167:59: error: request for member 'name' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     carla_stdout("Generating data for %s...", pluginDesc->name);
                                                           ^
carla-native-lv2-export.cpp:172:5: error: 'HostDescriptor' was not declared in this scope
     HostDescriptor hostDesc;
     ^
carla-native-lv2-export.cpp:172:20: error: expected ';' before 'hostDesc'
     HostDescriptor hostDesc;
                    ^
carla-native-lv2-export.cpp:173:5: error: 'hostDesc' was not declared in this scope
     hostDesc.handle      = nullptr;
     ^
carla-native-lv2-export.cpp:189:5: error: 'PluginHandle' was not declared in this scope
     PluginHandle pluginHandle = pluginDesc->instantiate(&hostDesc);
     ^
carla-native-lv2-export.cpp:189:18: error: expected ';' before 'pluginHandle'
     PluginHandle pluginHandle = pluginDesc->instantiate(&hostDesc);
                  ^
In file included from ../utils/CarlaUtils.hpp:21:0,
                 from ../utils/List.hpp:21,
                 from ../utils/RtList.hpp:21,
                 from carla-native-base.cpp:19,
                 from carla-native-lv2-export.cpp:19:
carla-native-lv2-export.cpp:191:30: error: 'pluginHandle' was not declared in this scope
     CARLA_SAFE_ASSERT_RETURN(pluginHandle != nullptr,)
                              ^
../includes/CarlaDefines.h:142:50: note: in definition of macro 'CARLA_SAFE_ASSERT_RETURN'
 #define CARLA_SAFE_ASSERT_RETURN(cond, ret)  if (cond) pass(); else { carla_safe_assert(#cond, __FILE__, __LINE__); return ret; }
                                                  ^
carla-native-lv2-export.cpp:217:25: error: request for member 'category' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     switch (pluginDesc->category)
                         ^
carla-native-lv2-export.cpp:250:21: error: request for member 'hints' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     if (pluginDesc->hints & PLUGIN_IS_RTSAFE)
                     ^
carla-native-lv2-export.cpp:255:21: error: request for member 'hints' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     if (pluginDesc->hints & PLUGIN_NEEDS_FIXED_BUFFERS)
                     ^
carla-native-lv2-export.cpp:267:21: error: request for member 'hints' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     if (pluginDesc->hints & PLUGIN_USES_STATE)
                     ^
carla-native-lv2-export.cpp:272:25: error: request for member 'category' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (pluginDesc->category != PLUGIN_CATEGORY_SYNTH)
                         ^
carla-native-lv2-export.cpp:280:26: error: request for member 'category' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     else if (pluginDesc->category != PLUGIN_CATEGORY_SYNTH)
                          ^
carla-native-lv2-export.cpp:293:21: error: request for member 'hints' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     if (pluginDesc->hints & PLUGIN_HAS_GUI)
                     ^
carla-native-lv2-export.cpp:293:29: error: 'PLUGIN_HAS_GUI' was not declared in this scope
     if (pluginDesc->hints & PLUGIN_HAS_GUI)
                             ^
carla-native-lv2-export.cpp:302:21: error: request for member 'midiIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     if (pluginDesc->midiIns > 0 || (pluginDesc->hints & PLUGIN_USES_TIME) != 0)
                     ^
carla-native-lv2-export.cpp:302:49: error: request for member 'hints' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     if (pluginDesc->midiIns > 0 || (pluginDesc->hints & PLUGIN_USES_TIME) != 0)
                                                 ^
carla-native-lv2-export.cpp:308:25: error: request for member 'midiIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (pluginDesc->midiIns > 0 && (pluginDesc->hints & PLUGIN_USES_TIME) != 0)
                         ^
carla-native-lv2-export.cpp:308:53: error: request for member 'hints' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (pluginDesc->midiIns > 0 && (pluginDesc->hints & PLUGIN_USES_TIME) != 0)
                                                     ^
carla-native-lv2-export.cpp:313:30: error: request for member 'midiIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         else if (pluginDesc->midiIns > 0)
                              ^
carla-native-lv2-export.cpp:321:25: error: request for member 'midiIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (pluginDesc->midiIns > 1)
                         ^
carla-native-lv2-export.cpp:338:40: error: request for member 'midiIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     for (uint32_t i=1; i < pluginDesc->midiIns; ++i)
                                        ^
carla-native-lv2-export.cpp:348:25: error: request for member 'midiIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (pluginDesc->midiIns > 1)
                         ^
carla-native-lv2-export.cpp:359:32: error: request for member 'midiIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (i+1 == pluginDesc->midiIns)
                                ^
carla-native-lv2-export.cpp:368:40: error: request for member 'midiOuts' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     for (uint32_t i=0; i < pluginDesc->midiOuts; ++i)
                                        ^
carla-native-lv2-export.cpp:378:25: error: request for member 'midiOuts' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (pluginDesc->midiOuts > 1)
                         ^
carla-native-lv2-export.cpp:389:32: error: request for member 'midiOuts' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (i+1 == pluginDesc->midiOuts)
                                ^
carla-native-lv2-export.cpp:414:40: error: request for member 'audioIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     for (uint32_t i=0; i < pluginDesc->audioIns; ++i)
                                        ^
carla-native-lv2-export.cpp:424:32: error: request for member 'audioIns' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (i+1 == pluginDesc->audioIns)
                                ^
carla-native-lv2-export.cpp:433:40: error: request for member 'audioOuts' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     for (uint32_t i=0; i < pluginDesc->audioOuts; ++i)
                                        ^
carla-native-lv2-export.cpp:443:32: error: request for member 'audioOuts' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         if (i+1 == pluginDesc->audioOuts)
                                ^
carla-native-lv2-export.cpp:452:43: error: request for member 'get_parameter_count' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     const uint32_t paramCount(pluginDesc->get_parameter_count != nullptr ? pluginDesc->get_parameter_count(pluginHandle) : 0);
                                           ^
carla-native-lv2-export.cpp:452:88: error: request for member 'get_parameter_count' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     const uint32_t paramCount(pluginDesc->get_parameter_count != nullptr ? pluginDesc->get_parameter_count(pluginHandle) : 0);
                                                                                        ^
carla-native-lv2-export.cpp:452:108: error: 'pluginHandle' was not declared in this scope
     const uint32_t paramCount(pluginDesc->get_parameter_count != nullptr ? pluginDesc->get_parameter_count(pluginHandle) : 0);
                                                                                                            ^
In file included from ../utils/CarlaUtils.hpp:21:0,
                 from ../utils/List.hpp:21,
                 from ../utils/RtList.hpp:21,
                 from carla-native-base.cpp:19,
                 from carla-native-lv2-export.cpp:19:
carla-native-lv2-export.cpp:456:46: error: request for member 'get_parameter_info' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         CARLA_SAFE_ASSERT_RETURN(pluginDesc->get_parameter_info != nullptr,)
                                              ^
../includes/CarlaDefines.h:142:50: note: in definition of macro 'CARLA_SAFE_ASSERT_RETURN'
 #define CARLA_SAFE_ASSERT_RETURN(cond, ret)  if (cond) pass(); else { carla_safe_assert(#cond, __FILE__, __LINE__); return ret; }
                                                  ^
carla-native-lv2-export.cpp:457:46: error: request for member 'get_parameter_value' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         CARLA_SAFE_ASSERT_RETURN(pluginDesc->get_parameter_value != nullptr,)
                                              ^
../includes/CarlaDefines.h:142:50: note: in definition of macro 'CARLA_SAFE_ASSERT_RETURN'
 #define CARLA_SAFE_ASSERT_RETURN(cond, ret)  if (cond) pass(); else { carla_safe_assert(#cond, __FILE__, __LINE__); return ret; }
                                                  ^
carla-native-lv2-export.cpp:462:15: error: 'Parameter' does not name a type
         const Parameter* paramInfo(pluginDesc->get_parameter_info(pluginHandle, i));
               ^
carla-native-lv2-export.cpp:463:36: error: 'paramInfo' was not declared in this scope
         const String     paramName(paramInfo->name != nullptr ? paramInfo->name : "");
                                    ^
carla-native-lv2-export.cpp:512:19: error: 'ParameterScalePoint' does not name a type
             const ParameterScalePoint* const scalePoint(&paramInfo->scalePoints[j]);
                   ^
carla-native-lv2-export.cpp:519:46: error: 'scalePoint' was not declared in this scope
             text += "rdfs:label \"" + String(scalePoint->label) + "\" ;\n";
                                              ^
carla-native-lv2-export.cpp:544:53: error: request for member 'name' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     text += "    doap:name \"" + String(pluginDesc->name) + "\" ;\n";
                                                     ^
carla-native-lv2-export.cpp:545:71: error: request for member 'maker' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     text += "    doap:maintainer [ foaf:name \"" + String(pluginDesc->maker) + "\" ] .\n";
                                                                       ^
carla-native-lv2-export.cpp:557:21: error: request for member 'cleanup' in '*(const int*)pluginDesc', which is of non-class type 'const int'
     if (pluginDesc->cleanup != nullptr)
                     ^
carla-native-lv2-export.cpp:558:21: error: request for member 'cleanup' in '*(const int*)pluginDesc', which is of non-class type 'const int'
         pluginDesc->cleanup(pluginHandle);
                     ^
carla-native-lv2-export.cpp: In function 'int main()':
carla-native-lv2-export.cpp:567:10: error: 'NonRtList' was not declared in this scope
     for (NonRtList<const PluginDescriptor*>::Itenerator it = sPluginDescsMgr.descs.begin(); it.valid(); it.next())
          ^
carla-native-lv2-export.cpp:567:20: error: expected primary-expression before 'const'
     for (NonRtList<const PluginDescriptor*>::Itenerator it = sPluginDescsMgr.descs.begin(); it.valid(); it.next())
                    ^
carla-native-lv2-export.cpp:567:20: error: expected ';' before 'const'
carla-native-lv2-export.cpp:567:93: error: 'it' was not declared in this scope
     for (NonRtList<const PluginDescriptor*>::Itenerator it = sPluginDescsMgr.descs.begin(); it.valid(); it.next())
                                                                                             ^
carla-native-lv2-export.cpp:569:15: error: 'PluginDescriptor' does not name a type
         const PluginDescriptor*& pluginDesc(*it);
               ^
carla-native-lv2-export.cpp:570:25: error: 'pluginDesc' was not declared in this scope
         writePluginFile(pluginDesc);
                         ^
make: *** [carla-native-lv2-export.cpp.o] Error 1
make: leaving directory `/usr/src/Carla/source/plugin'
Any ideas?
Thanks,
Regards
Skygge
User avatar
bluebell
Established Member
Posts: 1923
Joined: Sat Sep 15, 2012 11:44 am
Location: Saarland, Germany
Has thanked: 112 times
Been thanked: 119 times

Re: zynaddsubfx as lv2 plugin

Post by bluebell »

falkTX wrote:I had some success with this so I decided to share the info with you guys:
http://youtu.be/0ZyaufDJF58

Apart from 1 issue (closing the UI crashing the host sometimes), everything seems to work great.

I'd love to have users with experience in building stuff to do some testing.
Volunteers?
I tested it today in qtractor (svn-version). Works great and seems to be stable except for a crash of the plugin and qtractor when opening the virtual keyboard.

Good job!

Linux – MOTU UltraLite AVB – Qtractor – http://suedwestlicht.saar.de/

User avatar
bluebell
Established Member
Posts: 1923
Joined: Sat Sep 15, 2012 11:44 am
Location: Saarland, Germany
Has thanked: 112 times
Been thanked: 119 times

Re: zynaddsubfx as lv2 plugin

Post by bluebell »

falkTX wrote:that's because the resources are not available.

right now, if you're using the kxstudio repos (ubuntu or debian), you're much safer installing "carla-plugins-lv2" package.
I did some carla changes in latest git that are not fully complete yet, it might had broken something.
the packaged version uses and old but known to work code.
I tried to compile the stable version but it doesn't compile here. Maybe the lv2 base stuff is too new.

I can avoid the crash with vK when I delete the symlink "resources" in /usr/local/lib/lv2/carla-native.lv2 and copy the folder "resources" there. In this folder there are some unresolved symlinks as well but vK works.

Please tell us when Carla's git-tree is in a stable state. Thanks for your work.

Linux – MOTU UltraLite AVB – Qtractor – http://suedwestlicht.saar.de/

DepreTux
Established Member
Posts: 135
Joined: Tue Jul 23, 2013 9:36 am

Re: zynaddsubfx as lv2 plugin

Post by DepreTux »

Does this plugin allow to use midi controls to modify parameters in realtime? If not, do you plan to add it?

I currently have to use the windows vst with festige in order to do the former and I can't wait to see that working natively.

Thanks, and keep up the good work!
DepreTux
Established Member
Posts: 135
Joined: Tue Jul 23, 2013 9:36 am

Re: zynaddsubfx as lv2 plugin

Post by DepreTux »

falkTX wrote:
DepreTux wrote:Does this plugin allow to use midi controls to modify parameters in realtime? If not, do you plan to add it?
There's work by the current maintainer of zynaddsubfx to expose all parameters (might take a while), but I plan to expose basic parameters from zyn to hosts.
Right now you can use MIDI CC to automate things (see http://zynaddsubfx.sourceforge.net/doc_3.html), but it's not that great. Parameters will be better since hosts always have better support for them.
I can't wait to see that feature implemented. I really don't understand how can it be implemented in the windows VST, but not in the native linux standalone app.

Anyway, thanks for the answer. I'll stick to other midi controllable plugins for the time being (it'll save me the time of getting to understand zyn thoroughly, and then mapping it to my controller).
fundamental
Established Member
Posts: 165
Joined: Thu Nov 07, 2013 1:19 pm
Been thanked: 1 time

Re: zynaddsubfx as lv2 plugin

Post by fundamental »

DepreTux wrote:I can't wait to see that feature implemented. I really don't understand how can it be implemented in the windows VST, but not in the native linux standalone app.
Collaboration with that particular fork have not exactly been fluid in the past and while their implementation does have this feature mostly working to my knowledge, there are a heck of a lot of issues that really need some much deeper work to get running smoothly. In the case of the mainline code, midi bindings is just a side effect of killing the horrid UI/DSP coupling that has been the source of xruns for ages.

At this point the midi stuff works fine, but the UI should have a plethora of Extremely Flammable signs attached to it. Fireproofing takes a lot more time than originally anticipated...
AndreeeCZ
Established Member
Posts: 29
Joined: Tue Jun 26, 2012 10:01 am

Re: zynaddsubfx as lv2 plugin

Post by AndreeeCZ »

I cant imagine such a big parameter list for automation (just how many knobs are there in zyn??)

How about having a fixed number of possible parameters, say 10.
Then, by, say, middle clicking on a knob in zyn would pop you up with a short list of these and you could assign that knob to that parameter.

That would make it possible to control everything, but not being overwhelming at the same time.

What do you think?
fundamental
Established Member
Posts: 165
Joined: Thu Nov 07, 2013 1:19 pm
Been thanked: 1 time

Re: zynaddsubfx as lv2 plugin

Post by fundamental »

> I cant imagine such a big parameter list for automation (just how many knobs are there in zyn??)
About a million uniquely addressable parameters/widgets is the ballpark when you consider having multiple voices, multiple instances of each synth, multiple parts, etc.
I have code in place that could give an exact number, but I have yet to run it.
If you constrain the question a bit then I should be able to define the exact answer.

> How about having a fixed number of possible parameters, say 10.
Quick choose the 1e-6% best parameters :p
Of course this could be made into something much more reasonable when some context limits the choices, but such a mechanism needs to be defined.
Otherwise as long as a parameter is defined automation could be a relatively trivial extension on the system.
The UX is where the hard part comes in.
And for some controls, extra work might be needed to insure that things will interpolate in a relatively non-expensive manner.

EDIT: I guess I underestimated that as the total number of addresses is 6,347,092 at the moment (834 if you only count the 1st voice with the first kit, with the first harmonics, etc etc)
Last edited by fundamental on Fri Jan 31, 2014 6:29 pm, edited 2 times in total.
tatch
Established Member
Posts: 662
Joined: Fri Nov 16, 2012 3:18 pm

Re: zynaddsubfx as lv2 plugin

Post by tatch »

I don't think automation should be constrained to 10 parameters but it would be nice if there were some intelligent way to organize them (as opposed to how almost all DAWs currently handle automation, ie just a clusterf*** of params loosely organized/grouped by order in which they appear.
ssj71
Established Member
Posts: 1294
Joined: Tue Sep 25, 2012 6:36 pm
Has thanked: 1 time

Re: zynaddsubfx as lv2 plugin

Post by ssj71 »

Agreed. I think this rests on the host. LV2 has an extension for port groups which organizes the parameters. I think the only host using that right now is jalv.
_ssj71

music: https://soundcloud.com/ssj71
My plugins are Infamous! http://ssj71.github.io/infamousPlugins
I just want to get back to making music!
nbd
Established Member
Posts: 43
Joined: Thu May 03, 2012 11:40 am

Re: zynaddsubfx as lv2 plugin

Post by nbd »

Hello, just wondering are the padsynth sounds somehow technically out-of-scope for being ported to lv2 plugin? (Related topic: http://linuxmusicians.com/viewtopic.php ... 010#p25987)

Or is it just lack of resources (time,money,motivation,etc.)?
Post Reply