Forum
    • Categories
    • Register
    • Login
    1. Home
    2. ustk
    3. Posts
    • Profile
    • Following 0
    • Followers 15
    • Topics 472
    • Posts 6,035
    • Groups 1

    Posts

    Recent Best Controversial
    • Preset browser not fully functional in exported plugin

      So all is good in Hise, but in exported plugin:

      • the additional buttons at the bottom are not showing
      • the SAVE button doesn't react (it does not even illuminate with mouse over like the mouse event is not received...)

      EXPORTED PLUGIN:

      Screenshot 2026-04-27 at 16.15.47.png

      HISE:

      Screenshot 2026-04-27 at 16.16.53.png

      Preset Browser data:

      {
        "ShowSaveButton": true,
        "ShowExpansionsAsColumn": false,
        "ShowFolderButton": true,
        "ShowNotes": false,
        "ShowEditButtons": true,
        "EditButtonOffset": 0,
        "ShowAddButton": true,
        "ShowRenameButton": true,
        "ShowDeleteButton": true,
        "ShowSearchBar": false,
        "FavoriteIconOffset": 0,
        "ShowFavoriteIcon": true,
        "FullPathFavorites": true,
        "ButtonsInsideBorder": false,
        "NumColumns": 3,
        "ColumnWidthRatio": [
          0.3,
          0.3,
          0.4
        ],
        "ListAreaOffset": [
          0,
          0,
          0,
          0
        ],
        "ColumnRowPadding": [
          0,
          -5,
          0,
          -5
        ],
        "SearchBarBounds": [],
        "MoreButtonBounds": [
          750,
          10,
          40,
          22
        ],
        "SaveButtonBounds": [
          635,
          10,
          22,
          22
        ],
        "FavoriteButtonBounds": [
          487,
          5,
          32,
          32
        ]
      }
      
      posted in Bug Reports
      ustkU
      ustk
    • RE: Matrix modulation connection is broken in exported plugin

      @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:

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

      2. 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.

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

      4. 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.

      posted in Bug Reports
      ustkU
      ustk
    • RE: Matrix modulation connection is broken in exported plugin

      @Oli-Ullmann By force the DLL I mean setEffect("") then setEffect("myFxDLL") to force a refresh at init

      const var DLLNames      = ["Tube_ClassA_DspNetwork", "Noise_DspNetwork", "EQ_DspNetwork", "Exciter_DspNetwork", "Tube_ClassB_DspNetwork", "Transformer_DspNetwork"];
      const var HCModuleNames = ["Tube Input HCFX", "Noise HCFX", "EQ HCFX", "Exciter HCFX", "Tube Output HCFX", "Transformer HCFX"]
      const var HCModules = [];
      
      for (name in HCModuleNames)
      	HCModules.push(Synth.getSlotFX(name));
      
      const var initTimer = Engine.createTimerObject();
      initTimer.setTimerCallback(forceReloadHardcodedDLL);
      
      inline function forceReloadHardcodedDLL()
      {
      	this.stopTimer();
      	
      	for (fxSlot in HCModules)
      	{
      		fxSlot.setEffect("");
      		fxSlot.setEffect(DLLNames[HCModules.indexOf(fxSlot)]);
      	}
      }
      initTimer.startTimer(500);
      

      The way the effect are built doesn't matter (I have a mix of networks, C++ and Faust as well...)
      Now I narrowed it down, the main difference is that I am using matrixTargetId for full matrix mod control of the parameters. This is where the connection breaks after init.
      I tried with Claude different patches but nothing does better than this "force refresh timer" thingy

      @Christoph-Hart Is this production safe enough?
      There might be a broadcaster that fires after init, that would be a better pal for the situation I think...

      posted in Bug Reports
      ustkU
      ustk
    • RE: ScriptNode - DC. Offset

      @Jeetender Hmmm... I'm might be wrong but I'm not so sure about this. You can surely set a parameter to any value below 20Hz, but I'm not sure the filter is capable of reaching this value. To me it's capped to 20Hz-20kHz no matter the range of your parameters.

      posted in General Questions
      ustkU
      ustk
    • RE: Matrix modulation connection is broken in exported plugin

      @Oli-Ullmann Thanks a lot for the detailed explanation!

      This confirms what I see, so the main difference is that you load your hardcoded DLLs dynamically.
      I doubt the setAttribute is the origin of the problem because when I force the DLL it then works.
      I need sample accuracy so the targetId is what I want.

      Now, when you say "I load the HardcodedFX dynamically via script", do you mean once at init or on preset load CB? (or other behaviour to swap them on the fly)

      posted in Bug Reports
      ustkU
      ustk
    • RE: Matrix modulation connection is broken in exported plugin

      @Oli-Ullmann @Christoph-Hart Alright I got something!

      When setting the hardcoded DLL to "" then back to the original one, the connection is made.
      So why it's not connecting at init I don't know...

      @Oli-Ullmann Do you set your networks/DLL from script or are they just set in the module tree like I do?

      Perhaps I should also add those module states to the presets?

      posted in Bug Reports
      ustkU
      ustk
    • RE: Matrix modulation connection is broken in exported plugin

      @Oli-Ullmann Mmmm... I have them all already...

      Do you mean you actually have an FX plugin working with the matrix modulation system? (extra_mod nodes, UI matrixTargetId, etc...)

      posted in Bug Reports
      ustkU
      ustk
    • RE: Matrix modulation connection is broken in exported plugin

      @Oli-Ullmann So in the end it's not this. I have it noted in my project check list like so:

      /*
      In the case the modulation is deleted when loading a DAW project, do this:
      Engine.addModuleStateToUserPreset("Global Modulator Container");
      https://forum.hise.audio/topic/14137/modulation-is-deleted-when-loading-a-daw-project/5
      */
      

      Thanks anyway!

      posted in Bug Reports
      ustkU
      ustk
    • RE: Matrix modulation connection is broken in exported plugin

      @Oli-Ullmann I have seen this! Testing...

      @Christoph-Hart Yes

      posted in Bug Reports
      ustkU
      ustk
    • Matrix modulation connection is broken in exported plugin

      So I have:

      • UI sliders connected to Matrix Modulators via matrixTargetId
      • networks using extra_mod nodes and ExternalModulation for their parameters
      • and of course because it is necessary, a Global Modulation Container.

      Everything works fine within Hise.

      But once exported, the sound does not change, neither from UI sliders nor from preset load.

      • I tried to connect the UI sliders to the Value parameter of the Matrix Modulator for direct control, but it does not help.
      • The same issue applies for interpreted networks (ScriptFX) and compiled DLL (hardcoded master FX)

      so the connection is broken somewhere in exported plugin, but AI seems to be lost with it...

      Should anything be taken care of in the script? Like a connection initialisation of some sort?

      posted in Bug Reports
      ustkU
      ustk
    • The source code has different commit hash...

      Now I'm getting this when trying to export my plugin... I just rebuilt Hise and I assure you the branch has not changed between the built and the current state...
      Getting so, so many bugs these days, it's so frustrating spending most of the time trying to get Hise, the DLLs, and everything just working, that development of the plugin itself just became a side job...

      posted in General Questions
      ustkU
      ustk
    • RE: Peak-based Action

      @VorosMusic Here's a snippet that demonstrates how to handle the detection and integration part in the DSP.
      Notice that the callback only fires when the value changes from peak (value==1) to clean (value==0) and vice-versa, with no extra firing in between (that's not entirely true as it fires sometimes but this might be due to the AsyncNotification not being fast enough when the changes are erratic like in this example)

      HiseSnippet 2117.3oc6Y0DaijTEt63TdF6YfcWsgENrG5YDG7.iL1IYlLqVwDm33Dh1IYLwdyBmhJ2cY6RtcU81c4Lwf1Sb.twYPBI3NGPbCIPLmQZ3Nm3D2yo85xqppa6tcamI1IY2cP3QZRWU8dc89468SWUcetMIHf6aXlu4POhg4cQMFxDcq1ESYF6uig4Jn8b4svtUwsbI0NC22ykXr8PObP.wwvzLydRJMysrg524atM1EyrIimxv3XN0l7LZepX7rdU9Hpq6tXGRSZ+XTudk8s4rpbW9.PpxfJY3gs6g6PNDKIaIjwOBGz0v76gVi37AOoLYiG2pzFqtZI6MHOlr9ZNsdhy5kINqSvq8AO5QjMV0vLaMGpf62PfEj.3ktM2YXit7Wvzavwz.JnbxAkMZ.6rdZipcotN0iLQAFFln5iMXYzFrUPGPcnilerg6sUKXMli3FMyktHQp7bHRlwDok0hz6fZX6S8DiWQJO2AsOSP7aisS5+zzZrze0DUkCTvDE6i6Q10GFLhiBOtToGZA+2C9v74A+Sfv5Tru0dGcf0OzpFqCkQJ1gHzPki3CDTVmCvLvs4W.XYLGdDbuS5XCbA7JYQgqJb+v4uu78mObPQeRGZ.HAUwtts.TPg1CX1BJmU3Tr6.xCx+yymi11ROx5oVkJ9nGjOWNPMB3tjhd9Tlnv8umU8Za8Q26d2S9xyQbCHoo4oVUcIXVwhEUDkK+m8PqsBFxrOjKnso1X4t9fOLZ+s3LXAxyYETxP9OKu0jK0t8TWSZh84ttR6xTVVFK3eQLVfMneKh+CsFaAjDB99j.prWN.ks1iGiPNaeFU7bOR33c4tNRfh74zvOiPHC7zGu+NXAVhHCmCnyi3KnRwwbGxoPN.M9LGZGRPOA2yvHM3EBa3NCbwhjwRxrLgK.1iD.XIHkEPECimEZNBvJcgAXWVQ7cP0oB6tSWFWZJxHXotIjwvzReCTs1sI1hwB3xnc+IKZNnRycNn7g4ff8Tm7QOzZBYHL4i4uBMFq64S7v9jl75t3gEBTUbNBDwGZ0xka2qA8mQRGf3okfskTTvtKlwf.8EINJ60ThYiQYAE9zyfRGGNneCnllMoZnzAyYtjLDROtjbrDVzfvbTC9B3W3hkkiMCWrbzhwh9NjHdA2umxaD9rg4skl9uMZO5ojCH0kIU2IvKZ0sbc4unJuuGMDuBtC0b04tC85xYTa4TZJhD5s5yG.6WnjOFrucjmIRIfhzMwTWI1uwf.HahyyYMf2ipy.yLGS7CT64sPkJB+ChENj6.KkcWrMX9GVGK5JCpjIn.DLwun8Hj7rzn3.Kc2ByhR4dE0hgVdA0ruzRJavvLSrTWZzsbDD6tjb6uKZ+fikqZicMNVBejZo5cJIORQjjlEIKkYjPmtCnS9PgG4Bok3PNdMB3xwEvXtglXenjZPXRXFwV6XUhz9NxLu1f6DBtLpi8g8CpsJmNK5Yj1B0d.wZmEkGeGZfGDBt8.HShNNOwLRyAygbVDZrFDP4.0JTrGgPGsORAMlkIOpO2Q6RSXcVIlGeDEoMSwX+lzWlIlDeKzTD2z.zzxZDiWfftBpYWhkCXmBylg8EWihtDxwNEnEbZID+2UI9P5vhiIHsBDm8qj0NqrvIIRXygbZsp5qGt5H3agNh1oK.gii2f8OZDfXNfxh13vJv+zWd.9rIlCxvJHd5LY4V929aj+9Ka1nG4EZCmb1mZ+2dUm+z2phFUneAMImIZxUOWcjwBrbeLDgzFfGNfj0Q+8KMFzZOe9.O0fI19BubGRa7.WQJwJdvyXivT.iZuod4z9xwrNOdx4vAgPXGmIcNZsIoyISLmycR6bf8Lky47Mi6bF4vR3bhnTi2T40tl7MFFyx2r0.AuOzufpUOiad8JBsekUrk99+x26e8O+2aN2JV9Kmh89URqXmu4rUr6hppPmxVqu1baUtLgTZXahvInFC72hx4SGGoo+0DCsThXnYlZ5FCkbslZZtg+STw+15xfkm+Bni37BL2eBTAkFXAu5.KWZOhElYAeYOoiBKAOZw8cH9VBtUOBwyR.0akcZAqzl62WkZyBCrJDtDKWNqCHPEKdM1K36hHfw2EX+j1bYe1SVL98QNCY39T6fhooLsUYZuuan1FyGUzn7WI8MlnTwkKySke8jYd98oqiCyZ8pe2q1TiN2RHv18lQzRVj5TJuRAJqWY9KML25QNzQDWBNfb0UDXumhhfTGQq98oPiKPYgokI6hJK7VQm6ZCZGFDncimQK4WpLB7O2caEi2an1s9lnNpyb8Da44n9+665Mi9t9Eu7e7Gp84ytuqqX70Wya6ZVcHLAVNQz16g70mmVwDzjNjahWR7vtbY2y6O+Ey8IDDKtazWtFdCESMRc1M5c22HZz67Y.KOeyDwaSGiNo9arMm2qOVcxjW4qH315EuE5PNEpvoO1c0yV6QfNHU32uTuaRyLIOt3kubGWbxayHF8S4v0W9l5NGW9xcd+ulK.5q+2fShqmHWjL1fJ6YsVXKzgXoPf+nYiKjGvY7niEeL74Hhvm1oCIYP4zzmv9KGMyJUh5TazTe2JOCBSw9pSIawLEy+sEOU202IrcXKY.f0Uws8kJJ6Z3R3t1k2upuPt7QYTqNv+TRsO0HriZcRZe5mZU6GmrN5f96RcUouCuzoswpajRaz9i+f+yeWNQ4QVw2dPE4DqlLSKyYsImX83F9c2sYMlrFsV2y7lz8t8+J6QersO+jvuiQBbtsZFv1xBOs3CjisJab5jsszGJzbhscxWUJFWcQYbsEkw0WTFezhx3iWTF2XQY7IudFk8AD1tlLMHzlY8Z5CXwLVTmw+Ebk3BYI
      
      posted in Scripting
      ustkU
      ustk
    • RE: Peak-based Action

      @VorosMusic I would go for a global_cable instead of a timer so the callback only fires when the value changed.
      Even better, it allows you to place the logic on the DSP side so the script callback we really just fire when necessary.

      That been said this is still a lightweight job for the script, but when I can prevent a timer for running all the time, I do…

      posted in Scripting
      ustkU
      ustk
    • RE: Runtime assertion of exported FX plugin

      @David-Healey Here it is

      HiseSnippet 1379.3oc2W8taaaCDmxwro1qCXEaeZn.SezYnHvN+OYeXMI1oyXyIF0oACXnHfVhNlHRjBjTIwanui6YXOA6MX6nnrkbrcrZPawvTBRD4cGue7Nd+3otRgGUoDRjS0yGEQQNOC2aDWO73gDFG0tILO9bpRe9PhFcznHhRQ8QNNq7ZibmJkQIO+8OdDIfv8nYSgPWHXdzegExzYy18U+LKH3DhO8bVXNs25Us8D7iEAhX.KqfqihHdWSthdJwnVIL5mHpgHmuGuI0e+8ZP2cm902ciMp6sKcG5Va52eO+sZP82hR1b+s2lt6FHmmzxmoExdZhlpPNkOR3Op2PwsbqCtfoX8CnlAMP8.Oam9DQfuYKZlEc7PVfe2wAIEB4f6lExVwFx9FbGlOax7YgtuJQfalE4CfNklFdqLE7ZjGd0yAu4.ImbPprEROG2ySxhzYRL34Kvs4Zpb.AxS4ghUWTo2VFer.zfqWOjbM8DILXhE01od8W5B+YsenZwdFDy8zLA2UvOUnomwqsV0+nZE1.2ZMacwkcNqYq0pVAloh5Vl1anasN.Vgb95WQ0FKNMNrOUVaMPqD0p3QTT2M24fJ539z17nX8qIAAT4niz70UT8EjfXZMsLlBfrRxy7zzaHgeE0u1Dk5KojqgAY9X2CpvELEcoq+80p.q8dGTgdmGChqKc0mUuBr96aiOmEqKZ.ZFUWtW1pN3EIgqFHjgEXmLecKfefnUnvONf.0JYVp9s5uaAdZQZW.es+B7UiOHe0nH9Z65KvWa7A4qMd.eU48UgeeeU26WHNXfsR7dxL09RgYsmqXCgs7gLrFOod8kt2X.+DEARooY5vKloKOQrmkJJmhBdaNSeVDkuH5YTJ+E71aa2jnIF5wz4.8hnRMy.AmlzafKmrjkUvMopq0hH35oYXRAN7ww87D6lq+RE.wfoXSMLlbESOJ+0iezX6KJDeNtqgSc9XrzbvHDo9Tfwz6H+RbqACnd5L.VFexu9o4Bw7t+oV2+s3WGH5SBxBTvYB.IT6EiuHUr6D4tYJr3td9yh10STg65490JkKVsxRZZo7+4ZZonGi+5YxLpOiEaS0Z0Srv7EosVYxjWPjLBWOAaIP96RUv0ngapJY3e4v+HVjHfHy0Ylyegy3aijzHhjdtna.YTMEILJf9FXi9RW66ptT4QABuqmkpNxtaRjVqeLTQJmGed9t093c+wxtk.W3jViG9nU1c.mR02JjWmjISeGnDrmq5P7jhFW1TEMVxgAAhaOVDFwRYLSbE7cGmSXAoey.UpRjrJt95vOVa5JBFEMTvYdlblcEnvYXNmFbXnHFvhC1oD.nL53jbPO1uSMhL48dwJ3hM+y38.iS3TfxMmSE9vaqdBwCBMi5RzCMT6diImLW9OoRY1cT1QMC3seJ07zyDl6RjfbnYSkcea77XlIKBgMVnItZ9ZLmULxsA1DH9DCFvXhuOZJvVEGB+ecy7yCMVKVhuJkCalZxwi.piNLdRqRlUxjO5Ptax3FvXCpVEam5vXs..yDdxbMD.CVjKVM+RrL2A427r4stCVB9jqcRN4TE2joHvIYeTS5.RbfNcEfc5TqcRiKbZR4iBM0PPYSHqs+3.3D7ZlZLXmZClPkYFATMkLaomgaqtvH0iDL1wvYzOksM8f8jrx+u6I4MhXMieUGhVxtCRav211CNm3MlmPMlhHcb8I7B.oPxf+AdRE1vL1IUXiwBQ1E2l+9r3vPCSxkdVhcygrmlLCDD3IU2UrbMtMP2XOfkkXCglLtzya5kZFC23wZ3lOVC25wZ31OVC24wZ3tOVC2a4FZ5ALkuzTmB2b0sUxAKGmVbK6ETdf9Wn6hrpD
      

      Screenshot 2026-04-25 at 00.59.27.png

      AI fixed it by adding a samplerate > 0 safety. This is confirmed working in main project, bt the same assertion fired this time for master FXs. So I have made the same exact safety and all is good (for this assertion at least...)

      Now a new one with MPE connection... Not done yet but at least I progressed!

      posted in Bug Reports
      ustkU
      ustk
    • RE: Runtime assertion of exported FX plugin

      @David-Healey Oh wait! Me saying this and instantly I could reproduce it with a single module! A Script Time Variant Modulator (in the Global Modulator Container) with just a Math.add node is triggering the assertion.

      posted in Bug Reports
      ustkU
      ustk
    • RE: Runtime assertion of exported FX plugin

      @David-Healey Thanks Dave. I afraid I can’t. There seems to be other assertions popping out if I try to either remove elements from main project, or import them into a new one.

      The project is quite complex and it’s hard to isolate one element to reproduce the issue in a minimal snippet (as I said, either by trimming down main project or creating a minimal one)

      I know assertions can be stepped over to see the behaviour by carrying on the program execution but the plugin eventually crashes anyway

      posted in Bug Reports
      ustkU
      ustk
    • RE: Runtime assertion of exported FX plugin

      @Christoph-Hart Alright so I'm working on this bug for days without making any significant step... Using Claude all along to help, but it doesn't really help... Once saying it's definitely not in the HardcodedFX but in the GlobalModulators, then the exact opposite.
      Trying to track the bug down manually is beyond my skills.

      As I said, the plugin compiles fine, it's at runtime that it crashes because of a samplerate set to -1. It doesn't seem to come from my scripts or modules, but more from Hise itself (at least for what I can see)

      This is the final stage before plugin release so I definitely need help because I can't go further by myself...

      @Christoph-Hart do you think I can send the project to you?

      posted in Bug Reports
      ustkU
      ustk
    • RE: ScriptNode - DC. Offset

      @Jeetender Hise HPFs don't go below 20Hz (unless I'm wrong, even if you set the parameter to 5Hz)

      But I agree anywhere in the 5-10Hz range is better (the lower you go, the longer the delay response so it's not alway good to go below that, depends on your design)
      So if you want to go below 20Hz, you need to wrap your own C++ custom filter (or Faust or other maybe?)

      posted in General Questions
      ustkU
      ustk
    • RE: ScriptNode - DC. Offset

      @Jeetender Then your problem might be somewhere else. By definition the DC at the output of any HPF is -inf.
      It's right that it can bring artefacts in some cases that are essentially due to its response time, but it definitely kill DC.

      posted in General Questions
      ustkU
      ustk
    • RE: ScriptNode - DC. Offset

      @Jeetender Not quite, more the opposite in fact since in rescales a -1 to 1 audio signal to a 0 to 1 modulation signal.

      To remove DC offset you need a HPF

      posted in General Questions
      ustkU
      ustk