• 0 Votes
    1 Posts
    4 Views
    No one has replied
  • Recompiled Hise

    ScriptNode
    9
    0 Votes
    9 Posts
    395 Views
    HISEnbergH

    @hyperphonias I’m more of a humble DSP man myself 👩🏻‍🌾

    @d-healey is the man you want to talk to about these sorts of questions. He’s got a ton of materials online about this on YouTube and Patreon. I think this vídeo should answer your question.

    He also released a whole course on getting started in HISE which may be helpful to you:

    Link Preview Image Audio Dev School

    favicon

    (www.audiodevschool.com)

    Essentially you need to script the controls, not use the property editor here.

  • Control ScriptFX using code

    Newbie League
    9
    0 Votes
    9 Posts
    46 Views
    H

    @d-healey oh yeah you're right I was at the top of the block not of the entire dsp sorry

  • Expansions preset tagging

    Scripting
    2
    0 Votes
    2 Posts
    32 Views
    R

    @rzrsharpeprod
    Ok an update. I have created json files and got Hise to read them and populate inside a panel. If I click on the tag text it prints to the console with any presets that have that tag which is good.

    So my next hurdle is now can I/is it even possible to filter the preset browser to show just the presets that have that particular tag?

  • I wrote a bbd delay

    C++ Development
    12
    6 Votes
    12 Posts
    131 Views
    griffinboyG

    @Orvillain

    Oh yeah I tried a moog. It was arguably not very good haha.
    It becomes very dark in a very musty way.

    Unless you're willing to stack a few to get a high order it's going to sound quite blurry. Whether or not that's a bad thing is up to you.

    For refrence the real antialising filters from pedals like the memory man are steep. They are almost like low order elliptic lowpasses. That's the closest 'standard' filter response I found to the real thing. This allows them to have a high and crisp feeling cut-off (3.5k) while still killing aliasing.
    It's different to a synth filter.

    But that's what the hardware BBD effects do anyway.

  • Few questions from a newbie

    Unsolved Newbie League
    39
    0 Votes
    39 Posts
    1k Views
    d.healeyD

    @ScreamingWaves Mini projects are a great way of debugging issues like this :)

  • Global DryWet

    General Questions
    7
    0 Votes
    7 Posts
    52 Views
    ChazroxC

    @elemen8t I just did this myself trying to mimic the RC-20's Intensity knob. What I ended up doing was putting each of my scriptNodeFX's inside of another wet/dry node, then when you have that done, script one slider/knob on your UI to adjust all 'GlobalMix' knobs together. So if you have a scriptnodeFX with a wet/dry setup already, put the whole thing inside of another one and let that be your 'GlobalMix' parameter. I hope I explained that well enough.

    Heres a working example.
    Screenshot 2025-10-04 at 11.24.40 PM.png

    Screenshot 2025-10-04 at 11.24.46 PM.png

    Best way? idk but it works.

    Screenshot 2025-10-04 at 11.32.17 PM.png

  • 3 Votes
    30 Posts
    7k Views
    OrvillainO

    @Christoph-Hart said in Please Increase parameter limit on Scriptnode custom nodes!:

    @Orvillain have you tried the new pagination feature? That allows you to subgroup parameters into pages. It looks like this is just an UI problem and having a node with 100 knobs will look very ugly anyways.

    Ahhh yeah, this seems like it will work. I did notice when you create a page, any hidden parameters end up going to it, rather than showing up on the unassigned page. But I can work with that.

  • PitchShift Node has Noise

    General Questions
    4
    0 Votes
    4 Posts
    141 Views
    xxxX

    @trillbilly @Yarost

    yes i tried different things and it still crackles

    i ended up using the pitch shifter in faust

    it sounds a little different but it works fine without any crackles

  • 0 Votes
    12 Posts
    124 Views
    VirtualVirginV

    @Christoph-Hart said in Looking into the hise_documentation on GitHub- any reason why a majority of the markdown files are empty for the Scripting API?:

    Aw poor @VirtualVirgin that was half an hour that you'll never get back

    "Aw poor @VirtualVirgin that was half an hour that you'll never get back"

    No worries! Was learning how to generate markdown files from text.
    I made text files of all of the classes in the API, then ran a python script to transform it to markdown. Just a learning experience. I then went on the generate JSON for the API with the following schema:

    { "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Scripting API Method", "type": "object", "properties": { "class": { "type": "string", "description": "The class this method belongs to." }, "method": { "type": "string", "description": "The method name." }, "description": { "type": "string", "description": "A description of what the method does." }, "syntax": { "type": "string", "description": "The usage syntax string for the method." }, "parameters": { "type": "array", "description": "List of method parameters.", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "The parameter name." }, "type": { "type": "string", "description": "The parameter type." }, "optional": { "type": "boolean", "description": "Whether the parameter is optional." }, "description": { "type": "string", "description": "A description of the parameter." } }, "required": ["name", "type", "optional", "description"], "additionalProperties": false } }, "returns": { "type": "string", "description": "The return type of the method." }, "examples": { "type": "array", "description": "Code examples demonstrating usage.", "items": { "type": "string" } } }, "required": [ "class", "method", "description", "syntax", "parameters", "returns" ], "additionalProperties": false }

    Which makes this for example:

    [ { "class": "Array", "method": "clear", "description": "Clears the array.", "syntax": "Array.clear()", "parameters": [], "returns": "", "examples": [ "const var arr = []; // Declare an array\n\n// preallocate 10 elements, do this if you\n// know how many elements you are about to insert\narr.reserve(10); \n\nfor(i = 0; i < 10; i++)\n{\n\t// Add an element to the end of the array\n\tarr.push(Math.randInt(0, 1000));\n}\n\nConsole.print(trace(arr)); // [ 523, 5, 76, 345, 765, 45, 977, 223, 44, 54]\n\narr.clear();\n\nConsole.print(trace(arr)); // []" ] }, { "class": "Array", "method": "clone", "description": "Creates a deep copy of the array.", "syntax": "Array.clone()", "parameters": [], "returns": "A deep copy of the array.", "examples": [ "const arr1 = [0, 1];\n\nvar arr2 = arr1;\n\n// Changing any element in arr2 will also change it in arr1\narr2[0] = 22;\nConsole.print(trace(arr1)); // [22, 1]\n\n// Reset the element 0 back to 0\narr1[0] = 0;\n\n// Cloning the array creates a new dataset in memory, separate from the original array\narr2 = arr1.clone();\nConsole.print(trace(arr1));\narr2[0] = 22;\nConsole.print(trace(arr2));" ] },

    I'm sure this is all elementary for you and David, but I'm just learning how to do some these data formats and transformations with parsers etc.

  • How to remove draggable filter grid lines?

    General Questions
    3
    0 Votes
    3 Posts
    36 Views
    xxxX

    @d-healey ah, yes thanks

    laf.registerFunction("drawFilterGridLines", function(g, obj) { });
  • Custom wavetables not included in build

    General Questions
    16
    0 Votes
    16 Posts
    440 Views
    xxxX

    gotcha thank you all

  • Preset Browser Tags....?

    Solved Scripting
    13
    0 Votes
    13 Posts
    1k Views
    R

    @Lindon How do you go about creating the buttons on the left for the tags? And if you click them do they filter the preset browser accordingly? ie clicking the Pad button will show you just the presets with a pad tag etc?

  • Wanted to share a release and HISE VSTs we created

    Blog Entries
    14
    12 Votes
    14 Posts
    198 Views
    StraticahS

    @Chazrox We used sample robot to do the multisample recordings. It essentially plays MIDI and records/ crops the receiving sounds. That way it is also possible to have some analog end of chain effects - or make monophonic synths polyphonic. :)

  • Preset tagging and buttons

    General Questions
    1
    0 Votes
    1 Posts
    22 Views
    No one has replied
  • How to control loaded samples with preset.

    Newbie League
    12
    0 Votes
    12 Posts
    66 Views
    It_UsedI

    @d-healey oh shit this work... How did I not come up with such a simple solution? 🤣
    Thanks again! 💕

  • WIN FL Studio: Notes cut when playing with PC-Keyboard

    Unsolved General Questions
    12
    1 Votes
    12 Posts
    676 Views
    StraticahS

    @HISEnberg we have MIDI scripts but you are able to bypass them (glide and pitch envelope)

    Good to know that there is no issue on your end.

    A single wavegen work fine.

    I will remove more and more from my project to see what causes this.

    Strange is that is only on one OS in one DAW.

  • 0 Votes
    2 Posts
    29 Views
    HISEnbergH

    @HISEnberg Okay I see my error now. I was loading the audio files from the Audio Files folder (using the File System API) and not the Pool which explains why it works in HISE but not in the compiled plugin.

    So for anyone else who comes here the answer looks something like this:

    const var audioFileList = Engine.loadAudioFilesIntoPool(); // get the audio files from the pool const var AudioReference = Synth.getAudioSampleProcessor("AudioReference"); const var cmb_MatchLoader = Content.getComponent("cmb_MatchLoader"); cmb_MatchLoader.set("items", ""); for (file in audioFileList) { var displayName = file.replace("{PROJECT_FOLDER}", "").replace(".wav", ""); cmb_MatchLoader.addItem(displayName); } inline function oncmb_MatchLoaderControl(component, value) { if (value > 0) { AudioReference.setFile(audioFileList[value - 1]); } } cmb_MatchLoader.setControlCallback(oncmb_MatchLoaderControl);
  • Displaying sync delay time properly

    General Questions
    6
    0 Votes
    6 Posts
    99 Views
    HISEnbergH

    @pcs800 Pretty similar issue. You are calling the repaint incorrectly here:

    inline function onKnob1Control(component, value) { currentTempoIndex = value; Panel1.repaint(); } Knob1.setControlCallback(onKnob1Control);

    So now you need to change Panel1 to displayPanel1 here and call the repaint on the control callback. This also means you will no longer need the timer on this panel since it will be your knob that is updating the panel, so you can remove this:

    displayPanel1.setTimerCallback(function() { this.repaint(); }); displayPanel1.startTimer(50);

    However there is one other thing important to understand. If you want to assign a knob callback with script, than you cannot use the property editor to assign the control anymore (the property editor is going to overwrite anything you are doing in the script).

    So if you want the knob to control the delay time still you are going to need to do that in the inline function:

    inline function onKnob1Control(component, value) { currentTempoIndex = value; displayPanel1.repaint(); // Fixed // Assign to the Delay knob } Knob1.setControlCallback(onKnob1Control);

    I think @d-healey ''s video here covers this but maybe there is another one I don't know about:

  • Externally Routed Sidechain Options

    Newbie League
    2
    0 Votes
    2 Posts
    31 Views
    d.healeyD

    @blush said in Externally Routed Sidechain Options:

    since I have to compile the plug-in each time

    Compile a debug build, it's much faster. Or you can try compiling HISE itself as a plugin.