• 1 Votes
    1 Posts
    55 Views
    No one has replied
  • 0 Votes
    7 Posts
    294 Views
    S

    @Kalliopei In this case you could get the Display Buffer Source of the network and then the Index of each Peak Node and then do whatever you want with the value you get. You can do something like this:

    CODE:

    //Get the FX Display Source Reference const var dp = Synth.getDisplayBufferSource("Comp"); // Get the Displaybuffers const var input = dp.getDisplayBuffer(0); const var output = dp.getDisplayBuffer(1); input.setRingBufferProperties({ "BufferLength": 1024, "NumChannels": 1 }); output.setRingBufferProperties({ "BufferLength": 1024, "NumChannels": 1 }); const var inBuffer = input.getReadBuffer(); const var outBuffer = output.getReadBuffer(); const var inMeter = Content.getComponent("inMeter"); const var outMeter = Content.getComponent("outMeter"); const var subMeter = Content.getComponent("subMeter"); //Timer Object const var reductionTimer = Engine.createTimerObject(); reductionTimer.setTimerCallback(function() { //Befor Comp inMeter.setValue(Engine.getDecibelsForGainFactor(inBuffer.getMagnitude(0, inBuffer.length))); //After comp outMeter.setValue(Engine.getDecibelsForGainFactor(outBuffer.getMagnitude(0, outBuffer.length))); //Difference subMeter.setValue(Engine.getDecibelsForGainFactor( (inBuffer.getMagnitude(0, inBuffer.length)) - (outBuffer.getMagnitude(0, outBuffer.length)) )); }); // Start the timer with ~30Hz. reductionTimer.startTimer(30);

    SNIPPET:

    HiseSnippet 2083.3oc2Y07aabbEeVIsxgzoo0EIH43BgBT5BWYRZEakzFHpOsEpoDgnhSxImQ6NK4Ts6LK1cVIwDjhbrG60zKM+Izq8l+CHG5GG6k9mfu1Ks88lYWxcIYjoHbsRhBP.m27dy7998aV2IV5xRRjwDqpGOHhQrdc6tCDp9a2mxEj82gX8F1soIJVrigzVChnIILOhk0hODIXUYIh9umuwVz.pvkMhDg7DI2k8XdHWMhZmV+FdPvdTO1w7vBbuVq8ckhskAxTPeVztNIh5dJsG6.Jx1B1jGQS5Sr9E1dMVqg+5tz6udi0Z551b8Gz78dfKi56ytei28Aqst+Z9T25MIVKuqGWIi6pnJVBbnaI8Fzsu7bg4BdBOgeR.CWzfzEtYCYx184AdcxcNIDhkcmQtpEMtp2ztM2iOj9HW1OQugyHIJ5zrV3xToFWAUxpfJsjQktkcW2XdjZzNn9bS68EPDDbIrRphgWxBw11aKANDpUComx1KFVLThZ2ud863.+ua+qpV8t28gLkipOyYuO1YGdRT.cfSWHd4xbNh4yhYP7uJDESTNmQic7hb9.GcB0p8XpLA1JEhSwFopsx1xvnULmsS9gmw3IZFSJbdbQTpBNRunINuZnBNhSYp5am0F38oOqUSXpi3hdlM.2VDKVwYI097pNNqXn9Xlnmp+JuuSi5MW6NH8CRCgnsPvBRPxU+B77L23KwCrnYaDDLGiVCVzQLpWl4LtgOj4LUZBtKczsYJMy4o..2XLQJfE0VIa+UF+NtboxYnrXIomb4hkyPV9.1dH14vS9sLWUgiIl4k5p3RgY+OvYWQOtfspaLCJozDMxnM0xbigG8O1lFDbBzdolepPucsaW8yqV4t2cKluDZ1AJU0JYFOJzSnAorZY2DlPwb4m.gq8jwXav8ntPMcs7.ExQaZOAWk5wpA0OC2HPG6u8sAUqBdca5iNDW80k60l86aXvdhKbzNitwJlqbGtedkZkbO9rek3YbErSmeoyURKwi2npULUAPaAnUYrowfRGwOmq5676tW8G8YqNQ3EYU+yZ2CZHjGbcjhCjJ1gYQ4peQUmw2x2ep6gIpwxf.rvYJaatpKQvZhzvSXw2AxbAu6PFgN1kGCr7rMFv0T2TfQoXevedXDKa8dx.Or8N96IGZPxJ7fe8g6uCUQw4HYzF0rBnsC6LXxsYpRE6cXImpjQvoNrZEPFnz69FYyb5Fv8XwDtGJPVkC4hhi2GTbQhZ.ZdUseBdmtz.RH2yKf0QlvQWHxqkl2lOCveD0k+YZrB+wuB+6urQXQrGexyBoWTD2QBjUwAJ11NdaQRnmw1WzIlAY43fuy4dJ.Hgs0uFXsOi2quBWUeABIT5kYw5jezgMCFbU67Z2hV7m7CZKNu0QAK9K8+9oEOIPJ.BmzKMfpJiqC6ClsAp9EASg.lDfYMnHh3q.Xu5WJXuYUEukcGtxs+z0wElhNB0+++PGyfH+ir2E5t6pFofKYu2GOu3gqO63gsM2e0rDW3NwKeYaL2tz0CHuJgMLASRfbDRF3Xqeu8nt5QwrHZL6XYGf+ZIzvn.1QfZeGmSBjtmhouSNJHxnUagbTyMCk27LwX4WRObfbDzrBfn1lph00OfOvfFOGCZtOHaccbMlpzkI7zK9uveYa1.WaksYi7MKLm4.l5bY7o5HT1uIV2.CGutch1I+T+KZP1LHPdNFd3YItPvQSqiLXPTeof6hjLbjqoaFJSEpb0Edd3wTd.lo2MMAlH5cnnKvr9MoVKBMgRzG7MrquJ7ePl+A5NAKaf1LnCE6XbKabHKjuBvIbGl2VRWKk.oebZoswSM+YrFGGn0g5FpviXsVrvfVSVKtBpIWvbQ6mLrcoFRFZO5yDYewLU1jNGwnmRJo82Dz9X1p5MlTMyj3EnfKUTAIi5kbLMF.vYPQfo9WjCfXrJnwofVlvicQ9ksKje6AfTzhmmvzgFCpnRKOojQhfiKaj+XauABZH2MYU2IJnyLT8FWiFJZTuPC0xd3JHsrMWjEvGMyqM8hwnAUZEFUBK+ZbTY2SYma7QYTeVu+7a0xjPcbeXpX+9.vPRgyp0666+ye1NLeZZfZh6fb4JF3sFWwZIaMSJ1mt1e3etApXul8lJE7DLxDm8zUp8a8JPopXeDKfQSXE0p24O8U+6Or0bpUOeiIigslMs5q+G+m+tVqtg8QXhYQc5K+aey2buuEc54ab08TfRMlNoOnIzIMUyWUpKfFzzgbFifkqrugtYTiqR+qbQtFqqsloFXkVrkTdZHUOBbtd0UQfUusYyaZ+Q.dW8WVSOd5szq8kwgNOjAStPTgMtjOV6ecV+XsQy7Gq8PWEnBGGSEIQxDViRcrXg7ig2TjTh5XRzbpRzrbZkJUT9nMjJwE5J1CbEE360ZkSrYQhcnhRGFrtzI0lW3EG+qM1UPADVcYfk6cXhK3XniUXzIMHg8Q3SOZTTvQjaVj7inwdPLzsDb7EKCyaoYClW4WlTf+o.Td4qguk8Kmm2bM9BrROunRtN1ki8Q1UbFK.Ji053O0Nq4WN0x0gskBYNb1QQ8iX.V7d8Xk6xNMCJal4PJuYq7AVCI8yZ8X.8JMts4ctyiu3p+O8vTiWuS1HdGr4gy2ee47h+f9kyyd0GzO761Qw21F5K2zQGJctdhkuJdc8qh6Hj5FKepq4iRfE8U0T.6VnwhUwtMt1oA4rwQ4EBiLdpqa4iZBAaNuBdu4Uv0lWAe24Uv6OuB9f4Uv0mWAeuqpfUyS.p+hkDAQrYpRFZJGAjUc10fd1x.pRWYR9eO6K.TA
  • Change the processing order within a network

    General Questions
    3
    0 Votes
    3 Posts
    203 Views
    ustkU

    @Christoph-Hart I was afraid of this but in the end yes, I guess I could. The blocks should just need a global cable so I can have a unique sender network for all the cables and then make a module per FX receiver... And it'd probably simplify things a lot instead of having just one giant blob... Should have just have thought about that earlier! ☺

  • 0 Votes
    3 Posts
    165 Views
    voxuer1V

    Okay, thanks for your quick answer. I think this works nowBildschirmfoto 2026-08-11 um 14.51.44.png

  • How do I add gain?

    ScriptNode
    5
    0 Votes
    5 Posts
    322 Views
    LillieL

    Thank you for helping.

  • Latest version of HISE breaks existing presets....

    General Questions
    74
    0 Votes
    74 Posts
    9k Views
    LindonL

    @dannytaurus said in Latest version of HISE breaks existing presets....:

    @Christoph-Hart Here's what 'my' Claude says:

    The pattern so far

    Since a92a701de (the unified automation base class), every automation actor - host parameter, macro, MIDI automation, UI widget, script, preset restore - is both a reader and a writer of shared values, connected through the dispatch library. The regressions since then have all been the same bug wearing different hats: a listener can't tell an echo of its own write from a real change, so it feeds the value back around the loop. Each fix so far suppresses one specific edge:

    633626eeb - gate refreshParameterValue() on enablePluginParameterUpdate, and switch MIDI automation's setAttribute from async to sync notification e1fb54695 - carve the backend macro-to-parameter-slot routing out behind HISE_MACROS_ARE_PLUGIN_PARAMETERS

    Alongside the pre-existing guards (recursive, sendToHost per parameter, deferNotifyHostFlag, the exclusive-mode conditionals in loadUserPresetInternal()), that's now seven or so overlapping mechanisms all answering the same question by inference: "is this change an echo?"

    Why I think flags can't fully close this

    Two structural limits:

    The global flag suppresses the wrong scope. enablePluginParameterUpdate is one boolean for all parameters. While parameter A's update is dispatching (flag false), a legitimate concurrent change to parameter B hits the early return in refreshParameterValue() and is silently dropped -the internal value updates but the host never hears it. I suspect this is exactly the DAW-project-vs-internal-preset drift you were hypothesizing about at the end of the thread. The guard isn't just failing to fix that bug, it's a source of it. Scoped guards can't survive deferred dispatch. A ScopedValueSetter protects a call stack, but this system defers across threads by design. By the time an async-queued listener runs, the guard is long restored and the echo sails through. That's why 633626eeb had to change MIDI automation to sync notification - to drag the callback inside the guard's scope. Changing threading semantics to make a boolean reachable feels like the approach hitting its ceiling.

    Proposal: make provenance explicit

    The class structure from the rewrite is good - I'd keep all of it. The change is to what a notification is: value plus origin, instead of value alone.

    Add a small source token (Host, Macro, MidiAutomation, UI, Script, PresetRestore) to SlotSender::sendChangeMessage() and the listener callbacks, threaded through CustomAutomationData::call(). Because the token travels with the queued message, it survives deferral and thread hops - the thing no scoped flag can do. Each writer passes its own token and ignores incoming messages carrying it. MacroPluginParameter::setValue() writes as Host and skips Host-tagged notifications; same pattern in HisePluginParameterBase, MidiControllerAutomationHandler, CustomAutomationParameter. recursive, sendToHost and the global enablePluginParameterUpdate then become deletable. (deferNotifyHostFlag can stay - batching host notifications is an optimization, not a correctness guard.) Preset restore becomes a first-class source: "macros must not clobber freshly restored widget values" becomes a one-line filter rule instead of an ordering convention plus exclusive-mode conditionals, and the MIDI sync/async choice stops mattering for correctness.

    For precedent: JUCE's own ParameterAttachment solves the identical loop the same way - each attachment filters its own echoes at the attachment point.

    Hmm, I must give this Claude malarky a bit of a go......

  • Custom peak meter doesn't work in a DAW

    General Questions
    10
    0 Votes
    10 Posts
    370 Views
    David HealeyD

    @Kalliopei why not use a peak meter floating tile instead of a panel?

  • Audio Waveform/Convolution - Knob for Range

    Scripting
    2
    0 Votes
    2 Posts
    163 Views
    ulrikU

    @svkpowa

    HiseSnippet 2507.3oc2Yz0aabb7NKcolzwINAoEsus3PPAUjDIOY4OZbsMknjhYsjEgnhcLTDbVd2RxE53sr2cjRBIFv8kh9yx+DBP+Ez+A4k9r6L6dGu8DonkUabaJg+f678L6ryL6xlgBWVTjHzvr39mNfYX9gVsNMHtW8dTdfQiMLLutUcQvHg+vXtHvX8SGPihXdFlly8UHIlEl2P94md35TeZfKKCjgwSEbW117973LnMq8Xtu+VTO1979ZTuZsFthf5BewPvblyppw.p6QztrmPQxthkwinQ8LL+BKWuUcW081sW0gR6bGm12l09tN2wgcW2a48Gbcot2psqyMuI0v7C1ziGKBaESiYQFlyutv6zV8DGGnTvS4Q719LbgiQKPyJvaI78PWDgZTuG22qYZbJxvvzpYVTaNUT6yr1g6wGCOK5cCIBRFG5APyqj27lKm44nadU0LuoXRlZlz7JS5SrZ4FxGDmgAsmqY0HHlE1gB6S5lhhViq7Oja2wrf3x8oGw1JDVLliR2tZ0kHv+rv8JVD1qhhIM1ibehLiobWV7ZC83hVz9C7YiUaI6F6YCLnn+YzQrsDg8AtR0CvWcQ+Ah.XQI6TBryzwHZHABQgwMC7OW9RIHSUHaaF3MKlTnkpRio8nAcY.7HfuCdaZaohjo+Y1Z7PPkgrtjHYvZaVP23df5pBfqTgrdnf54Rif3Nwi0gGvwCeZlXHi5IC1PlFXrQqWGXdyft7.VYW.YLSSDk9dvFs4d1eIwdRFsQOvlF1MBvefsapsZuDwlMB+xgRJhoJJNr3KWPYkz3XpaORrfHoif4cEmTAkUzsuXbXXGwvH1lHOQkNHaG+PPi084tGEsD4QhQfu+6IaDR6BdUWzZj6SSS9ddayAGM.bUajPjFhqBOrtyv.WL9UZrusjxhWn32Wr.uCojbUYdDpscC7OcghE.LER2kKGwheJ0eHKSB31pLOQRSoE.SSi9P1.n...Fgp1xmkL.JRjPBs57+xhiC3WnzBUtz6TBQJKmIUXP5QXLlxC7XmfeYD5Du64Do5HW1fO6jMnwzR1xczs39rxIGa.Mc.V3.yIplayOSPSca2WhVeWWtKChMR.hePHFWs8gXAjUQBXGS5.pEkdghENyowF6gaQ6Kho9JXMBTE2hj6LEKVXbohCpdHtCWxtOEiR5BZYGYAyInUkMLIJUhqmREZnbNWMjWDNZRelTooH41Wwh7.eHgYbniHBRSowskPgu9QHYhfL3lkgCVGOvNA2hNnJgfHfPE2jpujD4RI0lwHrxVwS.uDLi2VEWTbIlScpueaXHgRSXnmm+nT5L8F8S8oQaI1kOG+YLCYtRp7lkGk1JX59SNCU4Mv4qB2ehOjG+jcWmzD5Ce1OIEFdbPaDa1AhtR2DqWPAvw83Qnkssvk5utXXfWjJoDIPzoyyAZVopLWrqxTwAzJkxVI61cUfrkkv5VFNO4uGJGl2dL2XHD4yJc.L3.JrkHzCV4P7eu4gKi.fu6TcgYHddLqedE3EROdRErRhFVbEkNVd0pZpY4UAEAXbRUEZk6GxSXdUEoUVY4UWDIuBP5cg+.LsCElsoYiuvo7sx7uLNkpxYk2N+qn3O0AVym2Mf4sO6jXMmMFVByTPvv0p4hUn8a6BINg.ShA1JaIKfo9unxG2CBXmmhFPCiXv3bi0X5IOPiWf3Wp9sSxqmV9nJcbm5qOY9XtTRIEY4jY8iwzti0xKeF2KtWRwvrd0t3bBLOxO7CpFMnq1Mos8DTAvkHJHkoGzwor73olVRBDXOXoELJEWF0Rb3eyj+Ij+Hb1.EegBJHQ83ch2.lfm7PPFKeeH4tJ4KIiVd46cVVe.43kmEyKNl4EWbrtk1z3x6xbqPUQ0kHYoQXQ3ExA.phsfZDCkHzax.iXHE94LIjJzgAELFCwkIM1rsfug7EIVsFr6MSK+raJKJ0y+dtyKk4mcDgjRCH7frQ5koXCTk1ghshiSK4hCJZuluOIC.JLIoMwgwfJNwPyjRxxoiQIGkcbYaUdMd5nnVOmmHhY6lLGBfgbVTc5LUbI098gwalFZ7xygyhwRAC62lEp2ZCIDtfX9acZc925T+RwtplXZDJBZ.Sft6.Vv4cUYijNe3MTSrJ3N4wx6m9qStepbzO7N.vtUeCNbazhVoWIvPZ55On.lmXX9sVU95HVXTkg9g7iZK7XAU1YXD2sxi3QrJOpQqMgNh69m1r99spz5IMZ1bS3KqAW1MNpx3YMipvCeQDGaj+hPHcMrc4ioiLBGOVODaLeEnzvjgzw0W4aMML95F3XqodE3ffSOfEFyw3o4FrQbWl5V3Er1fEcTrX.D1G262v7W8NDCNQ+IRNMawmW6Xrz3X.+3eoVOFuaOsmZ440FOCeCPnya0XObOYrYbMkYb8zmJfFv7STe5PM5peCM0W66Ni5e0ASn9Mpk+Hlg4Gak6HlQ5rC.OevCdvCdCxUVCeD5adya9qHT3Hepfuwq+m0vFkPXTYl47oO777oqZoloRyidUm+a6QVP1zULTdiEZfF80dTMx2US20tZdWaaZ6DW6izg3nuk0PyAec2y3fFAS3fOHIx96rZg02IxB7vs45C2GmbBTY2fAEOnx5ClyYL4yNcCqcDdC8ow4eEL7sBSPb1mQDedofHd7o5uk3+wdZrKpI9IVM4wt8ltMdkoXivo+eNrwjGT75Va1oCLbalANu0Vey6gWO7SS0u9q9pzOT7PW+aDdZ9W.94u9Yr37fLL1FLt.2bwsF8GLzOJ4Vo5a5IlQifACi0gC05WGNb0MDG5e+d3870kWSXjTlOMmNdDutlL9a+8Za.WXCtwuNMas09IEoS.8Y0v1Bpma9m0VLxy3pdKIUAv1J9Bwfb8cP.ZscLm6Bug6L67M0rLcggvB4n5exv9sfpStL7Q0f5kQRUh8uUqqpJTYXzhE3IW.EwdSBRGbsYBRmTj54zejJLeMqVv.TxGKVlQ8ajqkOIL4qvmwAOQ5Liehge7h9SLL3B+SLrKb+wQr8gN7QCDQ4DbKVe99Pk2HcfPNwVgr+7dXIBc30E3UqlBpe5gaAN4T4oEMdXnrVyZ8gL63b0VlaV+xENWxe4h4+ete4heAzAIW4wBo1XK4g5MCFw7gQ+j13mBy50gNzONEZ9b4cDAhA8DAbW8M58XvYvtcYg519Tcn0vGN8H8pU6w7YT8j1Ou11PxFMDhSrKYrv4c9GZZp6W+VKk4RvCfje414et+uty+6kFAuOzQepan3EtpqXh4oWUBA76.Y27BV6fqINSdix9PUtW35lWTSv3JWVFu4kkwUurLdqKKi29xx3ctrLd22NiXSn0FFK5qNZZXrSyMkW91zby.7dHxSDF+KfGvTIE

    convolution.gif

  • 0 Votes
    7 Posts
    376 Views
    lalalandsynthL

    @dannytaurus Yes, I have concerns , but its absolutely amazing for doing dynamic graphics.

  • Need help for Export on Mac

    General Questions
    5
    0 Votes
    5 Posts
    329 Views
    K

    @LUIS29

    I can give the mac compiling a go and try if it compiles ok.
    No guarantees. You need to codesign it afterwards thou on every mac machine it is running.
    it's not too hard, just running some code through terminal on mac.

  • 1 Votes
    12 Posts
    705 Views
  • 9 Votes
    3 Posts
    657 Views
    observantsoundO

    @CyberGen I was just going to make a similar post.
    My main wish is to make the right click option "Fold All" assignable as a shortcut.
    Many of the other right click options are there already.

  • Hise general and compiler settings not saving

    General Questions
    11
    0 Votes
    11 Posts
    1k Views
    K

    @Christoph-Hart
    Yes, you're quite right, that probably is the real cause.
    Still a bit weird, since an older install worked as should.
    Although it was the one with an .pkg, or was it .dmg, installer from the website,
    so that might have to do with it as well.
    And as the admin and the sole user of the machine, the writing rights should've been ok.

  • "An error again :("

    General Questions
    2
    0 Votes
    2 Posts
    148 Views
    David HealeyD

    You just need to run a command to tell the system where xcode is.

    Make sure your xcode app is in /Applications (not the user folder, the system one). Then run the command

    sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  • Flex Ahdsr laf improvements

    General Questions
    1
    5 Votes
    1 Posts
    92 Views
    No one has replied
  • Flex Envelope Visual Bug

    Bug Reports
    1
    0 Votes
    1 Posts
    83 Views
    No one has replied
  • where do I find the 4.9.2 hise version?

    General Questions
    13
    0 Votes
    13 Posts
    466 Views
    C

    @Christoph-Hart haha thanks man! i dont know what to say. im too new at this stuff, its all hieroglyphes for me.

  • Oriental Drummer

    General Questions
    10
    4 Votes
    10 Posts
    2k Views
    A

    @combamusic Thank you!

  • Global Cables Don't Work when compiled

    Solved Bug Reports
    32
    2 Votes
    32 Posts
    9k Views
    ustkU

    @Christoph-Hart Nice one! It seems to work but I can't fully confirm at the moment because something in my network makes a hard crash as soon it loads in a HCFX...
    But it is definitely not the C++ node and compiling it with a fresh network removes the global cable not found warning 👍

  • Check Latency broken on latest develop build?

    Bug Reports
    23
    0 Votes
    23 Posts
    7k Views
    dannytaurusD

    @ustk Dug into this and found the root cause. Two PRs are up that fix it:

    https://github.com/christophhart/HISE/pull/1013 https://github.com/christophhart/HISE/pull/1014

    What broke: since e429f19d1 (Jan 11) the IDE builds with a 16-channel configuration, which disables FORCE_INPUT_CHANNELS - and with it, the path that carries the input buffer into the signal chain. The latency check injects its test impulse into that buffer, so the impulse never came back: no result popup until you play a note, and then the number is just the elapsed time. a6c5d9dd7 fixed an include-order problem in the same area but the input path is still compiled out in the stock build, which is why the tool stayed broken. PR #1013 keeps the input alive during a measurement (no-op the rest of the time, backend only).

    Second problem: even with the signal path restored, the old single-sample impulse can't survive effects that smear transients. Something like pitch_shift spreads those two samples over its whole analysis window and the output peak lands ~50x below the detection threshold, so the check hangs forever. Following @ustk's suggestion, PR #1014 swaps the impulse for a 20ms sine burst at 1kHz and reports the onset (first threshold crossing) instead of the peak. It also adds a 2 second timeout with an explicit "no signal detected" error instead of waiting indefinitely.

    Test results with both fixes (48kHz, stock standalone build):

    fully wet 333ms delay: 16000 samples, exact and repeatable convolution reverb: deterministic result that measures the onset of your IR (the convolver head itself is zero latency, so silence at the start of the IR file is what you're seeing) pitch_shift: now reports (~4200 samples); the remaining +-250 sample spread between runs is the stretcher's own timing indeterminacy, not the measurement

    One side discovery while testing: wrapping pitch_shift in an oversample4 node cuts its real-world latency roughly 4x (~88ms down to ~23ms), because the stretcher window is sized in samples, not milliseconds. Costs you the CPU of running it at 4x rate, but useful if the latency matters.