@Natan If I understand what you want, i.e., duplicating a Scriptnode network and changing minor components within it, this has been my strategy in the past. Simply duplicate the file in your file folder (YourProject/DspNetworks/Networks/YourScriptnodeFile). Rename the copied file (NewFileName) then open it in a script editor. Rename the "Network ID" and "ID" to the same name (NewFileName). Save it and then you should be able to open it in Scriptnode with all the same properties.
Best posts made by HISEnberg
-
RE: Moving DSP Networks Around
-
RE: Distortion
@pelle There are plenty of options in scriptnode already using the math operators (like tanh and clip), as well as plenty of faust code for different waveshapers like soft clip and chebyshev.
-
RE: Reducing LAF scripting redundancy
@d-healey & @Lindon Thank you very much, both of your responses have really helped me explore the possibilities here. I am pleased to know I can use the text property in this way, and will definitley explore this more in future projects. A lot of this particularly UI is already laid out so I am settling for bypassing any text that is not the exception cases, and employing it for any cases that call for customized value displays.
Example based on Lindon's edits:
const tempos = ["1/1", "1/2D", "1/2", "1/2T", "1/4D", "1/4", "1/4T", "1/8D", "1/8", "1/8T", "1/16D", "1/16", "1/16T", "1/32D", "1/32", "1/32T", "1/64D", "1/64", "1/64T"]; const filterModeLabels = ["Lowpass", "Highpass", "Bandpass"]; const LAF_StandardKnob = Content.createLocalLookAndFeel(); LAF_StandardKnob.registerFunction("drawRotarySlider", function(Style,Widget) //... if (Widget.text.contains("FilterType")) { // For FilterType knob, display the corresponding label displayLabel = filterModeLabels[parseInt(Widget.value)]; //For TempoSync, display tempo sync values }else if (Widget.text.contains("TempoSync")){ displayLabel = tempos[parseInt(Widget.value)]; } else { // For all other knobs, display the value displayLabel = Engine.doubleToString(KnobValue, 2) + Widget.suffix; } Style.drawAlignedText(displayLabel, [Area[STARTX] + LabelOffset, Area[HEIGHT]-Area [HEIGHT] +6, Area [HEIGHT]+LabelOffset, Area[HEIGHT]], "left"); //...
-
RE: Mac Installer Advice
@FatMitchell Yea I managed to figure it out eventually. The problem really is that if you don't incorporate certificates and notarize your product, then it is flagged as malware making it difficult/seemingly risky for the customer to install.
-
RE: Codesign error on Mac, what am I missing?
@d-healey said in Codesign error on Mac, what am I missing?:
Yes your video helped me out a lot previously setting up my package installer, really appreciate you sharing that.
I still don't know why but I was having one hell of a time trying to set up my certificates and getting it notarized, terminal kept failing me (not acknowledging my ID's specifically). In the end these two videos and their extended links did the trick for me:
Certificates:
https://www.youtube.com/watch?v=m097IHT7v0QNotarization:
https://www.youtube.com/watch?v=GpdN97OX1Z8@Mors the notarization video may help you in stapling if you still haven't solved it.
-
RE: Auto Gain?
@Straticah I think you more or less have hit upon the best solution, and this sort of issue isn't at all unique to HISE. Understanding the gain added/reduced by any one particular effect, sampler, or synth in isolation and compensating it with a nonlinear gain node is probably the solution, outside of compression which as @ustk hinted at, can squash the sound or introduce unwanted artefacts.
Personally when working on FX I'll introduce a gain node in my scriptFx chain which does precisely this. I do agree that it would be nice to have a meter node which could help us analyse the gain output at any point in the chain, but at the end of the day you have to trust your ears!
-
RE: Combo Box Dropdown LAF
@d-healey Sincerest apologies, it is totally possible I had completely misunderstood! Thanks for you help
-
RE: Combo Box Dropdown LAF
@clevername27 Thank you for putting that tutorial together, I had some fun with it a while back! Unfortunately, it doesn't show anyway to stylize the dropdown portion of the combo box. I think it is as Mr. Healey is hinting at, that to edit this portion you need to go into the source code.
-
RE: Multi-column comboboxes
@d-healey This is great. Can you tell us how to populate the levels with an array? The traditional combobox method doesn't work here and I tried via scripting a few different combinations but I haven't been able to figure this out.
-
RE: Upwards Compression?
@Straticah You might want to try something from Faust like
si.bus(N) : peak_expansion_gain_N_chan_db
I think I have implemented something similar for an OTT but it was a while ago. If I find it I can let you know.
Latest posts made by HISEnberg
-
RE: ScriptNode Envelope re-trigger rehaviour
@DanH Thought it was just me. Friendly bump on this one ^
-
RE: Group Project: Reverse Delay
@meto396 Probably something to do with the buffer, it sounds like your issue is in how the RNBO patch is built, not with HISE: https://docs.hise.audio/glossary/rnbo.html
Also, I find it can resolve issues to move any dependency files/folders created by the RNBO into the HISE project.
-
RE: RNBO randomize parameters
@darkInteger Are you talking about the Random Modulator module?
-
RE: Group Project: Reverse Delay
@meto396 What errors did you receive when building? Did you receive them trying to compile it to .dll?
-
Questions about the Saturation Module
Does anyone know what type of algorithm the stock Saturation module is inside HISE? I think it might be a type of hard clipping based on the harmonics that it produces, but if anyone knows for sure I what it is I would appreciate it. I am asking because I wan't to recreate it inside scriptnode.
Another question, is there a way to script smoothing (i.e. interpolation) of a knob, similar to how the smoothed node works inside scriptnode? I tried
Math.smoothstep
but it didn't have any audible effect. Basically I really like the built in saturator but I want to remove the clicks/artefacts when using the knobs. -
RE: Can I use RNBO synth patches in HISE?
@darkInteger I've never tried but I don't see why it wouldn't be possible. Are they failing to build for you?
-
RE: Quick ScriptNode Tutorial
@clevername27 I think @d-healey pretty well covers almost all of this in this video https://www.youtube.com/watch?v=24vH-oxX1m4
-
RE: Introducing: HISESnippet Browser
@Dominik-Mayer Awesome this is such a big time saver!!!
-
RE: Distortion
@pelle There are plenty of options in scriptnode already using the math operators (like tanh and clip), as well as plenty of faust code for different waveshapers like soft clip and chebyshev.
-
RE: Reducing LAF scripting redundancy
@d-healey & @Lindon Thank you very much, both of your responses have really helped me explore the possibilities here. I am pleased to know I can use the text property in this way, and will definitley explore this more in future projects. A lot of this particularly UI is already laid out so I am settling for bypassing any text that is not the exception cases, and employing it for any cases that call for customized value displays.
Example based on Lindon's edits:
const tempos = ["1/1", "1/2D", "1/2", "1/2T", "1/4D", "1/4", "1/4T", "1/8D", "1/8", "1/8T", "1/16D", "1/16", "1/16T", "1/32D", "1/32", "1/32T", "1/64D", "1/64", "1/64T"]; const filterModeLabels = ["Lowpass", "Highpass", "Bandpass"]; const LAF_StandardKnob = Content.createLocalLookAndFeel(); LAF_StandardKnob.registerFunction("drawRotarySlider", function(Style,Widget) //... if (Widget.text.contains("FilterType")) { // For FilterType knob, display the corresponding label displayLabel = filterModeLabels[parseInt(Widget.value)]; //For TempoSync, display tempo sync values }else if (Widget.text.contains("TempoSync")){ displayLabel = tempos[parseInt(Widget.value)]; } else { // For all other knobs, display the value displayLabel = Engine.doubleToString(KnobValue, 2) + Widget.suffix; } Style.drawAlignedText(displayLabel, [Area[STARTX] + LabelOffset, Area[HEIGHT]-Area [HEIGHT] +6, Area [HEIGHT]+LabelOffset, Area[HEIGHT]], "left"); //...