• Correct setup for scriptnode synth?

    ScriptNode
    6
    0 Votes
    6 Posts
    85 Views
    D

    @Christoph-Hart That was totally my fault again. It turned out to be the default envelope with a 5 ms attack πŸ€¦β™‚ . I literally spent a few days searching the forum and trying different solutions.

  • 1 Votes
    4 Posts
    57 Views
    LindonL

    @Lindon heres a snippet to demonstrate:

    HiseSnippet 1866.3oc6X0sSbbCEdF.CAxeMJoMR8p4hdAoJEMyr+qdQf.rATCv1rjetKxLi2rVLq8zY7BYaUk5k8snuIs4QnOB8QnuAsGaO6NdfM.ZCjPhxhDZ74X6ymO+YeNsR3AjzTdhk8B6NHlXYeMT6ALQ2U6hoLqMWyx9pnfn.59BRpv5gChwoojPKa6oejbB1yOik52+9fGhivr.RNIKqmwoAjGS6QE4Tas7OPihZhCI6R6YL6xKuY.msJOh2G.yzHWqXbv93WQ1FKm1THqMvocsr+VT0vN3pg0p35QJUOrluWsJMJWqpqamv5d01q1dkvg3p0bsrmc8PpfmzVfAzaYOyC4gCZ2keHSKfmQSo6EQjC7rZCRVStIOJTdDkTsVsKMJr0PsTpkkMpUtNaZsN6NnsngzQzy0ceghgS9JLUf1SUDdSW.ddlvy0.diAR1FPZFMjtEpcPBMVjyQaK2jIHIcvfcxDJ54ZY+FzpbXBLwR8v6SZl.CFsfEAM78cf+cuuuSeVffxYNb11bAYG1h2ageYg4W3WWv4nr5zYr7jhIgGEQRFKaoqQxIsvEY86sGI49NGfi5SFMQ33WTmhd65TSSdf9TaLQNaSFUrSLg81bDrxTUvWOcy0vBrzPjQClWLIQPkPvdMxAPXf1rLOZMR59BdLDHbLaF3svC6GgEEcgjAZYL.cPA6lz3vRohAlAhma9UmUHdKTKpHn63w3TiAifl5h.iYQiWGsdmNj.QN.mA07EWLgdlh+lERf9nDd+Xkzuil.IklRRbTz8NOxjFelyjtNCCmllaYtiqhSRnjjMYgjWaH7+Zj88XbdJilxYbETVoGuOSXB5LtqQD8YEfdFi1wIDbn4JjnuMAfZnZKSK3CO8Ik51aBScO2ktT2eDjEnvsKY93ygVYi0Z+jrne02NqyNfDAo8J5auEX5i6xYz.SehmPDIzW8JRhIhG6wXEg.dFvp8SNnfS0Zj.7fiQUOYyHAMkGS.nYNwM.+j7weyxpsaDg2jrb69ohBQkRLGQvoEhyVOfClDxDp18NY0N5L5Zbcj9P5nxBb461gaLDeZqvkO.dMjx7eYU+cSTly3kVE3MPYwFWVUgm3CTl9S5GnXOkg7mUK+6h1.mDF.YtBawiFnSOC.PhjuNmmSNSmlunXZ8sIhC4I6KqnX0HZft5vNIjeJSG9a+4eryxIm7c5SdpwYNygNs7bdWtzblylZ+je1wYOPuk+GUnszGUns7k.z9DdeAk8psvvyef2Vi1teu1vqzCH.RYLRjrhU6ojuNWO1UNVBn1DVnZv+A+xX5IGamwzaHSSMBRqQVHqW.Yg3WKa3QCpmBPSSZDTte5ncNqu.+NJuFb3c7w3Dxt7VQ3AKlh6EGQdBnjtuydQ7f8aS+YxwKbOVCpGJmwhAYG1Io99YOmxg7dwTj2gfr7kpmSOJ24b5Vxjm.cknH9gqx6ESybSUGCE07bwYGTvJolwbH2kf+rzKaH5GVel9HrANcWLMRZig2RDCXbGVaXxphLgKar2V8J14ZhC.c6fVXQW4klxth.APjjkBL5FXNby8cj5Xce5L4KsKsvI.csOkD2RIMrzTs9D.dOoRR1hO3hEfuVKofzrRYNGRK+SAdiCNCW5jHVDJ8fNEE50QczAHKIYMNApWzoINowJh75gcMZXT2nOgOxJ+V48ZnDArMZD78VT1yjQHvmHeoavV3WmQXdf.7Cn0dexg5igrdW2k78azvsbkp99kJWuV8JYF1lv028AehAP0Ucv8iDYazUPd58Yk9BdOHtaX9swCjaCRnjq5mmWCe2F9MLP0sQMVpdC4upd0qTx0uVoiiupkq4UqtWsRtUq3UupBeSi9wifKDx6jA0L4fZNz24Uuf5YVjhfbqmUUbs0nsUdVM2GT99nYluKZLbzCPIWOWoJnQi5kaTy0KSA2tGmK5BIcFJpuRtatMz+pUqZ459Up6e1kcYorEjXYN2gXQefTkk9NbfFylNOR2FoPqBS0xnWmE8TKvQ0EA4H3V1oz2BsY5yjbCvQC2QHYUAW8oL8vzGL0aLOe75G4QBVHvmrT4RUKUwy20u5XczTM2kQTWTkZUXHfTYD+lgCi+GgaIIyHqBVAcRF4qjuPidNeNEx3uIxhdQ1bbYo6x9MJeZ2o0z4OHcVP20yOfv6tZ3cUzywGPT8gVgruTMtCOomyiHvUnRbeRMk9uO+aJ8NAB.B6lfYow7Thm4N2lzitKmQRKP8HqverqvuXaBkdGdGmTgYIUEMAUgw7txxCI5aRrElUXyfwE1osnFcL+edfNgotG26jF.JFrJLM2l2peTJ44zPQWOyElS12jrrzbvFVnUpWLcJe1O2o7O2NpOnVQHTx4RsU7tHHj12QYJc9vXKeeTC6mJxnGNHg+x.c6Ejo3thhBnaYpB2lGskbrim0AYujbjAqGjd6kAAE2pisP+IcgklzEVdRWXkIcgUmzEVaRWX8SegxaexpBTF+A2B2Zc0SNssGVwBDJZ8+.4HaLg

    You prob. have to compile the scriptnode, and its less obvious than some filters but move the freq down to 5K or less and there it is...

  • Check Latency broken on latest develop build?

    Bug Reports
    6
    0 Votes
    6 Posts
    207 Views
    HISEnbergH

    Just a little bump to this topic. I believe test begins to run, but the impulse doesn't pass through and the Alert Window fails to show up reporting the latency samples.

  • 0 Votes
    16 Posts
    302 Views
    B

    @OstinTheKr0t

    a no - you need to create a third party c++ node template

    --> 1.) Go to Tools -> create C++ third party node template
    --> 2.) name it EXACTLY: chipTuner
    --> 3.) this will create the chipTuner.h file. Open it with Visual Studio or even Notepad and clear everything
    --> 4.) Copy the code below into the file, save and close it
    --> 5.) back in HISE go to Export-> Compile DSP Networks as DLL
    --> 6.) You can now go into the FX Section and load a Hardcoded Master Effect -> there you can choose the chiptuner effect

    My advise, play with settings like Bit depth = 4 and SR Reduction = 8

    #pragma once #include <JuceHeader.h> namespace project { using namespace juce; using namespace hise; using namespace scriptnode; template <int NV> struct chipTuner : public data::base { SNEX_NODE(chipTuner); struct MetadataClass { SN_NODE_ID("chipTuner"); }; static constexpr bool isModNode() { return false; } static constexpr bool isPolyphonic() { return NV > 1; } static constexpr bool hasTail() { return false; } static constexpr bool isSuspendedOnSilence() { return true; } static constexpr int getFixChannelAmount() { return 2; } static constexpr int NumTables = 0; static constexpr int NumSliderPacks = 0; static constexpr int NumAudioFiles = 0; static constexpr int NumFilters = 0; static constexpr int NumDisplayBuffers = 0; // ------------------------------------------------------------------------- // Parameter State // ------------------------------------------------------------------------- float bitDepth = 8.0f; // 1 – 16 Bit float srDivider = 1.0f; // 1 – 32 (sample rate reduction factor) // Sample-Hold state float holdLeft = 0.0f; float holdRight = 0.0f; int holdCounter = 0; // ------------------------------------------------------------------------- // Callbacks // ------------------------------------------------------------------------- void prepare(PrepareSpecs ) { reset(); } void reset() { holdLeft = 0.0f; holdRight = 0.0f; holdCounter = 0; } void handleHiseEvent(HiseEvent& ) {} template <typename T> void process(T& data) { static constexpr int NumChannels = getFixChannelAmount(); auto& fixData = data.template as<ProcessData<NumChannels>>(); auto fd = fixData.toFrameData(); while (fd.next()) processFrame(fd.toSpan()); } template <typename T> void processFrame(T& data) { // --- Sample Rate Reduction (Sample & Hold) --- int divider = jmax(1, (int)srDivider); if (holdCounter <= 0) { holdLeft = data[0]; holdRight = data[1]; holdCounter = divider; } holdCounter--; float outL = holdLeft; float outR = holdRight; // --- Bit Crusher --- float steps = std::pow(2.0f, bitDepth) - 1.0f; // eg 8 Bit β†’ 255 steps steps = jmax(1.0f, steps); outL = std::round(outL * steps) / steps; outR = std::round(outR * steps) / steps; data[0] = outL; data[1] = outR; } int handleModulation(double& /*value*/) { return 0; } void setExternalData(const ExternalData& /*data*/, int /*index*/) {} template <int P> void setParameter(double v) { if constexpr (P == 0) // Bit Depth (1 – 16) bitDepth = (float)jlimit(1.0, 16.0, v); if constexpr (P == 1) // SR Divider (1 – 32) srDivider = (float)jlimit(1.0, 32.0, v); } void createParameters(ParameterDataList& data) { // Bit Depth { parameter::data p("Bit Depth", { 1.0, 16.0, 1.0 }); registerCallback<0>(p); p.setDefaultValue(8.0); p.setParameterValueNames({}); data.add(std::move(p)); } // Sample Rate Reduction { parameter::data p("SR Reduction", { 1.0, 32.0, 1.0 }); registerCallback<1>(p); p.setDefaultValue(4.0); data.add(std::move(p)); } } }; }
  • Channel Amount Mismatch when converting to monolith

    General Questions
    17
    0 Votes
    17 Posts
    358 Views
    David HealeyD

    @elemen8t said in Channel Amount Mismatch when converting to monolith:

    Is there any solution to this problem yet?

    Only what I posted above, I haven't been able to recreate the issue

  • 0 Votes
    8 Posts
    81 Views
    OrvillainO

    @dannytaurus said in Loading wavetables by drag-and-drop takes a long time??:

    @Orvillain Weird. I'll try it out here again and see if I get the same result.

    Is yours a standard mono, 'power of 2' file?

    Yeppers.

  • My First Impression of Microsoft Setup Was Unexpected

    General Questions
    1
    0 Votes
    1 Posts
    22 Views
    No one has replied
  • past months work

    Newbie League
    10
    3 Votes
    10 Posts
    126 Views
    N

    @David-Healey ill search that tysm🫑😊

  • 0 Votes
    5 Posts
    368 Views
    OrvillainO

    For me it crashes whenever I try to load a 44.1kHz sample into it.

  • 0 Votes
    26 Posts
    765 Views
    OrvillainO

    @Christoph-Hart

    It's like this ..... I have an external arppegiator triggering my synth... I click my left/right arrows to change preset.... and because I use a custom data model, I have to tap into the pre/post callbacks.... so here's what I get:

    synth notes triggering.... click the arrow....
    Interface: preLoadCallback triggered - no synth notes triggering when this is running
    Interface: onPresetLoad triggered - no synth notes triggering when this is running
    Once the onPresetLoad method is finished, a midi note does sneak through into the synth....

    Then this callback fires:
    Interface: postLoadCallback triggered
    This kills the previous notes, and triggers the new ones.....

    Here is my full loadGlobalPreset method:

    inline function loadGlobalPreset(obj) { local samplemaps = obj.samplemaps; local wavetables = obj.wavetables; local params = obj.parameters; local fxSelections = obj.fxSelections; local fxChainOrder = obj.fxChainOrder; lastLoadParams = params; // Restore samplemaps UISoundSelector.syncSamplerMenu(1, samplemaps[0]); UISoundSelector.syncSamplerMenu(2, samplemaps[1]); UISoundSelector.syncSamplerMenu(3, samplemaps[2]); // Restore wavetables UISoundSelector.syncSynthMenu(1, wavetables[0]); UISoundSelector.syncSynthMenu(2, wavetables[1]); UISoundSelector.syncSynthMenu(3, wavetables[2]); // Update all UI parameters - except the ones that are not tagged as saveInPreset UserPresetHandler.updateSaveInPresetComponents(params); // TODO: Restore custom samples // Fix-up FX menus by stable id, but only when they differ if (isDefined(fxSelections)) { for (i = 0; i < fxSelections.length; i++) { local sel = fxSelections[i]; if (!isDefined(sel) || !isDefined(sel.id)) continue; local targetId = (isDefined(sel.idName) && sel.idName != "") ? sel.idName : "empty"; local menu = Content.getComponent(sel.id); if (!isDefined(menu)) continue; // what saveInPreset restored (by index) local currentId = UIEffectDropDownMenu.getIdForIndex(menu.getValue()); if (currentId == undefined) currentId = "empty"; // only fire callback if mismatch if (currentId != targetId) UIEffectDropDownMenu.setMenuToId(sel.id, targetId, true); } } // Restore FX chain ordering (pageKey -> [4 slots]) if (isDefined(fxChainOrder)) { for (k in fxOrderKeys) { local key = fxOrderKeys[k]; local saved = fxChainOrder[key]; // expect an array of length 4 with unique 0..3 if (!isDefined(saved) || saved.length != 4) continue; UIEffectReordering.pageOrder[key] = saved; // update UI state UIEffectReordering.applyVisualOrder(key); // move panels PluginEffectReorder.apply(key, saved); // set DSP chain } } // Update all UI parameters - except the ones that are not tagged as saveInPreset //UserPresetHandler.updateSaveInPresetComponents(params); }

    It is doing quite a lot... and ultimately what happens is when I switch a preset, I get one voice that sounds one way... and then another voice that sounds completely different... like a voice is being allowed to be triggered before the preset is fully loaded.

    It seems to be something related to my effect menus and/or effect re-ordering.

    It is hard to explain. Might have to make a video. But any immediate thoughts??

  • Builder InterfaceTypes

    General Questions
    12
    0 Votes
    12 Posts
    56 Views
    dannytaurusD

    @Lindon said in Builder InterfaceTypes:

    According to Claude:

    "SynthGroup" = Synthesiser Group
    "SynthChain" = Container

    Remember that names can change magically for no reason between source code, docs and HISEscript πŸ˜‚

  • Load DLL from some else's Scriptnode export?

    ScriptNode
    7
    1 Votes
    7 Posts
    110 Views
    A

    @David-Healey Thank you! Thats very helpful

  • Linking a pre-compiled static library with ThirdParty C++ nodes

    Unsolved C++ Development
    4
    0 Votes
    4 Posts
    72 Views
    HISEnbergH

    @Christoph-Hart You are the best. I'll give this a try later on! Thank you as always.

  • 0 Votes
    1 Posts
    20 Views
    No one has replied
  • HISE Sampler VSTs Crash? Across multiple brands (FL Win)

    Bug Reports
    29
    0 Votes
    29 Posts
    904 Views
    StraticahS

    @Christoph-Hart Thanks for taking a look! πŸ™

    Any news on this? I plan to push some other webview feature updates end of March.

  • 0 Votes
    1 Posts
    22 Views
    No one has replied
  • Looping DAW Misreads Last Grid Change

    Unsolved Scripting
    1
    0 Votes
    1 Posts
    21 Views
    No one has replied
  • HISE Transformation to the new age

    AI discussion
    68
    2 Votes
    68 Posts
    2k Views
    David HealeyD

    Someone just sent me a link to this free AI course from Anthropic https://anthropic.skilljar.com/

  • VS 2026

    General Questions
    24
    0 Votes
    24 Posts
    653 Views
    GabG

    @dannytaurus weird then, I'm not sure why it happens. I'll leave my setup, I added MSVC V143 in the list compared to the default settings.

    VS2026Setup.png

  • Where are we with Hise currently?

    General Questions
    13
    0 Votes
    13 Posts
    205 Views
    Oli UllmannO

    @Lindon
    I agree with you! I think the bug I mentioned is also a regression.