Categories

  • Let's discuss the latest AI tech and how it influences your life as a HISE developer.

    6 Topics
    134 Posts
    JulesVJ

    I have two different NAM models with varying rendering quality: Standard and Feather (which uses approximately half the CPU as Standard).

    In HISE, the Standard model works, but Feather doesn't. I've attached the files below.

    Do you have any suggested solutions?

    NAMModel_Feather.js

    NAMModel_Standard.js

  • General questions and announcements about HISE

    8k Topics
    73k Posts
    resonantR

    @pratitghosh you can just use bypass nodes for each model. And these modes will be connected to a xfader node, so it will switch between models

    Edit: 100 models are pretty huge, maybe multiple xfader nodes, each one will switch 8 models

  • Scripting related questions and answers

    2k Topics
    16k Posts
    jadgJ

    Re: Any Examples of AudioWaveform (RangeStart editing?)

    Grabación-de-pantalla-2026-03-25-060513.gif

    Content.makeFrontInterface(500, 350); const var ConvolutionReverb1 = Synth.getAudioSampleProcessor("Convolution Reverb1"); const AudioWaveform1 = Content.getComponent("AudioWaveform1"); const var Label1 = Content.getComponent("Label1"); const var Label2 = Content.getComponent("Label2"); const var Label3 = Content.getComponent("Label3"); const irs = Engine.loadAudioFilesIntoPool();const var IRsComboBox = Content.getComponent("IRsComboBox"); IRsComboBox.set("items",""); for (x in irs) IRsComboBox.addItem(x.replace("{PROJECT_FOLDER}").replace(".wav")); inline function onIRsComboBoxControl(component, value) { if (value > 0) ConvolutionReverb1.setFile(irs[value -1]); }; Content.getComponent("IRsComboBox").setControlCallback(onIRsComboBoxControl); const sampleComponents = [Content.getComponent("sampleStart"), Content.getComponent("sampleEnd")]; for(c in sampleComponents) c.setControlCallback(sampleComponentsCallback); inline function sampleComponentsCallback(component, value) { local rangeStart=NumSamples*sampleComponents[0].getValue(); local rangeEnd=NumSamples * sampleComponents[1].getValue(); ConvolutionReverb1.setSampleRange(rangeStart,rangeEnd); Label2.set("text","Range start at : "+ConvolutionReverb1.getSampleStart()); Label3.set("text","Range end at : "+ AudioWaveform1.getRangeEnd()); } inline function ConvolutionReverbChanged(processor,index,value) { reg IRFile=ConvolutionReverb1.getAudioFile(0); reg NumSamples=IRFile.getNumSamples(); sampleComponents[0].changed(); Label1.set("text","TOTAL SAMPLES: " + Engine.doubleToString(NumSamples,0) ); Label2.set("text","Range start at : "+ConvolutionReverb1.getSampleStart()); Label3.set("text","Range end at : "+ AudioWaveform1.getRangeEnd()); }; // Broadcaster definition const var ConvolutionChanged = Engine.createBroadcaster({ "id": "ConvolutionChanged", "args": ["processor", "index", "value"], "tags": [] }); // attach to event Type ConvolutionChanged.attachToComplexData("AudioFile.Content", ["Convolution Reverb1"], "0", ""); // attach first listener ConvolutionChanged.addListener(ConvolutionReverb1, "AudioFile", ConvolutionReverbChanged);

    And the snippet for a rapid probe. I hope can be "usable" :

    HiseSnippet 3005.3oc6Z8zaabbEeojVWS53TmD2VihlfwD8.oCKMon9qccDknDsYMkEKIkcRsERFs6PxMZ4NL6tTVJFtvG5gfh9An4V9DTjiEn4fJPAbOVf9EH8XOTf7Intu2tK4N6xkRTNtNsAg1Fly+d+edueyLrlIWgYYwMkhkn4g8XRwdE4FGZX2oTGplgTk0khcQ4U6qpwuGceVYtY25Ti1Lo0NrG0xhoJEK1z2DmYr3yH474qVYMpN0Pg42kjzc4ZJrpZc0r86sVwaqoqWlpxZp0UX1yUrhB2nDWm2GjpokyI0iprGsM6NTbZSIKcKpUGoXWQd1YaorTtbKUnv74nzBpT5b4YEVl0ZgVJyma4bp6NeN3OKHE6LanpYyMaXSsYVRwlYMt5gM5vengKCtqlk1t5LrQdoF.mc6tLWWEUQrWoRczzUqMvbYIADsluwaZWi2Ek2TSUaX+9FwK3L.weEhFvXSET7lNf3kWT7xIHdQHRwDDoYbEoWStghoVOa+QP44bxULrYlsnJA8ktyUZpOItbINLCC6rco6wJaBMFthTymKWFBXzSe8DfqxxlrO0j.yeetdeaMtQc19LycyStAwIVJaalsSLTCZ2d5rgRRpjBqg3snjCI5vvtVPXGRrARDPtR7t83FPiTICNsjAjopzcY5ieotCGwRl83WxrQrjBG+RJfKwaMZlVvj2vnslAKqNmp5nBk0zYVfMlWiy0Sk959zuRcKfb6xWievXYhvbPNIzLqECFWyl00JYlj3ffghj5.hlAJIoSDWbxTU0JvTScPVSVOczYm7Q0pu0uXiRMe+xaUc8Mp+3jo8GK6Co6mLMpZZF5f5PZ02PwwcxMDHKJylfVoLPfy.JldeV5DOJAgPzZQR4zl7NjbowdhGezvITQPiTJPpuu6z+Y42I80IteR73qmXBrMHU7DmRTc8cgbKohRVSe83C7WVNgsCIH57tezbxclv9XS6joyjfL1OG2x2vPMY5ct93WbBzClRAcfgEMv3oDkFFddCFHJO23l637dC+nyUn5DSr.giI3F2oeW2s7VWILQuetcPk+tHcff8HniKg.ig.YHWYDo694CRn3j3nIJdb3uiIHxkXNExR4KsYFvOjHwi6tQ2cyiM6.aXuiyJHV3jITax0HIe6HXP6ALvgpoRKPtBQPNlg5.hEJiGRo5dxDRFHd7wIF0cMhH.UcfEolp2f7rYzLTYGjw2mYxZCIUv8R2HZEXXBoTXNdm466Dtg6Rw4424.eXT9YEOABsDtobCXGZtUyUqRZr5l0ptQiqgDII4sGjdTk2GJ80j2v1TyncJeFlIWZhyd+DuPcUH6eA3qvjQIt5UIqYBo2UnVPkShJqklgFx+nqZ5427KMnXx..ABjHEteKolZRPBFcgIwDNIolssfwuexgt+jYf0fQ.3WbBBRtiyTsotScmDONsq3RssoJcH1bBXgLrIHDhDixortyqIG8y5rCVmZS8JD6DY3kcC328irD+NffjCkljA4aKHytMQWCzUClYjLVUsp2voF0gBTbnP.jeb6LPlF5iPYq6vsYaYjB2nDG1vQBOTqVQNlWFWcPvhZXDiq4wsvTF86tKyTH0pyDAbbAAGJOdvghXWUbcABSDJxAQea0iYLNDsRd9M.H4LdREfx01AF4OvCFYfvdIMUDZavsBRNJfH5eUH7.wqGFHg6d5MLrXcAMnQWnNyZHfBI+jxf9F61+VIoA4lw1W4OMkqn5HeS6Jeupm70PWSkY5HXmWVnbb.o5I2HwSWYRHw4jGVRN.A9f+3a8uFk.Wvi.CPR3IEBXKBaa9IEk1tBt6Awt6Y8AOROlosF5risNae3jStH4iKuNyZOadO3qCSvBx3o1Acfu.bwhG523RG8PMU6NC63y90E6vzZ2Q3PaZEGlVohJxzH1dKgXMGb9sWQdtYWdtkWXwYWddgAlMzHHJ36oY2oJqkcIcMk8.ceJKH3E2J6dvuXSKIn0mYBc6955S1VPWK9gE6RErCe4Jc4p.89gx2ALQTcsOloViYp.7BN4ozjwYwnEeZezGEhuhmV9Tv2y6x2y6wWmhTNr8rxtEUE3Iok.OORsXP+pj5H904J1Bh9bMzXbVKZecaIruFfH4OurEEctwOSlLW82i8yfbTTmzPwlFzh1FccsUx5fCUBKhJE6GKOZk97KuvBKsjzts8I47ySehCuDz8u+In6yJFSmRLlNrtW7CFQ2emIT2yDR2ey2j7rIU2uj7HHRJL+b4JDbKQ7y7nGczZHMwU4yoO+O+W9mXuhlos29IO6zZlJHXl9r8eIYltzktciI0L8ijCAzJ+hKs7RKDohGzD8EewSc5Mj87xW9S9cgsRmchyVKj7ntf0hXNvZIG6yf1CrTxwdKOI.Rc2SNw5lGtN0buF1IpBnxXj6AYJHanzgStETpKQWvhzuqPG047tj7N+2ZZswklvonn6nQUsLwc03voApTO2bRN4yjic1PZa7SHlXtwokeYuwokWzy5ig0MX5LEHh1fPwhL.DNcF4ZRQ6f8cWO6YOamv9kycBR57hIU4hIU+HeI8uFPR+4PqtPXpFdjIrjhqXusbqspSZdqJMxPHu2VaS1b6FMI2Z06tAY067djU2d8JaUtBjihT4N330ICuDDWnK6PtJw+RaRRHW9xWNjFtxJOcjrC9afNq7VGbXa.Jlzn2X2Ej2jq1WmZG7BDwqY0a.nXafasCuYNCKM6CEuF1v2p3LS1sJd7W54jJtulbMMakNQKuSEg7B.f9us75cGsmWdiVsfXVegcF4xu6wdgrmZQ4Dub1WefrHfexQVhFQknvAYUBdi6RR2iYKz0Qe5m9FGUEjbCk.F3Jc60W2hUkYzVDLvWshmbUwnWeaw921hsFUYu1l79FpM6.mFUM3xXpLcZ.dbKsRBz3S96EWGPDAosDmS4xM8.zNDDpOJuSwoDb.R4d7.ube3ICz47dAN5.1gvIGhM8DeY64O1KaWpNGbRFs2jBBHxd7tIfM+JL7XlFLc7vZwlByw41NG1F02FP4MmFPVvm4MXdrcLuAyOXPwv22z0n85xfAgQAkus6cW3dg9Ij8Zk+EwayzaheaFHH.wtGDBvQEWqOrGyLXuedQGVsZWHbJ.u7j75rdLp8lN3gGL3YKVu9Mg3udgWED9gIXZZBAnAhu9pU1xfA9SaQcrjI2xpEnNNzxRbnZ8gRyph83royJXefuUzqhNJX2AFCooLH.ve1NbIWS2z9SI61Nen1yFpcgPsmKT64C0dgPsWzusqAcSZOLx.ZG9ND9dSVLOPfZTPkElIfKYHwc6QL+6PyrinH7.auLe8rWp0495WV9Eyi8EefL1Py8Dn6CaKgdPY70G.VePuASQrI2f2qC2PSI3l.HntcalonrGoBsJd2c6IlMuNfIjZIrK9mVrJf+hZFbu8oxVj+T+vmQ5utjrq3Rv7Zjuc.mZ5u0Cm5qio6U8JLRbAE7+194WQ1IUNAq79Mkn9x.Vix.RA5l22ctEzXSyLvRGNmRPGpCqKFRaAfJPQBpnIZPeiAAhNmHqJGu9Twe4JDrKRM.o5wiN5u8hGcTiCMTBmzaL3Vjjp5.T0S8ExDy413COH9KmQ3Uq.xeRfW7QWunboq8..3ho0C9PNLqGrYeKMkGTei0gy5pB6Qzz2mYA3KwSdzmoaSsDgZiDyCp8Q+6KLc.n13XBPswwCC0dlIK89I7ytYluC3v2T.Gl86.N7c.G9+dfCuLJv8xfGcoJl72Ww8QHwX4y5zCn2FdWR+lXaRDuHaWHq36qnDjTirvYedWXgm2EN2y6Bm+4cgK77tvEedW3Rm7BwhVq12l20cKq2aC69qK..IJ1PN14Bt6R7W1oCCqf+zOFPZux09O+nS4Z+jUk6qqOxbvNCMuF6wdX3D7lfdg88nK9Gt4+3i+MqfWjIyzFkxEkKrXVilKb6kJs1MaWJa16tQYZtsyWq+b5J6U4l3+xt550dWse489U42tL78VYylUBx4ZpsaeD7i3iqVwkvN4Hj1r1FtXGiMD7Dz6+A.W4hwG
  • To share HiseSnippets, Interface Elements, GUI, UI/UX, Panel LAF etc..

    197 Topics
    2k Posts
    jadgJ

    Here is a video where you can see better the visual details:
    Fully customized pseudo backlit interface via LAF

  • All about ScriptNode DSP nodes, patches, SNEX and recipes.

    362 Topics
    2k Posts
    JulesVJ

    @Mors Is it possible to have a faust sync reverse delay?

    Here is a reverse delay but not in sync: https://forum.hise.audio/topic/11445/free-reverse-delay-built-in-rnbo/11?_=1774466149983

  • A subforum for discussing Faust development within HISE

    114 Topics
    940 Posts
    S

    @PV3679 I solved it on my end by doing 2 steps.

    Renaming the Faust modules parameters to something less generic (So FXslot1_Cutoff instead of simply 'cutoff'. It is my understanding that Faust modules dont like names that are re-used. I compiled ONLY the Faust module (so got rid of other stuff and compiled).

    After that the knobs of the Faust module were working 🤷🏻♂

  • If you need a certain feature, post it here.
    626 Topics
    5k Posts
    J

    @David-Healey ok got it

  • Develop better software through collaboration and shared knowledge. Not just about coding —> covering the entire journey, from development to launching and promoting plugins or software.

    155 Topics
    1k Posts
    ustkU

    @David-Healey stash, fetch/pull, then restore stash should do, no?

  • If you encounter any bug, post it here.
    2k Topics
    12k Posts
    ustkU

    It turns out it was a frame processing issue in the wrapper.
    Fixed by PR https://github.com/christophhart/HISE/pull/928

  • Post your example snippets that you want to add to the official HISE snippet database here. We'll revise it, upload it to the repo and delete the post when finished.

    23 Topics
    140 Posts
    CasmatC

    @Christoph-Hart yeah, here's what I could come up with!

    The model occasionally thought you could add child panels directly to viewports. It didn't properly cast/convert the raw result of vpt.get("scrollBarThickness") for calculations. It hallucinated a scroll event listener/callback for viewports. I needed to prompt it specifically to use a 30Hz timer loop for position updates instead. It had the most trouble with local, reg, and const. Especially in long generations with multi level functions, it tried standard JS var/let scoping, leading to long runs of compilation errors. I mainly used Google's Gemini 3.1 Pro via Antigravity, but I also tested Claude Opus/Sonnet 4.6. The Anthropic models had a couple fewer issues, making sense if the MCP server is currently tailored to their behavior.

    I had checked out the viewport's multicolumn mode. I built this as a ScriptPanel recycler to have high LAF control over individual buttons and icons for a custom preset browser. I wouldn't be able to get the same component styling flexibility with multicolumn mode.

    I'll try out the LSP server! I've been following HISE's ai journey and can't wait to see what's next! Being a dev who uses AI to assist in most my work nowadays, it'll make HISE development much much faster and accessible lol. Love the forum, but I dream for the days where I'll ask Claude to explain why my function call is wrong and @David-Healey can enjoy his vacation instead! 😁

    The MCP server in antigravity is amazing, but there's a couple things HISE struggles with against AI.

    Absolute positioning is a bottleneck. Is there anyway to expose JUCE's FlexBox/Grid to hisescript? It would be life changing. If the model can just write relative values, it wouldn't have to guess pixel coordinates anymore. Can't wait for scriptnode to work with MCP. Having models build scriptnode networks from text/json, or piggybacking faust, will make that rodeo a lot simpler.

    I can envision HISE's future as a sidecar rendering engine alongside your everyday IDE, which wil be where the actual code writing/editing and prompting happens. Having HISE run in a headless like manner to compile the plugin, fix errors, and run tests would have massive potential. The LSP and MCP server are great starts for this.

  • Everything related to the documentation (corrections, additions etc.) can be posted here
    71 Topics
    481 Posts
    Christoph HartC

    @username1234 this is a thing that I vibecoded last week - it‘s super fresh but yes once that is tested a bit it will definitely be recommended as the preferred way of getting hise setup for development. Just be a bit more patient my friend.

  • Collection of Blog Entries

    81 Topics
    770 Posts
    No new posts.
  • The nerdy place for discussing the C++ framework
    184 Topics
    1k Posts
    HISEnbergH

    @Allen Ah thanks for clarifying. I believe this should work the same for RNBO node as any other C++ node. You need to add these flags to your projects Extra Definitions:

    NUM_HARDCODED_FX_MODS=4 //or however many slots you need NUM_HARDCODED_POLY_FX_MODS=4

    It is possibly you may need to first add that to HISE's extra pre processor definitions in projucer first and recompile HISE, then also add those to your project (so it works in the compiled plugin).

    The documentation about this is a bit hard to find. There's also a forum post about it here.

    Here is a spreadsheet of the different HISE flags you can use (it needs to merge this into the documentation somewhere).

    Just for some extra context this is straight from the docs:

    // number of modulation slots for Script FX HISE_NUM_SCRIPTNODE_FX_MODS=0 // number of modulation slots for Polyphonic Script FX HISE_NUM_POLYPHONIC_SCRIPTNODE_FX_MODS=0 // number of modulation slots for Scriptnode Synthesisers HISE_NUM_SCRIPTNODE_SYNTH_MODS=2 // If you plan to compile the DSP network to a C++ node // (which is possible with this node since HISE 5.0), you will // also need to set the corresponding preprocessor variables // for the hardcoded modules: // number of modulation slots for Hardcoded FX modules NUM_HARDCODED_FX_MODS=0 // number of modulation slots for Hardcoded Polyphonic FX NUM_HARDCODED_POLY_FX_MODS=0 // number of modulation slots for Hardcoded Synthesiser NUM_HARDCODED_SYNTH_MODS=2

17

Online

2.2k

Users

13.5k

Topics

117.7k

Posts