Making plugins that network with each other
-
@d-healey said in Making plugins that network with each other:
@ustk But they may switch projects.
that's where the grouping thing can be helpfull...
-
Here we go:
(still not saved in preset though)HiseSnippet 1411.3ocwXE0aaaCDlJIJK1ctXEXXOy4mjAxbscx51ZvvbiSRg2ZSLp6BJPPPAsDkMajI8jnShWP.1Os8394r8KX6NJIK4FGiDuVTYCXQx66tu6NRdjtSnxkGEoBIVEd8jQbh0ma2chTOn0.lPRZuGw5qraKizLIH2dLMq6.VnP1mr6jQrnHtGwxZ0mixZUXMh44u+ocYAn7YcQHGqDt7WHFJzY81o4uHBBNf4wesXXNo2tYaWkrkJPMF30p10HiXtmw5yOjghshMwZ888DZUXWMSyiHVqsqxaR2ApKjwxerHRzKfiMpS5BJJt6CTAdHiwdIsFHB75j5+QDPKcxhFqFGM9R6WJ7DS6OKp7ElAnYHxGOrVYQzqdd5U6tSOqbzasX58H6ttghQ5rQPt8.Hio4g9LHEjmVwxRV4uV2tkBjPpqNjcF+fPnwTDNOoVsMoMpUqxNkJBhEoB3UcC3rPGrG7CjbhzzyYgTMj2B6HCn+HMUiLOuNLIOvob5fk2r1lFsk1Q0HHTfxGpBb7YAQ7ap4dZYDn0SRUaettkZ3HkDZ3Td2wZsRVubkMKUjdimEgowRfYqk.y1kqb5Ny5RRt94gpwi1cgtVeTj5fL2hQWrwMnaXPeZRLEMsoazlXmIg21dWB8bUYg2kke5Imdch3BYfPxo9iktZgRRUx9IjNMi4lZtMA2JXLuRohWUpXAgO0ItM1BoXpUy63UERO9kG4mokJ6Trv0kJh12WERc5QExYfTg1qZD5kFy2hEDzC1Nv4FDCmDkDbhck44LnBWrif3mwWnSUZ5aYSj0pQ3dWwqMtofXnVXhy8tEeednxdKNMUETwIFm8z6ol1W1G7+pdiGN5YQ+b2iNzIViaRK6A6kW8cQkmOvbdHKTG6h0i2S.G9F4qdKJOkKlmtPG+jYCdrElBIMe4To3UEKfAQjsuhy7.+OwmBTLOXmqgFuZFuo.78wOl11mpGvQlgD72FyiLSADQTkuex7U5WaX9IopOWj9Tbk0w3b.mJSmQm7Cn8WwAVSABGuSkBLU3EhH9Ta1ZW5EP0Mp5bXfPgNdj2EojYJoGGhfb5Eb5.14bJi5N.qaR0JJpcDPekxCl1xS.M2HdLKMIm7r718roXpaV7U7Z3mEjwys74PkleTRdo30Eou+P99ycrjre.tPYNCmrD51A5HGOrGOLccZpfPcvYKzZe6EZyeN.238NyInR1VJzGMhKusxujjMbgBwqmvJPTsoL7CSJCGu0OQ3g0fmtQNwP57mOhb2UPibJv1xf+N.tfcRExo1dcqzShcOf2HCNYIfu0+O3aOG3+Za7Ln3ggRRGPJZDOTKvru0d7ygSYFeznB16wiNC1elXswzBjPLL1rkRO3DdTEiUKZmtBfbYZndR5KmmNOxZURNk8YyprWv5knrMrMuWOVU9op5AvKZ9kZ73iGx0WnBOiZJy8ThO3NcE+dtoI0Zxg41r4X1MtSy5Ll1wJwzODz3EBO8foF3ONn4.tn+fbGH+GZFx7DJCkv0AMRXK918h.MlRf+g7gg.0IyIvuvY9WlYntMmjYiiaNKMZd76SCfX4owLqauGTnQNJPDeRnvV4n.U+IgBamiB+4UennvMuJDbgLk23.ld1aogWMMY.nhxLWGBuxiLRnmjWyeTt51cktOxtiP6NX97ck4vWXivO17M4hvkr222m6pyH6Z1G7lO925k7J0XsP1+kLcn.2Q4vwC6pFG5xAlHgMuwp9VqfUVhaWKcO6tbomow+BOICVGaakLX8zAICYtgp25FWZBup8Fld.NIM+iCEreI1lNsbpscsp0HCEdh255hghuA397wzXIvr0RfY6k.y2tDXdxRf46VBLe+Bwf+4KOarVMLdYBzQm8MmLvxZeIVyzLij7eoeKByC
-
@ustk oh thats quite cool...
-
Well, that was an educational attempt at the usage of json files. But I can't help but wonder if there's a cleaner, more 'proper' way to do this. One less prone to bugs rising up from working on multiple projects.
Maybe @Christoph-Hart can chime in before we go too far and start designing an even more convoluted solution...
-
@Trivalve There is no "Comms" protocol in HISE - or JUCE for that matter. So you would have to wrap your own. @Christoph-Hart could chime in but I'd be surprised if this request was close to the top of the scheduled enhancements - given we have a fairly big list of stuff we all want - and this is very niche and seems to have a (partial at least) solution outlined above....
-
@Lindon As interesting as it is, that solution would be hard to work into anything more than a personal use plugin, unless there's a way to detect if plugins are loaded in different project files in order to create 'channels' as lined out in the above experiment. Maybe I should check some JUCE forums to try and see what other people might be trying.
-
@Trivalve Found that:
https://forum.juce.com/t/communication-between-plug-in-instances-multi-input-fx/17315/3 -
I wouldn't try to use the JSON file approach in a real project, seems way too hacky.
The problem with interprocess communication is memory management and since there is no one single solution it usually requires getting your hands dirty in C++ (or even C) with the specs you had in mind.
-
@Christoph-Hart My thoughts exactly, it just seemed pretty hacky. I wouldn't know where to even begin on adding C++ code to a HISE project, I'm honestly very new to working with open-source software of any kind, but that seems to be the solution - JUCE's SharedResourcePointer thingamajig. I've worked with code before, including C++ (not that I remember much of it because it's been so long), so I'm confident I could learn, but I haven't got the foggiest clue where to start. Or even where the C++ would get put, I don't know if HISE itself has support for C++ or if I'd need to do that within JUCE.
I noticed that when all instances of the plugin are closed the memory shared is deleted - but is there a way to do that when a single instance is closed? Just deleting the data that plugin was contributing? I assume there is, but I've not worked with JUCE before at all aside from a brief attempt.
-
Yes I am already using the SharedResourcePointer class in a few things - it's used to share image resources and other stuff across plugin instances.
However this is just a tool for sharing data and to setup a communication between instances with callbacks and complex data transfers is way more complex (especially if it needs to be a wrapper for HiseScript). Also there are hosts who run each plugin instance in a different process (AFAIK Bitwig does this), so you'll run into many troubles even if you get it working on your system.
I would strongly suggest to stay away from trying to implement this feature unless it is the core feature of your plugin (like it is with MIR).
If you really need is, go C++, use HISE as C++ framework and build your inter-plugin communcation system from the ground up.
-
@Christoph-Hart Well, suppose it's time to start another attempt to learn JUCE. Thanks for all the info; I wasn't even aware that documentation existed!