Skip to content
This repository has been archived by the owner on Sep 16, 2021. It is now read-only.

Axiom 2

Tom Barham edited this page Aug 23, 2019 · 1 revision

This is a proposal for an entire redesign and rewrite of Axiom.

Rational

The goal of Axiom is to be a powerful, flexible, yet intuitive tool for musicians to build completely custom synths. However, feedback has shown that the design of the first version of Axiom doesn't quite live up to this: it's often not intuitive and too technical, easy to make mistakes, and makes building concepts that should be very simple quite tedious. This is because, instead of having sane defaults, Axiom generally opts to not have a default at all, and require the user to build whatever's needed (e.g. combining multiple oscillators requires a node for each, plus nodes to add their values together).

This doesn't seem to be something that's easily fixable working within Axiom's current design. As a result, this document will outline a proposal for a new version that fulfills these goals.

Design

Axiom 2 uses the concept of audio processing as a scenegraph. This means nodes have a single parent, and multiple children. Additionally, nodes expose 'parameters' whose value can be user-controlled or linked to another node, giving the second node control over the value.

The graph always has a root node, which doesn't have a parent. MIDI data flows out of this node and through the graph, and audio data flows back.

Nodes

Nodes are higher-level than in Axiom 1. Axiom 2 doesn't have a concept of "voices" in the graph itself, so nodes are generally just above that level. Some examples of nodes:

  • 3xOsc (3 oscillators that can be mixed together)
  • 3-band EQ
  • Reverb
  • Arpeggiator

Axiom 2 doesn't have mathematical nodes or support expressions in the graph. Instead, many nodes allow the user to select how the nodes output is applied to the current signal (add, multiply, etc).

The rest of this proposal is a work-in-progress.

Clone this wiki locally