0.10.1 Major Performance Update

The new update to AudioNodes is available now. This is a major, but mostly technical update, improving processing performance across several Nodes, adding a new processing load meter, a new experimental approach to freezing/bouncing subpatches, and also including various QoL improvements around performance in general.


Priority Fixes

  • Fixed a performance bug where, after the main audio thread was overloaded, signal processing tempo would progress too fast and cause weird glitching audio for a while, even when no longer overloaded
  • Fixed a bug where trimming from the start during an export (or trimming both sides) would not correctly trim the starting silence
  • Fixed various issues with exports from the AudioNodes web app in Firefox

Processing Load Meter

In digital signal processing, there is a limit on how much a computer can process in real-time, before it starts falling behind and glitching occurs. AudioNodes is no exception.

The flagship feature of this update is a new processing load meter, shown in the header, which tells you how far you are from your device’s maximum capabilities:

Current processing load, 44% — reaching 100% leads to glitching

Note: this meter is a bit of a work in progress. It should give you a very good estimation of where you are with performance, but it still needs some fine-tuning. Check out the new Performance docs for more.


General Node Performance Improvements

This update makes significant performance improvements to various Nodes to reduce their processing load, across the board, in all situations:

As a rule of thumb, these Nodes should now cause less than 50% processing load than before. Sometimes even more. In some optimized cases, the difference is more than 90%, making them more than 10x faster than before.


Node-Specific Performance Improvements

In addition to a general performance overhaul, several Nodes also receive optimizations to constant folding in this update, as well as some additional, special-case optimization changes:

Waveshaper Node
  • Now supports constant folding universally
Timer Node
  • Now supports constant folding when either:
    • It’s in Signal Threshold Trigger mode, and its input is a constant 0 (or otherwise a constant that’s not above the configured threshold), or
    • It’s in Melody Trigger mode, and it receives no notes
Multiply Node

The Multiply Node received a massive performance overhaul in this update, given it’s a Node commonly used in a lot of patches. In addition to a baseline performance increase:

  • Significantly optimized performance for when at least one of the inputs has a channel count of 1, which is a very common case with control-signal multiplication
  • Optimized chains of Multiply Nodes in non-constant mode, where if each Node in the chain has at least 1 constant input, AudioNodes will automatically collapse the multiplication chain under the hood, resulting in only 1 signal level multiplication
  • Optimized constant folding — if one of the Multiply Node’s inputs is constant folded and 0, the Multiply Node’s output will also always be constant folded and 0, similarly to how the Gain Node behaves with a constant 0 gain
Greater Than Zero Node
  • Now supports constant folding universally
Channel Splitter Node
  • Now supports constant folding universally

Freezing Nodes & Tracks

An early, experimental preview of the new Rendered Subpatch Node is now available in this update. This Node is similar to the Subpatch Node: it comes with an editable internal subpatch, but has a single fixed signal output, and automatically creates an optimized output of its contents, to improve performance.

It’s basically the automated version of:

  1. Taking a subpatch
  2. Exporting it to an audio file
  3. Reopening it with an Audio File Node

This process is equivalent to freezing a track in other DAWs. Except instead of freezing a track, in AudioNodes you freeze Nodes.

A word of note: the Rendered Subpatch Node is still an early preview, and may have some issues rendering various patches.


Settings Changes & Sample Rate

The settings screen got a small rework in this update. One of its changes is the new Audio Settings tab, which comes with a new Sample Rate setting:

This enables you to set the sample rate for real-time audio processing (i.e. not exporting), and optionally reduce it for performance-heavy projects. The setting specifically has lower-than-typical options to help you squeeze more performance out of patches.

Note: lowering your sample rate will also typically come at the cost of audio quality, especially in the higher frequency ranges. However, you can let AudioNodes run at a lower sample rate while editing performance-expensive projects, and still export them with a high sample rate when done.


Export & Constant Folding

Exporting to an audio file now supports constant folding. This has 2 upsides:

  • Exporting is faster, depending on how much your project makes use of constant folding
  • In some cases, where a Node has a slightly different behavior while constant folded, it’ll now behave consistently between exporting and real-time playback — the Gain Node is one such example (see its output docs for more on this)

XY Param Node

The new, experimental XY Param Node displays a 2D slider which can be moved on both the X and Y axis. It’s useful to control 2 things at once, via 2 different outputs:

The XY Param Node will also support custom Nodes, but this is a work in progress.


Misc Changes & Fixes

  • Opening Node properties and pressing the Tab key will now focus the first input field
  • The search dialog received a slight facelift in this update — it should now correctly indicate if a Node is in a subpatch or not, and sorts results a bit better
  • A Gain Node with a signal input but a constant-0 Gain will now correctly indicate the output channel count being 1
  • Fixed a UI issue with the Option Signal Param Node where it was not possible to type negative or non-integer values into the value fields
  • Fixed a prompt that would incorrectly show a warning about the current AudioNodes version when opening a project
  • Timer Node‘s Rate-Control Input now appears under the Melody Trigger Input
  • Constant Value Node now supports custom Nodes as an editable value from the properties panel, as well as an object in the custom Node designer
  • ADSR Node and ADSR Param Node now have a new Display Step property, which determines the number of decimal places used to display the Attack, Delay, Sustain, and Release values.

Future of Performance in AudioNodes

While this update delivers several performance upgrades (many of which have been in the works for a long, long time), improvements won’t end here. The following is a list of performance-related improvements still on the drawing board, or in early stages of development, for a possible later update:

  • More opportunities for constant folding where it makes sense
  • Further optimized DSP implementation of various Nodes for a flat performance increase across the board
  • Real-time multithreading — this is a big “if”, but we’ll have to see if it’s feasible to do in a way that latency is not an issue

Additionally, the Rendered Subpatch Node and the processing load meter will both see more iteration over time.

That’s it for this major update, please stay tuned and see you next time!