Dev Diary: Polyphonic Synthesis Tooling

Hello there!

This is going to be a dev-diary, a sort of a more informal post between updates, with a more personal tone on what’s going on with development. I’ll try to make this format more common to keep you in the loop, although it takes time to finish a well-written post.

Anyways, onto the point of this post.

Recent Updates

As it’s probably apparent from recent updates, our current focus developing AudioNodes is sound synthesis. So far, this resulted in various small changes across Nodes (including many in the upcoming 0.7.7 update later this week). However, there was no major paradigm shift in the area.


Before continuing on what’s coming, let me explain what we think the main problem is with sound synthesis in AudioNodes: at its core, it’s monophonic.

Current Patching is Monophonic

At the end of the day, the master patch in AudioNodes is monophonic. What this means is that, when it comes to synthesizing melodic notes, your control signals can only process one note at a time. The Wikipedia article on Polyphony and monophony in instruments provides a good explanation of the problem in hardware synths, but the concepts apply to AudioNodes as well.

Take this simple synth patch for example, which generates a simple sound using a sawtooth oscillator:

A simple monophonic patch using a frequency-controlled sawtooth oscillator (VCO) and an ADSR controlled Gain Node (VCA). It also features the new Melody Hold Output of the ADSR Node. Note: currently, you need to play your project for the Oscillator Node to work.

Here, the ADSR Node only outputs a single amplitude value, and the Note to Pitch Node only outputs a single frequency value at a given time. There is only 1 Gain Node to control the amplitude, and only 1 Oscillator Node to generate a tone.

This is completely monophonic, meaning it can only work with a single note at a time. If you tried to play 2 notes simultaneously, the later note will cancel out the earlier note.

Adding Polyphony

And as so, one thing that’s sorely missing from AudioNodes is grabbing a patch, and turning it into a polyphonic synthesizer, including all the control signals, ADSRs, etc. Or just building a patch with polyphony in mind from the start.

Sure, you can create a patch already. Then you can copy-paste it multiple times, to create multiple voices. Then you can figure out a control structure to spread notes between your voices and achieve polyphony.

Something like this, based on the same patch from above, but now with 2 voices:

A simple sawtooth synth with 2 voices, using the placeholder-ish Sequential Filter Node to spread notes between the 2 voices. Again, currently, you need to play your project to get the Oscillator Node to work.

However, none of this is intuitive, to say the least.

Enter Poly Subpatch Node.

Poly Subpatch Node

To solve the above problem, a major upcoming feature is a seamless, polyphonic patching tool, similar to the Subpatch Node, currently dubbed the Poly Subpatch Node.

Its principle is very simple: the Poly Subpatch Node automatically clones your subpatch under the hood, multiple times. It then spreads notes between each copy (each voice), so each voice only has a single note at a time. Pretty much what the 2-voice patch does above, except automatically.

With the Poly Subpatch Node, you only need to create your patch once, and the system does the rest automatically. It also automatically updates your extra voices, so you don’t need to keep copy-pasting as you experiment with changes.

Here’s an early preview from an internal development build, using the same sawtooth synth from above. First the outside, showing the Poly Subpatch Node itself:

A MIDI Keyboard Node controlling a Poly Subpatch Node, then connected to an Audio Destination Node

And then the subpatch inside the Poly Subpatch Node:

The insides of the Poly Subpatch Node, showing the “reference voice” patch. It’s automatically copied to the rest of the voices.

This way, you can have as much polyphony as you want, while only creating the patch once.

Pretty cool, but when is it coming?

Development Status & Release Date

The Poly Subpatch Node is still under development, and won’t yet be available in the next update, probably not even the one after. A realistic release date for an experimental preview is probably late September, but a lot can happen until then.

What will happen in the meantime, is continued improvements and small fixes to prepare for the eventual arrival of the Poly Subpatch Node. These changes will probably include an “always-on” mode for the Oscillator Node (for that analog-ish patching approach), and a Melody trigger mode for the LFO Node, but more on this later.

What About Existing Nodes?

A question you may have is how this all ties into already existing Nodes, like the Oscillator Node, which comes with its own trigger mechanisms, built-in ADSR effects, etc.

The most likely answer is that these Nodes will get deprecated eventually, and replaced by lower-level Nodes. For example, something like a “raw” Oscillator Node, that just outputs a single frequency-controlled tone and does nothing else. No ADSR, no Unison, no nothing.

And even before this can happen, a required complementary feature AudioNodes needs is being able to build custom Nodes, and a library of pre-made custom Nodes, so you don’t have to build even the most basic synths from scratch every time.

Then, with all this given, the current Oscillator Node could become a Poly Subpatch Node with a nice skin (and the option to edit its internal patch, of course, which would be the best part).

But this is just throwing ideas around at the moment. The whole thing will probably go back to the drawing board a few more times, before anything concrete comes out.

Coming Next

If all goes to plan, the next update, 0.7.7, releases later this week, continuing on changes and fixes to make the Poly Subpatch Node a reality.

Thanks for reading, have a blast!