• Builder InterfaceTypes

    General Questions
    48
    0 Votes
    48 Posts
    917 Views
    Christoph HartC

    @Lindon you can always lookup the chain index by inspecting the XML:

    <Processor Type="StreamingSampler" ID="Sampler" Bypassed="0" Gain="1.0" Balance="0.0" VoiceLimit="256.0" KillFadeTime="20.0" IconColour="0" PreloadSize="8192.0" BufferSize="4096.0" VoiceAmount="256.0" SamplerRepeatMode="3.0" RRGroupAmount="1.0" PitchTracking="1.0" OneShot="0.0" CrossfadeGroups="0.0" Purged="0.0" Reversed="0.0" NumChannels="1" UseStaticMatrix="0.0" LowPassEnvelopeOrder="0.0" Group0Table="" Group1Table="" Group2Table="" Group3Table="" Group4Table="" Group5Table="" Group6Table="" Group7Table="" SampleMapID=""> <EditorStates BodyShown="1" Visible="1" Solo="0" MapPanelShown="1" BigSampleMap="1" GainModulationShown="1"/> <ChildProcessors> <Processor Type="MidiProcessorChain" ID="Midi Processor" Bypassed="0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="ModulatorChain" ID="GainModulation" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors> <Processor Type="SimpleEnvelope" ID="DefaultEnvelope" Bypassed="0" Monophonic="0.0" Retrigger="1.0" Intensity="1.0" Attack="5.0" Release="10.0" LinearMode="1.0"> <EditorStates BodyShown="1" Visible="1" Solo="0"/> <ChildProcessors> <Processor Type="ModulatorChain" ID="Attack Time Modulation" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> </ChildProcessors> </Processor> </ChildProcessors> </Processor> <Processor Type="ModulatorChain" ID="PitchModulation" Bypassed="0" Intensity="0.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="EffectChain" ID="FX" Bypassed="0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="ModulatorChain" ID="Sample Start" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> <Processor Type="ModulatorChain" ID="Group Fade" Bypassed="0" Intensity="1.0"> <EditorStates BodyShown="1" Visible="0" Solo="0"/> <ChildProcessors/> </Processor> </ChildProcessors> <RoutingMatrix NumSourceChannels="2" Channel0="0" Send0="-1" Channel1="1" Send1="-1"/> <channels> <channelData enabled="1" level="0.0" suffix=""/> </channels> </Processor>

    SampleStart => 4th child processor => 4.

    const var b = Synth.createBuilder(); const var sampler = b.create(b.SoundGenerators.StreamingSampler, "Sampler", 0, -1); const var SAMPLE_START_MOD_INDEX = 4; b.create(b.Modulators.Velocity, "VeloSampleStart", sampler, SAMPLE_START_MOD_INDEX); b.flush();

    Im begingng to think this Builder stuff is a bit pointless - if its not all there then its not saving anything in the end.

    I would say 99% of the functionality is there - I'm building the full Triaz module tree with the builder including hardcoded FX modules, loading custom script processors, etc. It's just that the current docs are a bit sparse and you need to know secret tricks like this one but that is solved with the glory of the new upcoming docs.

  • My plugins , Gui and 3d Work.

    General Questions
    138
    3 Votes
    138 Posts
    57k Views
    lalalandsynthL

    Just did these renderings for Genki Instruments that just released their Katla synthesizer.
    Mostly been working on watch animations, getting a bit bored with that, if anyone needs either a UI design or 3d renders/animations of their plugin, I am available :)
    Still 2025-11-06 172656_4.1.10.T.png Still 2025-11-06 172656_4.1.8.T.png Still 2025-11-06 172656_4.1.6.T.png Still 2025-11-06 172656_4.1.12.T.png Still 2025-11-06 172656_4.1.4.T.png

  • 0 Votes
    10 Posts
    2k Views
    S

    @oskarsh i was having this same issue (and a lot of others when testing a hardcoded Faust FX swapping/reordering plugin idea lol) but what worked for this same DAW crashing bug (with Claude's help) was in the Hise source code changing this line in the "/HISE-develop/hi_core/hi_modules/hardcoded/HardcodedModuleBase.cpp" file from

    HardcodedSwappableEffect::~HardcodedSwappableEffect() { jassert(shutdownCalled); jassert(disconnected); factory = nullptr; }

    to

    HardcodedSwappableEffect::~HardcodedSwappableEffect() { if (!shutdownCalled) shutdown(); factory = nullptr; }

    then rebuilding HISE and compiling the plugin again

    i want to also clarify i am definitely not an expert at this stuff , but maybe this can help someone in the right direction or for @Christoph-Hart to fix this bug ! the creative potential in easy reordering of is so huge im excited to see it grow

  • 0 Votes
    5 Posts
    40 Views
    Y

    @Oli-Ullmann Thank you so much

  • 0 Votes
    2 Posts
    37 Views
    David HealeyD

    @Orvillain The ch file is just the samples, not the sample map. The sample map is embedded in the plugin.

    There is no method for adding additional data to the sample map, a separate file (or files) is the way to go. If these are data files (like json or xml) you need to put them in the app data folder when the plugin installs so that you can find them. If you want them to be embedded in the plugin you need to make them .js files and valid script so that they can be included as scripts.

  • Agentic coding workflows

    AI discussion
    64
    0 Votes
    64 Posts
    5k Views
    Christoph HartC

    Is it possible to tell the AI not to do some of those tasks?

    sure. I mean you have to tell it to use these tools in the first place, so if you keep it a secret from your robot, it will never call hise-cli. Once the dust settles I'll try setting up system prompts / agents.md file templates that teach the AI the optimal usage of this tool.

    The ROI on it letting it compile the project for you is pretty narrow, so that particular set of commands might not be the most thrilling thing to teach the agent - however the hise-cli offers a script runner that can perform build steps for you.

    /hise launch # open HISE /builder reset # clear the module tree /project # Enter project mode export dll # compile the DSP network dll load MyProject.xml # load your XML preset backup export project # VST3 as default export project with format=Standalone # export App /exit # leave project mode /hise shutdown # good bye

    is basically the full cross-platform build script that automates the export for you. you then just need to call hise-cli --run "build.hsc" (or even register hise-cli as shell script runner, then the script file itself becomes executable).

  • Can we detect DAW marker points?

    Scripting
    5
    0 Votes
    5 Posts
    60 Views
    ChazroxC

    @Lindon Still a good read either way. Good stuff to know. 🤛

  • Devlog #2 - Smart Pedal & Key Release Mechanics

    Newbie League
    4
    2 Votes
    4 Posts
    63 Views
    O

    @David-Healey I’m changing the array right away. Thanks a lot and Yeah :D I finally got all the mechanical recordings done in the studio. Since I had already finished the grueling dynamic velocity layers a while ago capturing the mechanical sounds this time around was an absolute breeze in comparison.

    By the way, I watched your Ardour video and built my own workflow for sample editing based on it. It is incredibly helpful, thank you so much for putting that out there.

  • Peak-based Action

    Scripting
    6
    0 Votes
    6 Posts
    169 Views
    VorosMusicV

    @ustk Thank so much you for the snippet!
    and the comments are really helpful

  • FL Studio (WIN) Plugin Validation Error

    General Questions
    1
    0 Votes
    1 Posts
    36 Views
    No one has replied
  • 0 Votes
    20 Posts
    139 Views
    ustkU

    @Christoph-Hart awesome! I was in the same situation so 👍

  • Help with setting up faust with HISE

    Newbie League
    2
    0 Votes
    2 Posts
    45 Views
  • error at writing script file

    General Questions
    3
    0 Votes
    3 Posts
    58 Views
    young60Y

    @David-Healey Thanks, just getting the new error when I built the latest version. Never happened before. Good to know!

  • The source code has different commit hash...

    General Questions
    8
    1 Votes
    8 Posts
    125 Views
    L

    @Christoph-Hart how can i do this with opencode? (get it to always check the code rather than me going round in circles with the ai) i have opencode installed on my commandline.

  • instrument plugin no sound

    Bug Reports
    8
    0 Votes
    8 Posts
    216 Views
    L

    @David-Healey i originally mad the project on my old laptop that i sold, then i moved to a windows laptop, did the ritual of installing hise (MUCH easier on windows) and vs code. it just exported out of the box, and that was what i uploaded as my first vst. then when i installed kubuntu on that laptop, and downloaded the linux vst i made, it wouldn't play sounds (but my other audio effect plugin worked fine) also, i don't know why this laptop misses my keystrokes so much.

  • Keyboard/Midi note triggering button

    Scripting
    25
    0 Votes
    25 Posts
    2k Views
    T

    @ulrik Thanks

  • Preset browser not fully functional in exported plugin

    Solved Bug Reports
    5
    0 Votes
    5 Posts
    55 Views
    ustkU

    Ok it's no bug... I have READ_ONLY_FACTORY_PRESETS=1 and I assumed, naively, that I could prepare a User folder in advance. But since it's shipped with the binary it is treated as factory... Shame...
    So in plugin, if I create a new Folder in the first column as a user would do, it's working...

    gclfo.gif

  • Matrix modulation connection is broken in exported plugin

    Bug Reports
    14
    0 Votes
    14 Posts
    139 Views
    ustkU

    @Christoph-Hart here you go (all the fixes my pet and I tried until today haven't worked so my hacky solution... Using a processingSpecs BC works too, because the root problem as I understand it is the samplerate not being set before the module are constructed/connected)

    HISE bug: extra_mod runtime targets broken in exported plugins Setup

    NUM_HARDCODED_FX_MODS > 0, hardcoded FX modules with networks containing core::extra_mod nodes driven by Matrix Modulators in the FX's modulator chains.
    Works in HISE backend, broken in exported plugin (compiled DLL and interpreted both).

    Symptoms

    Network parameters don't respond to UI changes or preset recalls.
    Matrix modulator's Value updates correctly but its output never reaches the extra_mod node.

    Root cause

    Order-of-operations bug between project-state restore and prepareToPlay:

    Host loads project state → restoreHardcodedData → setEffect(name) → connectToRuntimeTargets(*newNode, true).

    ExtraModulatorRuntimeTargetSource::addConnection (ModulatorChain.cpp:2155) builds a SignalSource with sampleRate_cr / numSamples_cr from getSampleRate() — which is 0 because the host hasn't called prepareToPlay yet.

    target->onValue(signal) stores that zero-rate signal in every extra_mod node.

    When prepareToPlay finally runs, extra_mod::prepare() reads the stored signal, checkSignalRatio() sees rate 0, and the node ends up in a non-functional state — modulation values never reach the parameters.

    In the HISE backend the engine is already prepared when networks are loaded, so step 2 captures a valid rate.

    The early-return in HardcodedSwappableEffect::setEffect (if (factoryId == currentEffect) return true;) makes the broken signal sticky — no later preset load triggers a reconnect.

    Confirmed workaround

    After init delay (so prepareToPlay has run), force-reload each FX:

    fxSlot.setEffect(""); fxSlot.setEffect(originalDLLName);

    This forces a full disconnect + recreate with a valid sample rate.

    Related

    Same class of bug as the recent GlobalModulator::prepareToPlay reorder fix ("Fix SmoothedValue assertion when sample rate is uninitialised"), but on a different code path (setEffect → connectToRuntimeTargets, not prepareToPlay).

    Suggested fix

    In HardcodedSwappableEffect::setEffect, skip connectToRuntimeTargets(*newNode, true) when getSampleRate() <= 0, and call it instead from prepareToPlay once the rate is valid. The scriptnode FX (JavascriptMasterEffect / JavascriptPolyphonicEffect) and HardcodedSynthesiser variants need the same treatment.

  • linking slider to a simplegain, the other way around.

    Scripting
    8
    0 Votes
    8 Posts
    77 Views
    David HealeyD

    @Jeetender You can do this without a filmstrip

    There's a working example here: https://forum.hise.audio/topic/13154/knob-web-studio/66?_=1777296953372