Home to Foleys Finest Audio

Faust Architecture File for Plugin Gui Magic

It would be really great if someone could implement a Faust Architecture File https://faustdoc.grame.fr/manual/architectures/
For Plugin Gui Magic. It could be modifications of the existing Juce architecture files and would provide a GREAT GUI option (as the existing Juce VST GUI works but is not that good). I have looked at this and can work on it but would need some direction/assistance. Is anybody up for this. It would provide some “instant” gratification for the very powerful Faust DSP language and a way to use Plugin Gui Magic to many plugin variations easily.

Not sure if you saw my other post but indeed I am working on this. One thing to note is that at this point in time, the support is not “seamless” as Faust does some things in sort of funny ways and to the extent I am able to figure out, PGM is not expecting some of the things that Faust does do and so ignores them or interprets them in a strange way. For example,
a) Faust bargraphs come over as sliders and don’t mesh up with PGM’s level meters. At the moment it seems sliders work well and I’m not so sure about anything else. Bargraphs, no, although if you can handle a slider that goes up and down on its own, you might be able to live with it.
b) Right now I am working on trying to make a way for slider [style:menu] to create hooks for a PGM ComboBox. This looks like it wants to make some changes in the way PGM works.

Unfortunately these have resulted in me going into a deep dive on both Faust and PGM, not to mention C++. I can sort of find my way though this stuff intuitively but I’m not an expert in any of this (yet). I mean, it’s fortunate and unfortunate, depending.

FYI I have forked Faust from master-dev to my own repository. I can work on making changes to the way Faust works, then when I get something working I push it to master-dev on mine. Then I do a pull request from that the the Grame Faust master-dev respository. Some of the changes have already made it into Faust master-dev, while others are still waiting in that PR. I haven’t pushed my WIP on ComboBoxes because I don’t have anything working yet. All this as a way of saying, this is not in the main Faust release yet so you’ll need to get the code from my forked repo and build it if you want to try it.

With the changes I’ve made you can #undef PLUGIN_MAGIC and it builds as straight Juce again.

Philosophically, PGM opens up a lot of questions. Its intent is really to separate the GUI from the data. It also is intended as a platform for developing custom (bespoke) components. Faust itself can’t do some of the things that PGM does (e.g. filter graphs, FFTs), so you’re left with the option of still having to add those things in C++. Once you learn where they live, it’s not difficult, but it does make managing it all a little precarious since you’re quite likely to overwrite some manual changes by a poorly timed automatic step. Ah but THAT’s why they call it work! Or, another possibility would be to expand PGM’s features into Faust. For example, let’s make Faust “Menus” real combo boxes instead of some odd variation on a slider? Let’s add a “plot” object (somehow) to Faust? But then you’re left with things that only would work in the PGM world.

Also, what someone else wants to accomplish with PGM and Faust might differ from what I want to accomplish. So at the very moment I’m pursuing getting a slider [style:menu] to work just as a regular old ComboBox, because then I’ll be able to complete a couple projects.

It’s pretty clear that you will work in all of these places if you want to pursue this route:
a) Faust code
b) Faust architecture and faust2juce file
c) Faust-generated C++
d) PGM library C++ to figure out what it’s really doing with the ValueTrees etc. and maybe even change the way some things work.

An alternative I could have pursued would have been to develop Faust components as a custom set of PGM components rather than trying to wedge something in to the current ones. I’m not at the point of comfort of doing that yet. My intuitive explorations have exposed the path I’m currently mining but it may turn out it’s not the best solution.

Anyway please join the fun. I have it partially working and I’d appreciate some help with (at least some of) the rest.

Thanks for all your work on this. I will take a look and see if I can help out. The Faust Architecture files are quite beastly, but are generating code for quite a few targets so it does seem that a PGM target could be developed. If you have any specific things you would like me to look at / assist with, let me know.

I’m fairly confident that what I’ve done so far in fact accomplishes what you asked for. It sets up basic hooks for you to more easily add PGM features. Like I said, there are some gaps. So if you like, check the Faust code out from my repo, build it, and try it. In order for me to ask you to help, you’re going to at least need to do that. So let’s start there.

I usually have at least one day a week I can work on projects like this. I will work on this tomorrow afternoon and Friday. By the way, I posted a Faust VST project to the KVR contest KVR Contest Link and want to improve it. That is why PGM peaks my interest.

Oh yeah, I saw that. Well since your project is all sliders I think the limitations won’t slow you down for now. By the way it looks like Stephane merged my PR into master-dev at Faust, so you might as well take it from there.

Copyright © 2020-2021 Foleys Finest Audio UG. All rights reserved.