HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. aaronventure
    A
    • Profile
    • Following 0
    • Followers 3
    • Topics 166
    • Posts 1,701
    • Groups 1

    aaronventure

    @aaronventure

    Beta Testers

    718
    Reputation
    187
    Profile views
    1.7k
    Posts
    3
    Followers
    0
    Following
    Joined
    Last Online

    aaronventure Unfollow Follow
    Beta Testers

    Best posts made by aaronventure

    • Visage: Open Source C++ Graphics Library

      Found this on the Audio Programmer YouTube channel. Open and MIT-licensed. @Christoph-Hart I remember you saying that the new animation framework would be one of the reasons to upgrade to JUCE 8. Would this serve as an alternative instead?

      The examples are really cool, there are some great things in there.

      Link Preview Image
      GitHub - VitalAudio/visage: C++ UI library meets creative coding

      C++ UI library meets creative coding. Contribute to VitalAudio/visage development by creating an account on GitHub.

      favicon

      GitHub (github.com)

      posted in General Questions
      A
      aaronventure
    • RE: The big bug tier list

      @DanH said in The big bug tier list:

      but I have to re-set my midi controller in the Hise settings every time I open Hise!

      this happens on crashes too, but I've been using this for a long time now and completely forgot that this is still actually an issue

      https://forum.hise.audio//post/80689

      defo not a long term solution but might help your sanity until it gets fixed. the fact that I can hardcode it like that with a few lines of code and it remains consistent through everything means it should not be that hard of a fix so we never ever have to go back and change it

      There we go, I made an issue for this

      Link Preview Image
      [UX] HISE sometimes resets audio device and midi device settings · Issue #716 · christophhart/HISE

      This happens on crashes and some other instances. I made a workaround here https://forum.hise.audio//post/80689 and forgot about this, but it is a major issue. HISE should never manually reset the selection of an audio device or a MIDI d...

      favicon

      GitHub (github.com)

      posted in Bug Reports
      A
      aaronventure
    • Snippet/Network: AHDSR Envelope with Curves

      Lots of talk about this, so I created it in ScriptNode for everyone to use. Made possible by the relatively new compare node!

      18f950d4-ec12-4b7b-843c-36cbcbcef01a-image.png

      The network is fully commented so you can understand how or why it works. The parameters are ready for usage from the interface script.

      How to Use

      1. Add the .xml file to your project/DSPNetworks/Networks directory
      2. Restart HISE
      3. Add the Script Envelope Modulator to your sound generator's GainModulation section and load the network from the dropdown menu.
        c26bb289-c5dc-49b3-a37a-ec276dd2a4ab-image.png

      Download

      Download the file here:
      AHDSREnvelopeWithCurveControl.xml

      Here's a snippet for a quick preview.

      HiseSnippet 3228.3oc6bs0ababElTRypK1oNoNso8oNE8AmT3Hrb2U2PeH1RxWDZjsfVE6hhBHLhb1cmJtbVPNTWRQ+Mz+O8o7Sn+D5Og9beo8LWHWNq4dUqhsakBPr3b8Lm4aNmuygC0QwbeZRBO1wcsSttG0w89nlWGI5rWGBKx4f8cb+InCIIBZLVWztW2ijjPCbbcW7ExBbWcIG0O+quYWRHIxm1uHGm2vY9zuk0kI5W5QO42yBCeNIfdBqagV23IG3yi1iGxSA4YQTUmdD+yIsouhHa1BHmWRR5339aQ02oUsfFzMZrYiy1XyfMp2nVq.5Va4uQvlar4VAPod6Teq5NtUdV.SviaJHBZBLn6xCttYG9kQ5I3MrD1YgT4CdNMgYVWrydcXgAGkobRbbbQG0WUsnVU84nCYAr7x6qx9TUE398nnRycgQIRdSgH4VPjVRKReFpoeLqmneMR44dnChfcvVDXuonnnaqi6Of1iCMHRrdWx4zmGCOj2gubypUeLF9ee0uqUZjufwiv7nWwEzWG8ke0Z+k0Vcs+5Z3AqpUqRqSNMw7vPZboUKgCwipieYTZ2ynwOFeAILkl2PX4aqSqLY5Te8ptPC4QGDwDutG077y4gARck72e2c.GiZC9su6f8IBhbSwTFztdzXASJNt6Su.NFn2hVEsOM4bAuGbP3c1+.jCOHMjHrgSxCZlJ.8g0dnbiJJgItt3AwAwXKMb8Q0B5iwrZmPw8yPGwD9cJWdWnD4EzZ21xq4D6mfdVqVTeQegcIzy+Ci734bWT9BsnbOzaIWPU1ZUBxOS8bKdbW7KnQzXoN0aXVaexudu+wjZss2Das809BPDNIlDkzimP8JNxMocYmvinIVkNPOpUZOrJcepHMxdn0EY0Jop34fpnP6V4IYEVqXgGQhrFL3YqQ5P1U8e7e9MOKh.adMovJO30I9fhQpmKdz4nzvD5aYAhNdE6X+hqUr3WRhCf8PeKv7hSLBpnwH6y3EZeIV9qba4L5GUCE2b6ZKNYh6X7ctrVF+kFemOK5BZHX7NWhUB6CQO8k627X7kLQG7dowW.yeQ48PdDuWGdDyBKbLUDyZ2lZAwJcok4K9wnowuGZNwknfmrWQEWxiOWojL+ti6JRUvuRqBxzOuEzDJEgQHcdZXH+xi3gWmoGTh.MNQt25tLp55v+I4vcBgEZ1i.YcOd2tvTmnauZPfh5wLfBP2pejBHmnHZ3S6xSAI0E4tfzLSZB3sN30QMgVnLGJQ0uhG.+1xOm3CZmqOh.FYA+RR+8.hiFuteNHbbKp96wR4UyD82XvBYcB+1bPANqexU1QjXn8.QJyZSJUYFbQtNJ0tZsqH25tnrdodOS70zuaIGjqN8rPt+4NVqneQgUjUqJSnGXfxmYLvu+bJNIMlxDOJAmP51Kj90De+TvIDc8RVIUKYk7NReEMyyDlb3NkDaK5eNhZTdq2uEkI1EGgbY9OgNoCEmMB3NzXJljJ3cAHiOIL7ZbLElsDrfiO7f8O.yh5kJvIb7kTbZBEyDXvUKV.iRub.KtsZ8VxZCUfMm11g7I376BxE4CPuJsaAMzajGRyvmNMuTxF5DRbapPodJVfgvXDUcfOYfl+N0JOJj8nQQe.nspff4tmStHnK6EvpQcv9c6vxpN3ME83mfTpvSE71sACJVcbYH7BnNEZF1otJiI79rjdgjq2ME3boM5ZUhT6EEPuRRB6q8bdFXgK.7pn5s77fSAUJzl7mfI7PVTlRVZUw4PxUlmWA4UsprnlBZulruW4Yr55xBk+30XmpddaBFCOmdoFPpaP8pdUqCMXmc1twNaU0SYaXEzSEBHDzrczJvfCC89zVjzPgcgNuGjuUQGSCojD5zJfUFt.hPdVRm9Y4rYvGV8ydlzkUbhPiahjC7mXTyJCnSv32mwP9oJmB1bVEEwOsKv4w1hyCKXrLqAkYvoe2yM27Un2RwA7nGIvWRhDZSJfoEiucLXp.KOPkLw1EWFo8.MFGTkIeqf.u8sgQLW7tDsGXtSPUlyRXsiHgIJyafMvN3DYqUzVXQ3t7.0HiijBkwfnOIBLPFvtfEjpLd1KLssbv5BEKWlvv5yiiAiBXvBaGcmK0P4hizP48QGj7FYsfM5r8YEejLUzRETQqgxD1A8bzWKk2hxUTlSuSoa2JZvtxjp0LeOXlioqqpnrIzzmwLcKUB7snY9BFcWA0kE0kb0fla0pto1bqaQys1VWWbxrdspx5ks4qJx1XavR1s5N5c7inwLdfJzS6CyKKGKXjdp1ucd3DSq0i6g9VNuGblHV3XU4bw1jwn2fikmsfCd5KB7KZMJeOzBJ8oJPLvSbcSskCfMUNN.bYHpEJEQsJLuc6QhoC55+aosDCw0OBQBBFBDzBDUYZUtYCy.P.Kk8zuksprUrtocuEbUAiM4J6wtLnl2v82Vp299SkwY8ft+qs8NU2rw10Zrw1ddM1rlAaJa13vlyzgJXngC3SmBblHUrFBBXjDKCFdBlrhmwJB8blZ2NvIVqvTx7jTeFc1TA8RdXvD6pYQK9JYmIKgMfzDQV0kyVIq14mQBczA0lhnCdfUzA0FR3AC0iyDBIU1nlu1JVFcLqcmozwwHA5aMDf98Q6o1nTITZJg5VDG06MSEwjrNkCH9aJzJtWGH1AE8OdDP6KQ5CE9UeMSRM6ISiXIX9Evg.7AQXYr2E5OT0eNMQfImwgXrk8TNa5fxCn.+CVTaM0T832R8v9Tex05QnTljSAMoQh9VQ6io1czk9vgtjVvGBBevcSKj9OO2nnU5HJCzO33jC9+6nuKRvBUnvBvXE5L4w8Av.ZVkznN7TnQmQweOMluNdW.3JSgTd6jQCAQGRSTwGxiOGGxNWVOQ73r7MIarNGTZwQF8XWRjNbKyDI6fNAu3zbArnrUdDWS94j0x7U3UN6ugBwmIO6Yl8muFrMGm8tE31kaoXLR7sOIjFyHIjGhzVUIQA3lfIYY6lTFIHqPuyAJy.kjB8ddyIo9LyIw6NNI2xbRpOKbRpOGyVxplvkqcW5R9X1+uD3DATMkSZIIvUa8IqAk+Fi5WeNV5XzKnBbaYpOaEy6hC1U5B9Lk24.LIAaxY.3wtCyuijTqz8aqPNONixpwj5HHsN5zeVQ9RvySv8pnfypotSGN2XLd+TdXiScKGmtBfnqN3VX0ALRTccaT5CQardiZ0psU0c1ZmM1tZMuslhj3XEua1ZX5SIV+9NKtVbmdGE8Ce3C6TcM2G26Ry0scZt7lV+rCBTmOQF4MGOJUA0MMzaRxU7GMgW38+dgW3MigWz+0MOKo4L6NGLCrD85O7+Q0M+PRx.2KS4.ggG0VkGJl1uevikuYSU7z4QoqCgVmcKBDytf9nD0E9.6GxSFxqybFXe5cG6yac1mdkPcYt7x55uIN6TSJ.VOI2peFERcSzoLxBudlI0oIvNCNfEqwWx1jHXg5bAk.yyMMGPi5d7ja76tWq2c7c9.fuy.X0Ykty.CSgPBOnkwUf7bF7uv4QsCCsaN8UmQmQXimOLvuQv5Ex.uNpCw8yNrb4cyNahjrmdeQdxcg4E0oaEFY0lVbzMl5j0.XcgNJiD0jc2sVCkckgKxnovs2J+Jsd10YPs7Wel48wouOWl2Yf51nqdcZMOVWSxiL0M.il6ips8lauc8saTs5M9dZUjWm95gXoLVCIulXqKKuLsftG4JfQbOsbWXnoyXd5IZH1eLQyT1RSdPs7klrl7k1jkP940p7lj0MsfeCVpiJ3f2aKPai.yUKB2vnwd.JQ98JHN8bl7ygbv60egKGewVUdz71sIeG4mhTeNX3CIQfcAUYicqYgx8rHSXXM6cmkQe8lUGh6k6AAoESAWigANClxQ68v7huwLN.qHf+zh2e3gyfaXPD2UJFYk0M.eNElUNcvMpNDoava7u6Dei+sBeyRepISY7enuk0yclqiUsOYKrxuxqFJwNCt8Xt0Uefs4T58mZn6NKqsvobTLmWI4erA2z0R8oAo8IFmdeXCzFxaRYXHsUQY9uuEdMJYawK8u+Oxe9heX1WVEe4WiIRh7UVli64K3aYTs4B1yaZvdOHaw7QB5yaHnuYfbwtb94cIpObya0+ZDLxOu+E++9Ou+Q+AOeH6J7GM+gb3KPuNwuFVscie+ueeLDWKDK7gDQr7i5W9QW1DXx5m8cAmj8IWZdtZFG2lzn.0CRiqlJ8jO6ZpzKqxeTlitD+X9olzWoXcpJAV2QlDIen7YrmyEY9ExTrxOKsS88sGp2oi0l0NVeV6XiYsiaLqcbyYsiaMqcb6w2Q4enELwiJOm33b3QOS+4r5p+COg5Hiy+EvWm5MA
      

      Expanding on The Concept

      The main idea here is the usage of the compare nodes couple with ramp nodes to create and progress through different stages, and using the minmax node to have parameterized control of min/max/skew. This same concept can be used to add additional stages, easily creating a Flex Envelope with full parameterized control over the curves and the target values, although a different expression should be used at the end (multiplication of the base would just make it messy).

      Getting the Accurate Display in the Interface

      The curves use the Skew function, which is just output = Math.pow(input, skew). Knowing this, you should be able to draw your envelope using the Graphics API. Alternatively, you can just create a table, set the points and set the curves to the same values that you're sending to the network using Table.setTablePoint().

      Creating a UI for Interacting With the Envelope

      Since this thread's purpose is fulfilled with this post as it's just about sharing the finished network with the community, the rest of it could potentially be used for discussion or sharing the snippets for the UI/UX.

      The simplest way to go is to just create the knobs and link them to the network's parameters.

      If you want to let the user interact with the envelope graphic, due to the complexity of it and the abstract representation of time which cannot be standardized (as everyone's target size of the graphic will be different), it's best to go with a panel overlaying the table, and using the panel's mouse callback to write the logic to manipulate the underlying table using the Table API.

      posted in ScriptNode
      A
      aaronventure
    • RE: More Positive Posts?

      Well, HISE and Christoph's responsiveness are currently enabling my dream of creating a fully modeled and playable orchestra, and make it into a better product than I ever thought it could be.

      I've been implementing my existing models into HISE, and they run and sound amazing. In the process, I've also conceived of at least 4-5 other things I can develop, all thanks to the ease and ability of HISE to do it, as well as Christoph's willingness to respond to feedback and fulfill my feature requests in ridiculously short timeframes compared to what I was used to dealing with other software.

      I've been HISEing for 8+ hrs/day for over a year now, and being mostly unrestricted in what I can do has been truly amazing. The learning curve was steep, especially as I was pushing on boundaries of what's possible in certain aspects. But for at least 6-7 months now, I've been able to work without having to learn and figure things out, and generally just have a blast.

      posted in General Questions
      A
      aaronventure
    • The HISE Color Palette Tool

      I think a project-wide color palette tool would be a great addition to HISE's UI design toolkit.

      I'm envisioning this as a sort of popup window that lets you define different palettes and colors within them with custom naming.

      The popup could be anywhere. Maybe in the interface designer? Maybe in the main toolbar?
      add6134b-d3a5-44f1-b476-146588054edf-image.png

      It would pop out a small window with two columns: left column would be palettes and the right column would be the colors within a selected palette. The colors are just a list like the component colors

      b233f279-82cd-4f2e-a86f-ad5a939ad70e-image.png

      with the ability to change the name of the color.

      Clicking on the color itself pops out the color picker.

      At the top of the right column there'd be an array of buttons where we could save variations of the selected palette to, for quick A/B/C-ing.

      The Key Features

      Accessibility

      The colors are accessible like object properties. Each palette is an object within a class (perhaps ColourPalette or in the Colours class under Colours.Palette) and its colors are its properties. If you have a palette called Background and in it you have 4 colors, you'd access them with e.g. Colours.Palette.Background.Highlight.

      Instant Preview

      Changing any color in the palette would instantly refresh the entire interface so any components that reference any color from any palette would instantly be repainted.

      What Already Exists

      A palette panel can be hacked together using a hidden panel and a component property broadcaster, but there are issues with this approach:

      • it spams the component list
      • it's unintuitive for anyone who's not working with code a lot or is unfamiliar with broadcasters
      • you're limited to 4 colors per panel
      • making a variations switcher requires additional coding and it all becomes a mess when you have more than 4 colors and more than 2 variations as you juggle between panels
      posted in Feature Requests
      A
      aaronventure
    • ScriptNode Feedback After a Month of Heavy Use

      I've been living and breathing ScriptNode for a month now, day in, day out. I used it here and there over the past few months but it was for small networks and modulators, usually no more than 10 nodes.

      It's ridiculously easy to get most DSP prototypes working in Scriptnode. If you add Faust to the mix, it really is a superweapon ready for the future. Global cables as well as external slots make it easy to communicate the data out to the UI.

      I'm currently working with massive, interconnected networks with lots of parameters. I think I loaded every node at least once.

      For some context: I have a decent amount of experience using Unreal Engine Blueprint and writing complex animation blueprints and state machines in Unreal (putting together designer-friendly AAA-level non-replicated locomotion systems and character blueprints up until UE5.2).

      I've been vocal about ScriptNode lately in various threads and have posted numerous bug reports as well. I figured collecting my feedback in this thread will make it easier to discuss.


      Issues

      There's a number of issues lurking, many of which have been only made apparent in my attempts to scale this thing to megacity-levels (200+ nodes and counting).

      Unique IDs

      The biggest design flaw in ScriptNode is that connections are tied to IDs, which are user-facing and user-editable, and the repercussions of messing with this are not audible until you reload the network (e.g. close and re-open HISE).
      I've elaborated on this here. https://forum.hise.audio/topic/9835/scriptnode-prevent-renaming-a-node-id-when-attempting-to-use-one-that-already-exists

      The magnitude of this issue is most apparent when trying to copy/paste nodes which have active connections (it's impossible): https://github.com/christophhart/HISE/issues/546

      Suggestions:

      • unique IDs for nodes in the back, just a name property for the front. Notes spawn with the default name property without the number, like they currently do.
      • if a name of the node is changed from the default name, hovering the node name should show the original node name (the factory path property from right click)

      Navigation

      I haven't found a way to navigate around a network freely other than with a mouse or a touch pad. It becomes problematic when you want to plug a, say, peak node into whatever parameter of another node two screens away. If you don't have an MX Master, which has a vertical and a horizontal scroll wheel, or a similar peripheral, and the network is too big even for zooming out, your only choice is to exit HISE, edit the XML and reload the project.

      Suggestions:

      • double clicking on an output pin or parameter enters plug mode: you can now freely scroll by clicking on the scroll sliders or using two fingers on a touchpad
      • be able to use arrow keys to scroll the screen instead of jump around node selection
      • moving the mouse while holding the drag pin to the edge of the screen scrolls the screen, like in a CRPG/Strategy/MOBA game.

      Labeling

      When working on a big anything, keeping things organised is paramount. Node comments in a vertical layout are fine. But if you switch to a horizontal layout, they now unnecessarily add to the width by staying on the side, when they could be moved to the top or bottom.
      https://forum.hise.audio/topic/9816/put-node-comments-above-below-nodes-when-the-container-is-laid-out-horizontally

      Also, once the ID issue is sorted out and the name property becomes just a name, right clicking a node should automatically enable the editing of the node property field so you can immediately type a desired name.

      Connection Clarity

      Once things get bigger than your screen, and as they grow, it becomes ridiculously hard to keep track of connections.
      This has been briefly touched on here https://forum.hise.audio/topic/9819/scriptnode-highlight-incoming-cable-on-hover-when-cables-are-hidden but there's still a long way to go.

      • If you right click a source (parameter or output pin), a target will be displayed
      • If you right click a target, a source will be displayed only if it's a parameter, not if it's a node (e.g. peak)
      • After the feature in the link above was added, the source will now be displayed on hover if you hover a target, but still nothing if you right click it
      • There's no mention of the source or target's parent nodes
      • The names are direct node IDs, which ties in to the ID issue mentioned above, so you're discouraged from changing the node names, in fear of accidentally ending up with two nodes that share the same name/ID
      • If you collapse a node, connections to any of its parameters or child nodes disappear both visually and in the right-click connections tab for the source parameter

      Suggestions:

      • The new feature that shows a source should always be on
      • Remove the tooltip when hovering a parameter which just repeats the visible node ID and parameter ID, that just obscures the new source tooltip
      • Show full target hierarchy both on hover and on right click menus as outlined here https://forum.hise.audio/post/81634
      • Fix missing source connections from node outputs when right clicking parameters
      • Show cables running to and from collapsed nodes; show source/target node names in the connection list
      • Have a way to click on a node name in the connection list in parameter properties that will move the viewport to that node

      Wishlist

      Here are the things that I find missing at the moment.

      Logic operators and Clamping

      Basic < > = operators, as well as unscaled input clamping. Discussed here. https://forum.hise.audio/topic/9844/scriptnode-add-to-control-logic_op/6

      Variables

      Having variables in scriptnode that can be saved or read. Here's an example from Unreal's Blueprint: https://youtu.be/oKGJECvQJA8?t=88

      Suggestion:

      • variable creation window, maybe like the parameter toolbar; variable needs an identifier and a default value
      • get node (dropdown menu that lets you select the variable to get, output pin)
      • set node (dropdown menu that lets you select the variable to set, parameter for writing, writes on change)

      The get node avoids the need for a cable mess since you can write to a variable with set, and then just load as many get nodes as needed.

      Wrapping Nodes into External Files

      Just like you can wrap nodes into a chain, and like you can move selected code into an external file, you should be able to move the nodes to an external file, which will then be available in the Project tab in Add Node, automatically replace the moved nodes and connections. Because DspNetworks need defined parameters if you need input, perhaps this moving into external files should only be possible for chain nodes, as you can add Parameters to it.

      Cable Outputs for Embedded Project Nodes

      If you create a network, it can always be added as a node to any other network from the Project tab of the Add Node window. Any parameters of the main container are also visible here.

      It would be great to also have output pins for any (scaled or unscaled) peak node from within the network, with usual text ("Drag to Modulation Target") being replaced with the name of the peak node. This is the equivalent of adding outputs to a function in Unreal Blueprint; whenever you add that function to any blueprint, it has the configured input/output pins. Scriptnode currently has inputs (parameters), but not outputs like this.

      Extended Expr Nodes

      Math and Cable.expr nodes are great, I just wish they had more inputs for algos that need more than one input but are small enough that they don't warrant a SNEX file, which limits visibility

      SNEX Docs

      I gather SNEX is the place for any complex algorithms because it supports variables and is blazing fast, but at this point I have no clue how to get a sound out of it; the examples in the docs either don't compile or crash HISE.

      posted in ScriptNode
      A
      aaronventure
    • ScriptNode Compilation Workflow and What to Do About It

      Unfortunately I was not able to make it to the meet, so I decided to convert my notes about Scriptnode into a post here. On a second thought that’s maybe even better, as this way it’ll stay here easily searchable and visible.

      I wanted to talk about the current ScriptNode workflow with regard to compiling of networks and/or nodes.

      ScriptNode evolved a lot in the short time that I’ve been here, but the compilation workflow seems to be stuck in a time where it was a smaller scale add-on to HISE.

      In its current state, the compilation workflow is incompatible with large projects, and by that I mean any network with a lot of interconnect and repetitive node chains.

      I’ll examine three examples:

      • Math Expression node
      • A node chain template
      • Faust

      The Expression Node

      I’ll use it as the most basic example of a problem that the current compilation workflow introduces. This is a very important node that could play a very significant role in almost any network, but I find myself avoiding it at all costs because it requires network compilation in order to work in the final plugin.

      This is problematic because network compilation is not just freeze-in-place like a track in a DAW. You need to enable compilation for the network, run the compilation process, restart HISE, load your project, remove your network from the chain, add in a hardcoded FX module, and add your network there. You cannot leave your ScriptFX network in the chain, even if it’s bypassed, because the exported plugin will refuse to scan in a number of DAWs, and there’s no warning in the exporter for this. Even if it didn’t, that’s a whole lot of additional clutter.

      This is fine if you need a small modulator that you set up and forget. It’s not fine for big networks where you are likely to be making changes a few dozen times in the future. It’s also problematic if you’re using that network in multiple places in your entire project tree, because in order to make changes, you need to now load in the scriptFX network in all the spots, and every time you make a change, you still need to reload in order for the change to be reflected everywhere, which in this case means restarting HISE.

      A good workflow in big projects requires a lot of testing, which means a lot of plugin exports. Every time some major change is made to the project, I export it to make sure it still works both as a plugin and functionality-wise. If the plugin is conceived to be used many times in a standard composition/mixing session, that needs to be tested, too, which makes the plugin version of HISE unsuitable for the task (but also because it doesn’t have a FAUST version).

      The Node Chains

      There are cases where you need to have a node chain repeated a number of times across the network. This is the same as a function in code. HISE has node templates, but the major problem with it is that if you make a change in one instance, it’s not reflected in another. This could be beneficial, true, but in order to have the changes reflected in all instances, you need to do that whole thing in a separate network. This clutters the network list as the only way to differentiate between these “function” networks and networks to be used as modules in the main tree is to settle on a naming scheme and name the networks accordingly.

      Once you have them all over your main network (loaded from the Project tab in the Node Browser), if you make any changes to any of them, the network requires a reload (unload the network, then load it again) and if you’re using them in multiple networks, it’s easier to just restart HISE. God forbid you used an Expression/SNEX node in there which mandates that you first need to compile the function network.

      Faust

      When working with Faust, you cannot just leave the faust node in your network and compile it, expecting the network to work. The compiled faust node needs to be used in order to export the plugin. This is a bit problematic because in the Projects tab in the Node Browser, there’s no real indication that this is a compiled faust node, and not a compiled network. A simple naming error can take you places. If you’re going to be using a compiled faust node as part of a bigger network, you need a separate network where you’ll be compiling the faust.dsp files, then unloading that network and reloading the main network where you’re using the compiled faust node. The compiled faust node by itself currently has a lot of bugs, which I posted on the Github issue tracker.

      What to do about all of this?

      I’d recommend to always look to Unreal Blueprint when in doubt about UX changes. That thing has been in development for the past 12+ years and has received contributions from dozens, if not hundreds of people. It's incredibly smooth and easy to work with. Unreal Blueprint has 2 types of “node chains”: macros and functions. Macros are project-wide, and functions are local to the blueprint where they were created.

      A blueprint is the same thing as a network in HISE. When creating a function, a new window pops up and you build a node chain like you do in the base blueprint window. You can define function inputs and their types, as well as function outputs and their types. The function then appears in the sidebar while editing the main blueprint, and you can either add it from the search/browser or drag it from the sidebar. Any changes you make to the function itself will be instantly reflected in all the functions in the blueprint.

      This would somewhat solve the Node Chains issue.

      About Faust and SNEX, if compilation itself cannot be added to the export process automatically, maybe there should be a freeze-in-place option. Right click, freeze the node, it instantly becomes available in the projects tab in the Node Browser. If you unfreeze any instance, make changes to it, then freeze it again, all other frozen instances should automatically update. For faust this can be tracked based on the .dsp file, for SNEX it could be tracked using the file as well. No idea how it would be tracked for the expression nodes. Maybe they’d be assigned another type of ID on freeze.

      I wrote about expression nodes requiring more inputs (maybe dynamically like the xfader node) as their strongest trait is that the expression is visible and instantly editable.

      posted in ScriptNode
      A
      aaronventure
    • Merry Christmas: Polyphonic FLEX Envelope

      e027ff8a-6da5-4156-9908-1f8b3b0b7e27-image.png

      Happy Holidays, folks! Here's my gift to you all. Over the past few months I saw a few threads asking about Kontakt's flex envelope so I gave it shot at recreating it in ScriptNode. It lacks individual point modulation as we can't, as of this date, access them inside the network.

      • Use this as a script envelope modulator. It is fully polyphonic.
      • Load it in after loading the Table Envelope. Use the Table Envelope for Attacks and Releases. I tried recreating these here as well to have it all in one view, but always ran into problems with clicking. If there was a Table Envelope node like all the other envelope nodes that automatically triggers on note-on/off and kills the voice, it would be great.
      • Attack Time should be set to whatever your attack time for the Table Envelope is. There's a ramp that acts as a timer, and once the attack finishes, the flex envelope starts doing its thing.
      • It acts like a factor, multiplying the output from the Table Envelope. That way the gain perfectly fades into the flex and out to a release.
      • Right click drag on lines to make them into curves. If you decay the Flex to 0, the Release won't play.
      • Looping the Flex goes from the end -- you're setting the start point of the loop as the percentage of the table's x axis
      • If you need longer timings, open the collapsed node, find the ramps, right click on PeriodTiming and set your desired Min/Max
      • Default block size is 32 samples. If you need a different size for faster/slower processing (shorter Flex times and wild patterns will likely require bigger resolution and therefore smaller block size), right click on the fix_blockx node and set your desired block size. At this size the overhead is miniscule and 5-10ms smoothing clears out any zipper noises.
      • Unless Funky's got an ace up his sleeve and is sitting on the API for this, the table itself isn't dynamically adjustable. You can use the logic that you see, create additional serial rampings, set your min/max for each point, create more tables and you could get to a point where you can adjust the factors from scripting, but it's gonna be seriously messy. Plus to my knowledge (that I absorbed from the Script Envelope documentation), there's no way to edit the curve amounts anyway. In that case it's easier to just do it in SNEX/Faust.

      Copy the XML to your project directory into DspNetworks\Networks.
      FlexEnvelope.xml

      Or copy the base 64 string to your clipboard, create a new DspNetwork, click somewhere to add a new node and you'll have an option to import FlexEnvelope from your clipboard.

      ScriptNode1292.3ocyXssbaTCFVqikSaCzRfBWwvnKo.0icgRatJGbRJgoNMSsobYGYux1ZxtqVzpM0lq30nWv.uF7Pz2EdC.cX8ZoM6l3zbX5dQpk9k9O98eP8PlOA30Xe7PAiO6HrXBvac3PVj.SiH7lCmH+WvA6B7tKb+.xz8hNgDvhIfclEiSRH9.uUfs.8lvdyQXNNjHH7D0dsAGJYcGV.KkC7fd.4WGVXHIR.7pAkGQQOA.77NTqCPkP9H3H5zWOHfM73o.Gk5KrTJqyrPMLL7rD3QbohyETsTqksZl7mFIePxqTTGhC.uBGjJUIuZfBmZM3NJ41i96j4GpN76eD.L2XVwxXVE1GOHf3ZGet1N3rflCUDesPejKfYT21L.cY9oAXAkE0GyGSDZGZGVTDYnZS4UTr6.IigPruOHOHo1ZUnwFTBHVFb2EKvp6qU6j7eor8HexTk57exu8BGP78I95i6QfO4QMy+1ni7Om7B4eN7o+T+c+4mjuN8oNzGs8FCh61ZA8eYC26O5asVC.VnKodkuRZDcoQYghaWGj80EOsvd+6l8DjXcfy5b8Nl7FS3w9jlfmgAmh0amJXgXgNVUCXB2MT2Xc3yYioCQ3Hez1AwSvfyIqxME5rC66yB7MhbQhSMKr1GC2VHvCOFoCJNB99VBNj4ewk8BIVuLI9RbXrqDWSJQNoIWQvUP4rcc3yHBTFG5SCIknCd0Wdz88f84oDzuNgDgjA+kCmuKMIN.OamzQixvUN6HWmg6qCeX6BPvUrffMV.AgvVMaYA+tE7wsZo1ZA569xiztk4q8OrQq1s+w1N.QEOdLvTT5HBmx70NHKfmp7JvRApWsB.gskqM0tdNiE2Sf4BfCwKLmZ.elTOJxD6xRV3jhQlRvlKpFRlFyqBxLAp4gXBAYg7PinQISHIHEZiFM96PTAZL8D4NpSNl8P7DB1GIX50pdXl6I2HQ4KP9L40j2RcA4uZVFR7r6cz.1QYuY9iOC1UZaMGEvX7ulFEmJd.nXejUg6RFjNd9UT1YokxqUJX+VPYRbzXRkn7RK+GlFTwEpr15RgFlylh3SKLPtB6D7+jEAeC0JB7+Fbu.ZHMRxaDmDSDTgL9hNQIUj4pInDS7kSRHBotiXQAyPJuHRvoiGS3De4dYGGIiKpncBZHNgXsuDTz9Aki.V9ZQ2ANWKtQ82Uk.ZoNNt+OM28mSuh.vWAeIIyKVHIZ.YH9R5sVClyNW2UVUlaBuksHbnHk2RMlnyHrZ6ojI.tBaDaOlosCbIaCediXdy2m71PcKwO3ZTdY4UFH9LQekjqXCnLUtchr2AFpZwn1uhT1sjMgNlfRR4DUCQYmtYIHrPm9NfLlFEoZ5kFInA1cTkMSoptokVBr1MacqFvXB93RgzZBUX4eIrCNVnra0ozSiK33njPpn4kbHy4On65d3xq3hSWQU2ZX5j+hTgbjlk+sMm2CZseYy6qxU70Pl25VVJiZ+KvisqUYj3Ct2fl0qOIjwjIzE50eOSdSNwqFWPsKrKXq+ZqBtf+9su8e17Tt.z69y2so40C8z5rrZkt1tE69iF.v2rkqq35OlbW4j6ivoAhkHzrRgTupV3U2tIoyiq6efznuNdd4hxysZ4Tuq5xetu32oHnS+WPQqIaBEMwqkQ.x3PCs2XIslJm6rRaotoJjZ3.jY5fyqs2ovZWRUydxjR7x4oJfq9jw7+2NaurNXqZQNFQwT52qVR+OTfNZfA
      

      Enjoy!

      posted in ScriptNode
      A
      aaronventure
    • RE: Where can I find Laf functions?

      @griffinboy Well it happens, I always look through the forum, the docs, the github docs (way better search than on the docs page) and google with the site: hise forum target, but even then sometimes I'll ask something and David or someone else will pop by and drop a link to the docs.

      If every post you made was asking about something that can be easily found in the docs, then I'm sure eventually someone would make a comment about that.

      But generally, you're fine. I understand it can be an anxiety thing, I have close people who have dealt with similar stuff all their life, and while it can never go away, it does get easier when you remind yourself of the reasonable take on the whole thing. Which, granted, someone often has to give you first, so in case that's what's up, here's mine.

      If you, for just a moment, disregard the whole gift-to-humanity FOSS side of the entire project and look at it from the business side, your posts are good data. You yourself are just one data point, but if everyone else started asking repetitive questions, that could indicate a documentation or some other problem.

      You can see this, for example, in the introduction of the export pre-flight checklist that happened a few weeks ago. If you go through the forum, at one point a couple of months ago you'll see a lot of similar posts started appearing on a nearly daily basis: compilation fails, export fails, and most of them caused by the users not actually reading the very first readme right on the github page.

      Someone made a video about plugin creation with HISE on youtube, it got some traffic and HISE got an influx of new users. A lot of them just went to the hise.dev webpage, downloaded the binary and attempted to VCR through the whole thing by putting together something in the WYSIWYG editor and clicking export. When it didn't work, the first thing they did was come to the forum.

      This gives you a lot of clues about how curious hobbyists think and work, and if your business decision is that there's still potential future developers there (or you're just annoyed with the daily export error posts), you now have data to work off of and make changes.

      It's a good deal. Chris provides a place to talk, in return he gets QA and customer support.

      You're asking good questions. The talk we had about the dynamic continuous event modulation yesterday was a good talk. These are new features in HISE, and it's good to test the general audience's understanding of these by bringing it up, which, as you saw in my snippet, requires a decent understanding of HISE in order to implement properly. People will surely benefit from it. If even one person does, it's worth it. I am where I am in life because of selfless contributions of countless people of many forums and those who created, maintained and moderated them, allowing me to search, browse and read days, months or years after these talks took place and benefit from the information.

      Even this topic, silly as it may seem in hindsight, is framed very well and is a very SEO friendly question. A few weeks from now, whether someone attempts to search it here, search it on google, or it gets swallowed by some LLM and someone asks there, i'll easily be the thing that comes up first.

      So your questions are good. You're not being a jerk, you're not forcing political themes or sexualizing other forum members. You're talking about HISE and instrument development practices and workflows. It's all on topic, and you're even actively contributing, like with the C++ tutorial. So all's good. Keep talking, that's what the forum is for.

      posted in General Questions
      A
      aaronventure
    • RE: Cost Of Operations?: License Fees?

      @ustk if enough people start your exe, defender will eventually stop throwing a warning. That's why I suggested an installer app for HISE where devs would just attach a payload. That way once it eventually got past the defender smart screen, it would stay so.

      And it exists, check the Payload Installer in the tools directory of HISE. The windows one works, the one for Mac not so much. I'll probably be pesting Chris about it soon.

      Also, you can just upload your exe files to the defender whitelist on the microsoft page (you gotta be logged into your Microsoft account), select that you're a developer uploading an app for whitelisting, and after 3 weeks it'll be whitelisted and smart screen shouldn't pop anymore. But 3 weeks is a lot, almost feels like shipping for PlayStation.

      posted in General Questions
      A
      aaronventure

    Latest posts made by aaronventure

    • RE: HISE supports gif images

      @CatABC

      If it were added to the image component, webp would be a much better choice.

      You can already import a stitched image, or you can load in individual frames of a gif, then simply play through them using a timer (use the panel component for this).

      If you don't need to have other components on top of the gif, you can also use a WebView (no other HISE component can be rendered on top of the webview), and then you can import gifs, webp (way better) etc.

      posted in Feature Requests
      A
      aaronventure
    • RE: exporting Pc versions on mac

      @d-healey Did you try this out?

      posted in General Questions
      A
      aaronventure
    • RE: Scriptnode Modulation creating aliasing or bitcrushing

      @dane-zone click the little dropdown in the node title to expose the parameter of the dynamic blocksize so you can change it.

      The CPU meter in HISE is not the final thing. Depending on the complexity of the network, it may go down, sometimes a lot, when you export it. So export it and check against other plugins in your DAW. That's your reference.

      If there are no audible artifacts at lower modulation values, you could leverage the dynamic blocksize node to go for frame processing only past certain modulation thresholds, optimizing the plugin when low modulation values are used.

      There's gonna be a "hiccup" when you switch blocksizes, so keep it in mind if you want to offer parameter automation of the modulation frequency. You may wanna leave an option for this in the settings but before you go trough the engineering trouble to offer this feature, export the plugin and check whether using frame processing for this is actually even expensive by comparing it to the performance of similar plugins on the market.

      posted in ScriptNode
      A
      aaronventure
    • RE: exporting Pc versions on mac

      @dannytaurus Give this a look, too

      Link Preview Image
      HISE/.github/workflows/build_installer.yml at develop · christophhart/HISE

      The open source framework for sample based instruments - HISE/.github/workflows/build_installer.yml at develop · christophhart/HISE

      favicon

      GitHub (github.com)

      posted in General Questions
      A
      aaronventure
    • RE: Scriptnode Modulation creating aliasing or bitcrushing

      @dane-zone have you tried frame processing? instead of using fix_8, try using dynamic_blocksize node so you can preview different settings and see if that's what affects it

      posted in ScriptNode
      A
      aaronventure
    • RE: exporting Pc versions on mac

      @sodanswishers check out how HISE's actions are set up for testing commits.

      for setting up IPP via Github Actions specifically if you need it on Windows, check this out https://github.com/sudara/pamplejuce/blob/main/.github/workflows/build_and_test.yml

      posted in General Questions
      A
      aaronventure
    • RE: exporting Pc versions on mac

      @sodanswishers Running Windows on Parallels. You can also set up Github Actions to export the plugins on all three systems.

      posted in General Questions
      A
      aaronventure
    • RE: scroll event for script panel mouse callback

      @whoopsydoodle Currently the only way to use a scroll wheel in a custom control is to use a WebView. Use it for your EQ panel.

      posted in Feature Requests
      A
      aaronventure
    • RE: Adding a second action to a button

      HISE will remain outside of AI scope for some time because there's just not enough training data out there, and it's not entirely code-based.

      However if you're adamant on using it, you NEED to feed the docs into the context.

      RAG is not very good here.

      Instead, I recommend you use the Context7 MCP, so you'll need to use an AI tool that lets you use MCP tools.

      The IDE-based ones all do, but so does Claude Desktop (as Anthropic were the ones to come up with the protocol), which is much nicer to work with in this particular case because you can set up projects with custom instructions and knowledge. Get Claude Desktop, create a project, describe what you're doing, and in the project instructions explicitly mention you're working in HISE and that it should use Context7 to always get the docs because there's not enough training data. Update the project knowledge as you go along and as you learn which stuff makes the LLM trip up.

      It would be better to use it to chat about HISE, sampling, VI paradigms and DSP using Context7 as a doc tool for HISE instead of letting it write your code, as a big part of the HISE dev workflow is not really code-based. So I'm not encouraging it, but if you're gonna do it anyway, no one can stop you, so I'm letting you know about the best way to do it that I've found, and actually getting something useful and concurrent out of it.

      posted in General Questions
      A
      aaronventure
    • RE: Glsl shader doesn't work when exported

      @sodanswishers I've been dabbing in an out if the GLSL part of HISE for well over a year now and definitive conclusion is this:

      Use WebView and WebGL

      posted in General Questions
      A
      aaronventure