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

    aaronventure

    @aaronventure

    Beta Testers

    701
    Reputation
    186
    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: Draggable Envelope UI

      @DanH I created an AHDSR envelope with curves and shared it here. Search my topics (I'm on the phone).

      You can point the UI to that, it's in scriptnode and the parameters are exposed so it's plug n play.

      posted in General Questions
      A
      aaronventure
    • RE: Changing Scriptnode Drop Down Parameter Via Script

      The classes in the API that might be of interest to you are DspNetwork and Node.

      Now, to change the actual value of a parameter you need this hidden class

      Link Preview Image
      HISE/hi_scripting/scripting/scriptnode/api/NodeBase.h at 03c420c1d12f7a4457a8b497a6b78bc49d250e85 · christophhart/HISE

      The open source framework for sample based instruments - HISE/hi_scripting/scripting/scriptnode/api/NodeBase.h at 03c420c1d12f7a4457a8b497a6b78bc49d250e85 · christophhart/HISE

      favicon

      GitHub (github.com)

      So give it a try. First you'll have to find out the name of the dropdown parameter, then you could maybe try to pass ints 1, 2, 3... or 0, 1, 2... or a straight up string.

      posted in Scripting
      A
      aaronventure
    • RE: What are you using to build UI for your plugin? What's your preferred way and why?

      @Christoph-Hart the web dev tools are very far ahead, as well as accessibility compatibility, testing etc. Not even gonna go into the available libraries and the fact that you can get ChatGPT help whenever you're stuck.

      I'm currently using Svelte+SvelteKit for one interface, and it's just so nice working with it. As if Svelte's modularity-focused approach wasn't enough, the deployment for HISE/WebView is a breeze. You install any library you want into the project, and in the end the SvelteKit static build compile pulls in only the stuff you used, gives you an index.html file with an accompanying _app directory and any assets that you put into the static dir. You point HISE to it and that's it.

      posted in General Questions
      A
      aaronventure
    • RE: Crazy Cubase <=10 Bug That Messes Up The Variables

      @Christoph-Hart I tried to, but all works well when I try to reproduce a minimal example.

      This uses the old sample mapping system, and the bug has been present for a couple of months at least. I even tried building with a version from last summer and (after fixing all the errors that popped up) it was still happening.

      The instrument has a pretty complex on note function where it determines which sample from which group to play, and it's here somewhere that shit goes wrong, but I cannot possibly imagine why. How would a host hiccup mess up the way samples are picked?

      posted in Bug Reports
      A
      aaronventure
    • RE: Crazy Cubase <=10 Bug That Messes Up The Variables

      @Christoph-Hart Yes.

      If you do something like add a stereo track while it's playing, it'll just start doing weird stuff like picking wrong samples from wrong velocities or even wrong groups.

      posted in Bug Reports
      A
      aaronventure
    • RE: Crazy Cubase <=10 Bug That Messes Up The Variables

      I'm circling back around to this as I'm seeing some Cubase-specific fixes being pushed.

      So far I haven't been able to reproduce this in a minimal example, but I found the trigger.

      In older versions of Cubase (sub-12) it happens whenever Cubase has to switch focus which causes a jump in its audio engine. Like switching to another window for a minute, then switching back to Cubase. Suspend settings do nothing here: you can leave the playback of the plugin going and it plays perfectly until you switch back to Cubase, it hicks up for a second and then it starts picking the wrong samples.

      posted in Bug Reports
      A
      aaronventure
    • RE: HEADS UP: Server.downloadFile() issue on macOS Sequoia - and a solution

      @d-healey said in HEADS UP: Server.downloadFile() issue on macOS Sequoia - and a solution:

      I bet ChatGPT knows the magic spell for Windows too, I'll ask it tomorrow if you don't get there first :)

      Hah, sure, but I'm too lazy to go test it right now.

      So here's the reply :

      One-shot check (returns Boolean, no packets sent)

      $nlm = [Activator]::CreateInstance([type]'Microsoft.Windows.NetworkList.NetworkListManager')
      $nlm.IsConnectedToInternet   # $true = online, $false = offline
      

      Continuous monitoring (no polling)

      $nlm  = [Activator]::CreateInstance([type]'Microsoft.Windows.NetworkList.NetworkListManager')
      
      Register-ObjectEvent -InputObject $nlm `
                           -EventName   'ConnectivityChanged' `
                           -SourceIdentifier NLM `
                           -Action { 
                               if ($Event.SourceEventArgs.IsConnectedToInternet) {
                                   Write-Host 'online'
                               } else {
                                   Write-Host 'offline'
                               }
                           }
      
      # keep the session alive
      while ($true) { Start-Sleep -Seconds 3600 }
      

      HISE-native integration of this might be better than manually launching Background Task as then it can just start a process and every instance of the plugin can read from the process instead of having every plugin instance start its own monitoring process through BackgroundTask (as I don't think BackgroundTask can connect to an existing one?)

      posted in Bug Reports
      A
      aaronventure
    • RE: HEADS UP: Server.downloadFile() issue on macOS Sequoia - and a solution

      @d-healey Ah I see your point. Also I figured if you're making a channel strip plugin or something and a user just happens to have 100 instances in a project, it could get interesting on load.

      I did some more digging. On macOS, it appears that

      /usr/sbin/scutil -r $? 
      

      will check your internet connection without sending any packets. It returns "Reachable" or "Not Reachable".

      If you call

      /usr/sbin/scutil -r -W $? 
      

      the task will run until terminated and will respond with Reachable or Not Reachable whenever the network status changes (I just tested it), which is pretty much like a broadcaster.

      @Christoph-Hart you can implement this instead of having to clean room that module. I'm sure Windows has a similar mechanism.

      posted in Bug Reports
      A
      aaronventure
    • RE: HEADS UP: Server.downloadFile() issue on macOS Sequoia - and a solution

      @d-healey that's true, but how do you think the OS does the check? I would bet it's something like this. Maybe macOS is calling www.apple.com and Windows is calling microsoft.com, as that also confirms DNS resolution and HTTPS working.

      posted in Bug Reports
      A
      aaronventure
    • RE: HEADS UP: Server.downloadFile() issue on macOS Sequoia - and a solution

      @d-healey It's not really, but how would you check if you're online if not by connecting to another server? 1.1.1.1 is a CloudFlare IP which uses AnyCast, so it automatically connects to the nearest operational server, vastly reducing a chance that you're making a call when the server appears to be down.

      I Imagine that's why Google was picked: the chance of downtime being so rare.

      This is supposed to be even more robust, with the benefit of the latency being almost non-existent in most countries where people buy audio plugins.

      posted in Bug Reports
      A
      aaronventure