Wednesday, 2016-08-31

*** ricardocrudo has joined #lv206:17
*** Anchakor_ has quit IRC06:18
*** jcelerier has joined #lv207:49
jcelerierhello :)07:49
jcelerierso, after the first few days it's starting (I think :D) to make sense in my head about LV2.07:49
jcelerier(this may or may not be stockholm syndrome :p)07:50
jcelerierand I was wondering about the handling of plug-in data in my software, considering that of course I do not wish to support only LV2 but also VST, AU, etc...07:50
jcelerierso I'm a bit torn07:51
jceleriershould I give it all in to LV2, and use LV2's model as general data model for plug-ins in my applications, and then write LV2 encapsulation wrappers for VST, etc... (unless they already exist)07:52
jcelerieror re-do my own similar (but certainly simpler) data model that fits exactly to what I need on my software, and then bind the necessary parts of lv2, vst, etc...07:52
*** trebmuh has joined #lv208:37
*** falktx|work has joined #lv208:51
*** sigma6 has joined #lv209:06
*** jcelerier has quit IRC09:51
*** trebmuh has quit IRC11:37
*** jcelerier has joined #lv211:39
*** trebmuh has joined #lv211:50
rgareusjcelerier: most DAWs that I know have an internal abstracttion for plugins.  The main parts are pretty much identical in all:  [float] control ports and a run() function.  instantiate, activate, deactivate, unload12:14
rgareusjcelerier: if your DAW uses an object oriented programming language a [virtal] base class makes sense.12:14
rgareusyou'll want the opposite of encapsulation. that'll limit features of all standards to what LV2 can do.  or rather into the LV2 way of doing things.12:16
rgareusAU for example has variable i/o port count (LV2 does not) and uses a callback method for input (plugin asks hosts for samples if needed)12:17
rgareusVSTi needs midi-event before run(). -- LV2 passes them as Atom-sequence   etc etc.  Time/Bar-Beat reporting is different in each case.  all that stuff is better modelled as abstraction + implementation (not encapsulating)12:18
rgareus...not to mention state save/load.12:21
*** oofus_lt has joined #lv212:32
jcelerier*weeps in sadness*12:35
*** sigma6 has quit IRC12:35
rgareusit's not impossible to wrap all things in LV2. but it's not too sensible12:36
rgareusjcelerier: Carla.lv2 can load VSTs for example12:36
jcelerierokay12:36
jcelerierI wonder if someone has a clean enough GPL implementation in his sequencer12:36
rgareusjcelerier: ardour is GPLv2  (and uses vestige -- VST2.x)12:37
jcelerierI went looking into QTractor's source but it looks like a big #ifdef mess12:37
*** sigma6 has joined #lv212:38
rgareusJUCE is also GPL (that's what carla uses)12:38
jceleriervestige is the VST header reimplementation right ?12:38
rgareusyes, just the header (interface)12:38
rgareusno implementation12:38
jcelerieryep12:38
jcelerierAnd for juce.. I dunno, I already use Qt and it pains me to have two complete software toolkits in my software12:39
jcelerierbut if it's the path of least resistance...12:39
rgareuswhat does QT buy you in a sequencer?12:40
jcelerieruh... well it made it damn easy to develop12:40
jcelerierwww.i-score.org12:40
rgareuslast I looked there were no audio specific widgets in there, not to mention anything related to score rendering.12:41
jcelerierwhat kind of audio specific widgets ?12:42
jcelerierwaveforms, piano roll ?12:42
rgareusyes  and faders, knobs12:42
rgareusthe default sliders are just useless.12:43
jcelerierah well, honestly it's not too hard to reimplement them but for the users of the software it does not matter that much12:44
jcelerierit started as a sequencer for max/msp12:44
rgareusmmh though looking at the screenshot, i-score takes a different aproach to this, anyway12:44
*** arguy_work has quit IRC12:44
jcelerierone of the big gains of Qt is that it makes the object model available almost seamlessly from Javascript12:45
jcelerierso for instance you can write "automations" inline directly in JS12:45
jceleriermore like transfer functions maybe...12:45
rgareusI was getting into issues with ABI.   say a QT5 Host, QT4 plugin GUI (same memory space)   it's arguably fault of the plugin devs12:46
jcelerierah yeah, a solution may be to have a namespaced build of qt12:47
jceleriere.g. you can enclose everything in my_namespace for instance12:47
jcelerierthis way no symbol collision12:47
rgareusjcelerier: the problem is QT itself12:47
jcelerierbut you have to have a special build of qt for each platform...12:47
rgareusnot your app12:47
jcelerieryes, and you can configure the qt symbols to be in their own namespace12:48
jceleriereg myapp::QString12:48
jcelerieretc...12:48
rgareusQT5/QT4 cannot exist in the same memory space (process)12:48
rgareussame with gtk2/312:48
*** sigma6 has quit IRC12:48
rgareusthere are some static globals.12:48
jcelerier:(12:49
rgareusand last I looked QT5 still used gtk2's theming engine12:49
rgareusso gtk3 plugin GUIs are out, too12:49
rgareusit's a mess.12:49
rgareusfalktx compiled complete QT as static lib. and I think some patches, too to work around this.  but carla also uses bridges (process separation)12:50
rgareuson OSX it's worse because it has a flat namespace.12:51
*** NickSB2_ has quit IRC12:51
jcelerierI guess bridge is the best long-term solution12:51
jcelerierespecially for stability12:51
rgareusjcelerier: it does not scale12:52
rgareusjcelerier: it's fine for a handful of plugins.. or running at large buffersizes12:52
rgareusbut 100+ plugins: you'll send more time switching processes than doing audio-processing12:53
*** arguy|work has joined #lv212:55
rgareusjcelerier: http://lists.ardour.org/pipermail/ardour-users-ardour.org/2015-August/027373.html has a rundown on the numbers12:55
jcelerierrgareus: okay13:01
jcelerierweird, I used bitwig and I had no problem with hundres of instances of plugins13:01
rgareusjcelerier: at what buffersize?13:02
rgareusBW is by default  1024 * 2   so 48msec13:03
*** NickSB2_ has joined #lv213:05
*** jcelerier has quit IRC13:06
falktx|workbitwig has different brigde modes13:06
rgareusthere's a single binary13:07
falktx|workyes13:07
rgareuswhich probably wakes up VSTs inside in sequence13:07
falktx|workbut it has mode for 1 bridge per plugin, or 1 bridge for all plugins13:07
falktx|work1 bridge for 32bit and 1 bridge for 64bit13:07
rgareusbut I don't see how that can be used for parallel processing13:07
falktx|workyou don't need a separate binary, you can run yourself with different arguments13:08
falktx|worktracktion does this13:08
rgareusright. same thing really13:09
rgareusprocess separation13:11
rgareusBitwig's approach would allow to ship a complete GPL  LV2 loader  (separate binary) that just speaks their protocol13:11
drobillaOne could wrap VST in LV2 relatively easily.  Some ports (like MDA) half-assedly take this approach anyway13:33
drobillaAUs dynamic I/O, among other things, not so much13:34
falktx|workwould would either require dynmanifest or run a script to generate plugins13:34
drobillaBut literally using LV2s data model in the host probably doesn't make sense13:34
drobillaHaving to do a bunch of work to use different plugin specs is just the cost of doing business with multiple plugin specs13:36
drobillaMy fantasy next version of the stack would unify all the node types (SerdNode, LilvNode, SordNode)14:30
drobillaStoring everything in one big ol' RDF model is a beautifully elegant way to do things, but the librarys make it a tedious mess in practice currently14:30
*** oofus_lt has quit IRC15:24
*** arguy|work has quit IRC15:29
*** sigma6 has joined #lv215:38
*** ssj71 has joined #lv215:38
*** deva has joined #lv215:52
*** sigma6 has quit IRC16:05
*** ssj71 has quit IRC16:37
*** ssj71 has joined #lv216:40
*** rncbc has joined #lv216:52
*** ricardocrudo has quit IRC16:57
*** falktx|work has quit IRC17:31
*** Anchakor has joined #lv217:35
*** ricardocrudo has joined #lv219:11
*** ColaEuphoria has quit IRC19:46
*** ColaEuphoria has joined #lv219:58
*** deva has quit IRC20:13
*** jcelerier has joined #lv220:32
jcelerierrgareus: sorry, I had to leave quickly earlier, I was at a conference20:33
jcelerierI hope to continue this conversation another day !20:33
*** jcelerier has quit IRC20:33
drobillaC++ thoughts: the lvtk way of cramming absolutely everything in a mixin has always rubbed me in the wrong way21:50
drobillaI did end up using them in my tinkerings for interfaces, since it's the only way to get a magical extension_data method21:50
drobillaBut having things like uri_map() on the plugin is just strange, and means you need a wrapper around the template for mandatoryness and all the rest21:51
drobillaConsidered doing features just as classes you can use on your own, as members.  _uri_map.map() and so on21:51
ColaEuphoria@drobilla What would be the easiest way to do a "pull request" for pugl?21:51
ColaEuphoriaoops i did the "twitter" thing21:52
ColaEuphoriasorry we use Slack at work so I'm just used to it21:52
drobillaBut come to think of it, a slightly different mixin idea seems nice: have a "host" member which is extended with mixins21:52
drobilla_host.uri_map() or _host.whatever_provided_by_host() seems a lot clearer to me, and much more like what a nice native C++ interface would look like21:52
drobillaColaEuphoria: There's a github mirror if you must, but just email me, really21:53
drobillaOne thing that annoys me about git is it's *so* close to having this workflow, but you can't set the email address to email patches to upstream and have it pulled, so not quite21:53
*** trebmuh has quit IRC21:53
drobillaColaEuphoria: i.e. git format-patch and git send-email21:54
drobillaColaEuphoria: But whatever gets it to me, I don't really care21:54
ColaEuphoriaI just feel silly using github JUST to make pull requests21:54
ColaEuphoriagh really rubs me wrong21:54
drobillaYou and me both21:54
ColaEuphoriahowever to be honest21:55
ColaEuphoriamy "patch" is literally nothing more than just #include<stdint.h> in pugl/event.h21:55
drobillaLet's take this lovely thing whose main selling point is being decentralized then centralize it as much as possible.  On a proprietary commercial platform no less.  Woo21:55
ColaEuphoriaand then everyone thinks github and git are synonymous ;)21:55
drobillaColaEuphoria: Okay, I'll just do that21:56
drobillaThough it looks like common.h is missing the same for intptr_t, so putting it there will do21:56
ColaEuphoriai'll probably put in a "real" pull request later if i modify the wscript to allow for static linking21:57
ColaEuphoriaand i'll mail you the patch21:58
drobillaColaEuphoria: http://git.drobilla.net/cgit.cgi/pugl.git/commit/?id=80510efead3512766d798d29fbfb66ea5646a24922:00
drobillaNote to self: fancy up my cgit like lv2plug.in/git22:00
drobilla--static doesn't work?22:01
rgareusWFM22:01
ColaEuphoriaoh22:08
ColaEuphoriait works22:08
ColaEuphorianevermind heh22:08
drobillaWhile we're on the topic of git, it'd be nice if cgit could do signed tarballs22:15
drobillaJust tagging a release and having everything magically available would be pretty great22:15
* drobilla is on a kick to absolutely minimize the amount of effort he needs to put into releasing/maintaining things22:16
rgareusdrobilla: I wrote a php script for that22:19
rgareusdrobilla: ping a URL  and php calls  "make tagupdate"  https://github.com/x42/x42-plugins/blob/master/Makefile22:20
rgareusie check if any of the submodules has a new tag, and if so, submodule update, roll a tgz and return it  (debian uscan compatible)22:21
rgareusso debian uscan comes around every other day..  hits  http://gareus.org/misc/x42-plugins.php    and automatically notifies the packager and even downloads the tgz for him if there's a new tag22:22
* rgareus hasn't written announcement messages since22:23
rgareushttps://github.com/x42/x42-plugins/blob/master/Makefile.git   has the "make dist"22:23
drobillargareus: Fancy, but not really any less work than doing so locally, and having GPG be able to sign on the server and all...22:24
rgareusi'm sure you can come up with a similar system.    git tag .. ; git push.    done22:25
drobillargareus: I migrated my site to Pelican and wrote a thing to automatically generate blog posts straight from the NEWS file22:25
drobilla(not uploaded yet)22:25
drobillaI'd like to just interact with the world purely through git and email, but it's nice to have feeds of releases and news on the site anyway22:25
rgareusdrobilla: there's always IRC22:26
rgareuswell, you can blog and announce and email.. how much you like22:27
rgareusbut having the release-process itself automated is very handy22:27
rgareusIMHO22:27
drobillaNot familiar with uscan until now.  I guess since I publish a dir with foo-x.y.z.tar.bz2 and foo-x.y.z.tar.bz2.sig it just should work22:27
rgareusdrobilla: aka debian/watch22:27
drobillaThe email part I haven't automated yet22:27
drobillaNot sure how much I care, but given what I already have it'd be pretty trivial I suppose22:28
* drobilla is a superfan of SSGs now22:28
drobillalv2plug.in also runs on Pelican, so if the libs ever actually migrate there, same deal22:29
rgareusdrobilla: liblilv has a watch file.  there should be regular pings to   http://download.drobilla.net/lilv-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))22:31
ColaEuphoriaholy regex22:31
rgareusthere are 2 more lines before that in debian/watch    http://download.drobilla.net/ is a index list22:32
drobillaSome day I am going to regret putting all those in the same place... but not today :)22:33
drobillaAh, 2011/2012.  I could really use another phase where I'm free to dump a ton of time into biggish things that need doing22:34
drobillaor: When NIHism works out super well22:36
drobillaI suppose having done all that I should actually do the whole release thing22:54
*** unclechu has joined #lv222:57
*** ricardocrudo has quit IRC23:03

Generated by irclog2html.py 2.13.0 by Marius Gedminas - find it at mg.pov.lt!