The lv2 main author is the one that codes ardour lv2 support, so it has the best possible support.
First of all, I'm no fan of Ardour. They're finally going to release Ardour3 with "MIDI support" even though it's still not stable after so many years of delay...
But more interestingly, Dave didn't just do Ardour, he apparently helped Rui with LV2 in Qtractor and his plugins, implemented LV2 in the CALF pack, and probably also implemented LV2 (or helped) anywhere else it is being used
Did Steinberg have to help anybody implement VST? Heck, Windows developers all complain about the VST format, and yet everybody can still make it work...
We're all just worried that you end up doing something new and totally different, which no host will be able to load (if you're serious about doing your own plugin spec, of course).
PyDAW v1 will not lose DSSI compatibility, so you'll have the current plugins mostly as they are today(with only bug-fix updates, and possibly a port to Qt5 if it's not too much work). However, as I said, I intend to make a truly integrated DAW/plugin experience, so the other DAW developers wanting/needing my plugins is not my concern. They were all offered a chance to collaborate with me and all turned it down, now that I've written my own DAW, they won't get that chance again.
I personally won't use PyDAW, but would use the plugins if they work on a specific plugin spec.
Why should I care about the other DAWs for people with that kind of attitude? PyDAW is still very young, but the hardcore-Linux-audio-afficionados all seem to be dead-set against
ever using it, because they have loyalty to other developers, and don't want to ruin those friendships.
What exactly is broken about the current DSSI hosts implementation?
Have you tried them?
I have my own host (getting it ready for release), and I'm working towards perfect spec support with it.
I do want to make your plugins working perfectly with it, really. I'm open to all kind of suggestions on how to improve it (just need a little time to clean it up).
Test them thoroughly, Valgrind your host until it gives no more memory errors, and don't expect the plugins to magically re-order the MIDI events to their logical order (ie: everything the current hosts didn't do).
I've hinted at my feelings about LV2 before, but I'll share them again
1. I'm sure he's a really nice guy, but Drobzilla has been in college for over 20 years. He's never held a real job, and he's never finished any piece of software that he has started(as evidenced by the many half-baked-wonders in his personal Git repo). I'm not sure who appointed him to be the standard-barer for plugin format design, and I don't know why everyone sat around and waited 7 years for him to finish LV2, then he's already bumped minor versions twice in less than a year since then, but I'm going to start my own plugin standard to compete with LV2 that will be simpler to use and have a more sensible feature set, and I'll finish it in a fraction of the time and bump versions as little as possible. There's nothing wrong with a little competition, right? and if I do a better job than he did, then everybody wins. However, harsh as this may sound, based on all of this work that I've seen, I have no faith in the man behind the standard, so therefore as long as he owns it, I have no faith in the standard. Of course, you or anybody else are welcome to fork Euphoria into an LV2, or better yet, implement my new standard in their hosts.
2. I intend to do things DSSI can't do, but I also intend to do things that LV2 can't do either. Most Linux audio developers are general purpose developers rather than DSP developers, and most tend to 'recycle' other libre DSP code for their own(not that there's anything wrong with that, but limited understanding of DSP doesn't help them either)... I started out as a DSP developer many years ago, and the core of PyDAW and it's plugins is a high performance/quality DSP library that I wrote myself from scratch. If anybody is qualified to 'get it right' with a plugin/host format, it's me. I think Euphoria is perhaps already one of the best examples of "advanced exotic DSP technique" in all of open source, how many other plugins implement multi-pronged indexing schemes, advanced audio/modulation routing schemes and silly amounts of modularity?
Like this from Euphoria's MIDI processing loop, it's f'ing hardcore to use a 4-dimensional array for an index like this, right?
The below code is the main reason Euphoria uses <5% CPU at idle instead of 30-40%...
Code: Select all
//Calculate an index of which mod_matrix controls to process. This saves expensive iterations and if/then logic in the main loop
for(plugin_data->i_fx_grps = 0; (plugin_data->i_fx_grps) < EUPHORIA_EFFECTS_GROUPS_COUNT; plugin_data->i_fx_grps = (plugin_data->i_fx_grps) + 1)
{
for(plugin_data->i_dst = 0; (plugin_data->i_dst) < (plugin_data->active_polyfx_count[f_voice_num]); plugin_data->i_dst = (plugin_data->i_dst) + 1)
{
plugin_data->polyfx_mod_counts[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])] = 0;
for(plugin_data->i_src = 0; (plugin_data->i_src) < EUPHORIA_MODULATOR_COUNT; plugin_data->i_src = (plugin_data->i_src) + 1)
{
for(plugin_data->i_ctrl = 0; (plugin_data->i_ctrl) < EUPHORIA_CONTROLS_PER_MOD_EFFECT; plugin_data->i_ctrl = (plugin_data->i_ctrl) + 1)
{
if((*(plugin_data->polyfx_mod_matrix[(plugin_data->i_fx_grps)][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])][(plugin_data->i_src)][(plugin_data->i_ctrl)])) != 0)
{
plugin_data->polyfx_mod_ctrl_indexes[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])][(plugin_data->polyfx_mod_counts[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])])] = (plugin_data->i_ctrl);
plugin_data->polyfx_mod_src_index[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])][(plugin_data->polyfx_mod_counts[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])])] = (plugin_data->i_src);
plugin_data->polyfx_mod_matrix_values[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])][(plugin_data->polyfx_mod_counts[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])])] =
(*(plugin_data->polyfx_mod_matrix[(plugin_data->i_fx_grps)][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])][(plugin_data->i_src)][(plugin_data->i_ctrl)])) * .01;
plugin_data->polyfx_mod_counts[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])] = (plugin_data->polyfx_mod_counts[f_voice_num][(plugin_data->active_polyfx[f_voice_num][(plugin_data->i_dst)])]) + 1;
}
}
}
}
}