Is using Faust with Rhapsody possible?
-
I am using the Rhapsody boilerplate with a script fx. In the scriptnode, I have added a faust effect (greyhole reverb). It sounds great.
However, when I export the project as a Rhapsody Library Player, the faust effect is not working.
I then went into the scriptnode for the faust effect, and enabled Allow Compilation and exported the DSP networks as dll. All fine so far.
I then tried to export the Rhapsody Library Player again but it states The project must not use compiled DSP Networks.
It is at all possible to use HISE/Faust with Rhapsody?
The main reason I would like to use faust is to have a better reverb options over the basic reverb effect in HISE.
Any help would be much appreciated.
-
You are right that you cannot use Faust effects in Rhapsody. The rationale is that we cannot rely on the Faust runtime to run on an end user system so we have to compile the faust effects to C++ code and since the Rhapsody player is compiled without these, you cannot access them.
In theory there are two options going forward to solve, but only one of them is realistic:
- Allow dynamic loading of C++ effects using the same concept as HISE uses (through a compiled dll that contains the effects that can be loaded)
- Make a community effort to create a good set of readily available effects from the Faust library and embed them into the Rhapsody player (so you can use them from your Rhapsody library).
Now option 1 is the unrealistic one because I absolutely will not have to ensure that the system for loading effects during development meets the requirements of stability, API compatibility and reliability needed for an end user solution. That leaves us with option 2, which might be a good idea anyways. So here would be the outline of the process
- We (and I mean this not in the royal we sense) search and collect all interesting bits in the Faust library that would make a good default effect. Then we find a good set of parameters that cover a broad range of applications.
- We compile the library and include it in the Rhapsody Player binary. I could then also include the effect dll in the Rhapsody template that will be extracted when you create a new project.
I'm overly emphasizing the community effort here because the issue with this approach is that there is not much room for change once the effects are built into Rhapsody so we have to get it right on day one, but if that's something that we agree on is worth pursuing, then let's go.
-
@Christoph-Hart I'm in. What effects do we want - the std Faust stuff for a start?
- compressors/limiters?
- delays - tape, ping-pong etc.
- reverbs - theres a bunch of different ones in faust
- EQ?
- Filters?
- Distortion (non linear
- chorus/phaser (tho to be honest I dont really like the faust implementations I've heard)
-
@Lindon yes allof 'em, the faust library is a gold mine, as long as the license is clear and it sounds good (and there isn‘t a existing HISE alternative like with eg. biquad filters), it‘s a candidate.
-
@Christoph-Hart @Lindon I would be happy to share, I've got a fat stack of Faust code on a hardrive from mostly MIT libraries.
-
Why not make them into stock HISE effects too?
The unrealistic option of dynamic loading is definitely the one I'd prefer because I can see that no matter what effects we make available in Rhapsody developers will always want to be able to add their own or tweak the ones that are there.
I also get people asking about including compiled scriptnode patches (effects and instruments and not necessarily faust based) into Rhapsody.
-
@HISEnberg great, I'm wondering what would be the best way of collecting those. Maybe we'll just post them here in the topic with these rules:
- one faust code per topic using the backticks codebox syntax
- the code must be pasteable into the hise faust node as is and create all the parameters or external connections
- license must be permissible (I know that Rhapsody is GPL so this isn't a strict requirement but let's be honest, the engagement will be a lot higher if all you proprietary folk will get something out of this too)
- if there are changes to a faust code, the original post should be edited so that it won't create a paper trail of incremental steps to the final suggestion)
- people can upvote each post and they will be added sorted by popularity.
The unrealistic option of dynamic loading is definitely the one I'd prefer because I can see that no matter what effects we make available in Rhapsody developers will always want to be able to add their own or tweak the ones that are there.
Thank god I introduced this option right away as being unrealistic :) I think we have to aim for a 80% solution - right now the Rhapsody libraries can only use the (very limited) set of effects available in stock HISE so if at the end of this process we come up with a collection of effects that are "good" (tm), then it certainly made the world a better place. Whether we decide to integrate these effects into HISE or embed them into the Rhapsody player is up to discussion. Of course there are people who want to be able to modify as much as possible (that's basically a law at this point), but then the Rhapsody route is not for them and they have to compile their own app.
-
@Christoph-Hart Great ideas. Generally speaking most faust code will declare the authors and license at the top, so perhaps including an "edited by" section is an appropriate format.
Though I like the idea of sharing them here, I can see this quickly spiraling out of control: a lot of the same code being shared, navigating through a bunch of posts to find the one you want, etc. A GitHub repo may be a better alternative but less accessible (or harder to find) for HISE users. Lastly, perhaps a seperate post to start the topic may be in order?
For my part, I might try to build them into one massive project and share the snippet, might save me posting to the HISE forum tens of times.
**Edit: it would also be admirable of the person who posts the snippets to add a link to the original github repo.
-
@HISEnberg said in Is using Faust with Rhapsody possible?:
tens of times
Is this going to blow up the Rhapsody binary?
-
@d-healey Very well could. I will keep things simple to start.
-
@HISEnberg I mean in terms of file size. @Christoph-Hart Will bundling faust effects affect performance or resource usage of expansions that don't use them?
-
@Christoph-Hart said in Is using Faust with Rhapsody possible?:
@HISEnberg great, I'm wondering what would be the best way of collecting those. Maybe we'll just post them here in the topic with these rules:
- one faust code per topic using the backticks codebox syntax
- the code must be pasteable into the hise faust node as is and create all the parameters or external connections
- license must be permissible (I know that Rhapsody is GPL so this isn't a strict requirement but let's be honest, the engagement will be a lot higher if all you proprietary folk will get something out of this too)
Well I guess we should start by deciding what licenses we want to admit, a fair amount of code in the faust respository use "MIT-style STK-4.3 license" - so is that OK?
-
@Lindon MIT is fine, I think STK is too but not 100% sure.
-
@d-healey Ah that is a legitimate concern. I have one project with about 40 FX (mixed use of Faust, Scriptnode and RNBO) that is about 700 MBs in the DSP folder alone.
Just some food for thought, and correct me if I am wrong here: You and obviously @Christoph-Hart are more seasoned than me, but I've often thought about HISE initially starting as an alternative to Kontakt's sampler players and over the years evolving into this alternative DSP environment to do so much more.
Especially with Faust integration, the wavetable, Scriptnode, Global Mod, RNBO, etc. so many doors opened up to explore. All that to say, it seems that increasingly users are posting on the forum, looking to use HISE to create plugins other than samplers. This is especially true for FX plugins.
Perhaps a template like Rhapsody but for FX would offer a better alternative, rather than incorporating them into Rhapsody?
-
@HISEnberg said in Is using Faust with Rhapsody possible?:
Perhaps a template like Rhapsody but for FX would offer a better alternative, rather than incorporating them into Rhapsody?
Why wouldn't you want to add FX into your Sampler project?
-
@HISEnberg said in Is using Faust with Rhapsody possible?:
Perhaps a template like Rhapsody but for FX would offer a better alternative, rather than incorporating them into Rhapsody?
The main advantage of Rhapsody is that developers don't need to worry about compiling their projects and the stuff that goes along with it - codesigning, notarizing, distributing installers, etc.
So while an effects template might be good I think it's a tangent to the idea of implementing effects for developers working on expansions for Rhapsody.
-
-
Ah that is a legitimate concern. I have one project with about 40 FX (mixed use of Faust, Scriptnode and RNBO) that is about 700 MBs in the DSP folder alone.
That's a non issue, the bulk of that are objects files that the compiler will throw away. You can expect the final binary size increase of DSP algorithms no matter how complex to be in the kilobytes (unless you start embedding impulse responses or big chunks of audio data).
A GitHub repo may be a better alternative but less accessible (or harder to find) for HISE users
Yes, that is my experience as well with random GitHub repos that nobody will find. But on the other hand the development will be much more easy and I suspect it to be a handful of contributors at this point that we can manually add to the repo. I'll create one later and invite you, also everybody that wants to contribute just drop your GitHub user name here and I'll add you as collaborateur.
-
@Christoph-Hart Will I need to compile Rhapsody using a particular version of faust?
-
@d-healey said in Is using Faust with Rhapsody possible?:
@Christoph-Hart Will I need to compile Rhapsody using a particular version of faust?
If you export the DLL to compile the faust plugins then it will create the C++ code in the AdditionalSourceCode folder so theoretically you would have to do this once for every effect library version and don't need to have Faust running on the system that you compile the binaries for distribution, but let's talk integration when we get there, there are multiple options and all of them should be pretty straight forward.