Okay I solved it.
I think I'll make a whole video about this process later for any noobs like myself.
Best posts made by griffinboy
-
RE: About C++ Nodes
-
RE: 3rd party Header Files in Hise?
Haha, distortion: Some of the most complex dsp out there.
This is on the to do list, I plan to release a video and some templates for this stuff, but I am currently tied to this very tiring dsp project which has a short deadline.
Once I am free of it, I shall create the video and release the resources.If you want it sooner than later I can make a rough guide and put it out there
-
RE: More Types of Saturation
@Zazzi
Use scriptnode, see the 'Snex Shaper' node.
When you create a new file inside the node, and then expand the node, you will be able to edit the code, and you will find a function which has a statement that says:
'Return input'To create your own waveshaper distortion, you simply need to return something other than input.
By doing this, you are manipulating the digital signal, which causes it to distort.
Here are a couple of algorithms that you can tweak and experiment with:return ( 1.7finput + -0.5fMath.pow(input,2.0f) + -0.2fMath.pow(input,3.0f) - 0.75f(Math.pow(input,2.0f) - 1.9f*Math.pow(input,3.0f) + Math.pow(input,4.0f)));
return 0.6f + (input-0.6f) / Math.pow(1.0f+((input-0.6f)/(1.0f-0.6f)) , 2.0f);
If you want simple digital distortion, I recommend searching for waveshaper algorithms such as these, and experiment with different ways of implementing them.
Things get fun when you have multiple waveshapers mixed (wet/dry) one after the other, with different lowpass filters inbetween the waveshapers.
I recommend watching a youtube video named 'fifty shades of distortion' for some inspiration.Edit:
If you are wanting to emulate an Analog style saturation, things get much more complex. You have to start using some really advanced maths. I am currently working on a tube circuit model, which I'll release here when it's done. Using that, you could recreate the circuit of different tube amps and get an accurate distortion out.
These typically sound better than waveshapers becuase they react very dynamically to different volume levels, which sounds very lively. -
RE: Detect if the plugin UI interface is open or closed (bypass code when the ui is closed using broadcasters and listeners)
@griffinboy
For those who want to see the working code: -
RE: About C++ Nodes
It's in the works!
I've spent two months diving into the source code,
to find the best practices for writing dsp in Hise.
It's a deep rabbit hole, but luckily I'm getting close.I'm looking forward to releasing a lot of freebies and sharing my templates.
-
RE: Building an effects VST - Idea on guidance
A github repo would make sense, I didn't even think of that!
I'll probably just make posts whenever I create something new. These are custom nodes and so they can't be shared via snippets, but luckily it's quite simple to import these nodes into fresh projects.
Hopefully these will extend scriptnode in a positive way, these are meant to be more indepth modules, and some of them require programming to tweak, but I plan on making it as easy as possible.Things that are currently in development:
- Customisable LUFS calculator
- Efficient RMS calculator
- Two stage autogain module (based on rms + lufs)
- Nonlinear Circuit simulation framework (based on WDF and HSIM)
- Tape simulation (based on Chow Tape)
- Accurate low distortion compressor with auto release
- 1:1 Accurate Moog Filter
- Efficient Linear phase Multiband with latency compensation between bands.
- Personal C++ custom node template
Many of these are already done, but I am working to integrate these better with Hise before I release them : )
-
LAF for the filter display (floating tile)
Not the most pressing feature, but it would be great to have 'look and feel' enabled for the filter display floating tile!
Currently you can only use LAF with the Draggable Filter, but not for the Filter Display.
-
About C++ Nodes
So, I've set up a c++ node in scriptnode (tools > create3rdpartynodetemplate)
It's all working and I can compile it in HISE.
But I'm a little confused at how I can debug this! I can't run the code outside of HISE (not sure how this would be done) and the console out, as well as the juce commands for printing to console don't work.
Hise gives me an error reports when I compile nodes that have issues,
and from that I can debug,But I've quickly reached a point where I need access to better testing, for example I've been trying to fetch the sample rate and I cannot tell if I've done it right because I can't print it.
Perhaps I have not set everything up properly for developing 3rd party nodes? Advice would be appreciated thank you!
I've got the node template all set up in c++
My second question is to do with what I was attempting to do in the first place, get hold of sample rate to keep track of time as each sample is processed. Very Important a lot of dsp I should think.
-
RE: C++ Node not appearing
@griffinboy
I solved it.
The solution is simply to compile the nodes as .dll and then they appear.Do this from inside HISE.
Go to:
Export > Compile DSP networks as dll -
RE: How do you get the sample rate in SNEX?
The working answer:
// Get sampleRate inside a snex node double sr = 0.0; void prepare(PrepareSpecs ps) { sr = ps.sampleRate; }
Latest posts made by griffinboy
-
RE: Load a User sample into Sampler?
@trillbilly Thank you this is probably what I was looking for!
-
Load a User sample into Sampler?
I remember in the back of my mind, seeing a post about a way to get drag and drop samples into the Hise sampler, rather than the loop player.
Was there a guide on that, or did my brain just make this up?
Thanks.
-
RE: New user here. Any SNEX tutorials?
@FatMitchell
Would you rather I did a tutorial on snex, or on c++ nodes?C++ is more complex but allows you to do some really complex DSP not possible in snex.
Depends what you are wanting it for.
-
RE: New user here. Any SNEX tutorials?
I'm releasing a video soon which will tackle it in detail.
But to hopefully get you on the right track fast, create a new snex shaper node, and create a new file inside of it.
Now open up the node, you'll see a process function. it will look something like this:
ProcessData<2> data;
for(auto& ch: data)
{
// Pass thech
iterator into thetoChannelData
function
// in order to iterator over the float samples...
for(float& s: data.toChannelData(ch))
{
s *= 0.5f;
}
}This code here iterates over the samples and multiplies each sample by 0.5
What you want to do is replace this with
s = Math.tan(s)Or tahn, I don't remember which one snex uses
-
RE: SIMD is already built into Hise?
@Christoph-Hart
That's really interesting I'll have to test it myself.
Since Hise is already set up to use ipp, can I assume that ipp will work in scriptnode? I'm looking to vectorise samples to do 4 at once (block processing where each channel is done consecutively, vectorising samples rather than channels) -
RE: Help with Dynamic FX System - Duplicating and Mapping UI Panels
Yeah I think Hise isn't set up to do this kind of thing.
It's definitely possible but I think the hassle is inevitable.
I'll look into it in the future and see if I can create a solution because I need it myself. -
RE: Help with Dynamic FX System - Duplicating and Mapping UI Panels
If I'm honest with you, the way I would approach this would be to use panels for each entire FX graphic. This includes the knobs.
I'd program the knobs myself instead of using the ones built into Hise.
This would give the advantage of being able to store 'presets' of what each module should look like and how it should function (number of knobs, how they connect up to the FX).However, somebody else may be able to give you a better solution that works with your current method.
The reason I would do it from scratch is mostly that you cannot procedurally create and remove knobs. And it would be a pain to create a matrix that manages the knobs.
(Imagining a scenario where the user selects eq in every slot, that could potentially be a lot of knobs, all of which would need to be created in advance and waiting to be managed into whatever config necessary).
Instead I would have a panel for each slot, each of which are capable of procedurally creating the 'knobs' (child panels) needed for any given effect.The cool thing about panels is that you can procedurally create and destroy child panels, meaning you can spawn in as many knobs as you like, whenever you like, and reliably delete them when you need to.
I'd have one panel per slot (even these could be procedural in the form of a child panel, but there isn't really any need apart from to save memory if not all slots are full) and then those create children for your controls (knobs, ect).I just wish Hise script was fully featured, as far as objects are concerned, that would make it easier for sure. I did something similar the other day to create these knobs with procedural label panels, so I know that it's possible to communicate robustly between panels using ids stored in the panel data.
eg:
panel.data.knobId = knob.getId(); // Store knob ID in panel data -
RE: load current project on startup
I might be wrong, someone please correct me but I think:
-Project is essentially the project files (images, audio files, dsp).
-The Xml file is only the Interface script as well as the position of Ui elements on the screen.
The easiest way to tell is just to open the xml in notepad and read it I recommend doing that, then you will know what is saved there.
-
RE: Host Undo and Parameter Automation
@clevername27
Bump, I would like to know as well -
RE: load current project on startup
@dannytaurus
So, loading project, and loading xml are two different thingsI reccomend always using Load project, and navigating to the file.
This will automatically load both the project and ask you if you want to automatically open the last modified xml.You can have multiple xmls for one project.
It's a confusing system because the Ui doesn't have a project manager.
It was something I was meaning to bring up at somepoint.