Welcome to Audulus! With Audulus you can build synthesizers from first principles, design new sounds, or process audio. All with real-time low-latency processing suitable for live performance.

To get started, view the the UI Basics video for either Mac or iPad and start experimenting!

Introductions

UI Basics (iPad)

The iPad Audulus UI at a glance:

  • Pinch with two fingers to zoom in and out of your patch.
  • Drag on the background or with two fingers to pan.
  • Double-tap on a node to zoom in for editing.
  • Double-tap on the background to zoom out and see your entire patch.
  • Many operations use context menus - hold down the context menu button with one hand and tap with the other.
  • To create a new node, hold the context menu button, and tap on the background.
  • To make a connection, zoom in and drag from an output to an input.
  • To disconnect, drag from an input.
  • Use connection mode to make connections even while zoomed out.
  • Tap the keyboard button to bring up the on-screen keyboard.
  • Audulus will automatically detect your MIDI keyboard or control surface.

UI Basics (Mac)

The Mac Audulus UI at a glance:

  • many operations use right-click context menus (control click if you have one button)
  • to create a new node, right-click on the background, choose a node category and node type
  • to zoom use the mouse wheel or two fingers on your trackpad
  • to pan, drag the background
  • to select a node just click on it
  • to select multiple nodes, hold shift while clicking
  • to select all the nodes required to compute a node's output, command-click on the node
  • to make a connection between nodes, drag from an output to an input
  • to disconnect, drag from an input
  • to get help on a node, hover the mouse over it for about a second

Presets

Note: presets are currently available on the Mac version. presets will soon be coming to the iPad version!

Presets enable rapid switching between different networks. You might use presets for switching between sounds during a performance or experimenting with different ideas within a single patch.

To store a preset, hold the option key and press one of the number keys. To load a preset press one of the number keys.

Because connections in Audulus fade in/out when connected/disconnected, you can set up your patch so there are no clicks or pops when changing presets.

Also, sharing nodes between presets enables things like delay spillover.

A MIDI program change message will call up a preset, so presets can be used with your MIDI foot controller. This is particularly useful for guitar rigs.

Polyphony

Polyphonic processing in Audulus works seamlessly. A connection between nodes is polyphonic if it is rendered thicker. Nodes are automatically capable of polyphonic processing. So for example, feed a Distortion node with a polyphonic connection and the distortion will be applied separately to each voice in the connection.

A good example of polyphonic processing is the Subtractive example. Set the Keyboard node to "poly" and note the thicker polyphonic connections. That is, up until the voices are mixed down by the PolyToMono node.

Audulus Audio Unit (Mac Only)

To install Audulus as an Audio Unit plugin, download the installer package above.

The installer package will install the Audio Anit to either a user-specific (~/Library/Audio/Plug-Ins/Components) or a system-wide (/Library/Audio/Plug-Ins/Components) location.

The Audulus Audio Unit will appear under the manufacturer name "Subatomic". Both 32 and 64 bit versions are included in the plugin.

The Audulus Audio Unit needs to know the location of the purchased Audulus.app. By default it will look in the Applications folder. If Audulus.app is not in the Applications folder, you will see a button to locate it in the plugin window.

Usage Information

Audulus sends usage information back to us when the app exits. This is of great help in improving the app. The following information will be sent:

  • when the app is launched
  • when a new document is created
  • names of examples opened
  • names of the nodes created
  • errors encountered while running the app
  • the OS version

Nodes Reference

Utilities

AudioUnit Node

Note: not available for iPad.

The AudioUnit node hosts an AudioUnit plug-in. Double-click to open the AudioUnit's view. Many AudioUnit plugins are available for purchase online.

Some AudioUnits are not compatible with Mac App Store apps. If the AudioUnit node shows "Error: see documentation" then download the "unsandboxed" version of Audulus, here. This version requres the Mac App Store version of Audulus to be installed, but doesn't run with the same restrictions. If the unsandboxed version does not fix the error, please contact support.

We plan to implement AudioUnit parameter control via additional node inputs in a future version.

FeedbackDelay Node

The FeedbackDelay node controls where a delay occurs in a feedback loop. Audulus indicates where a feedback delay occurs with a "z" in an input.

Input Node

The input node recieves an input signal, which comes from either:

  • The audio hardware's inputs, if running stand-alone and not within a sub-patch
  • the patch node's input of the same name, if the input node is within a sub-patch
  • the AudioUnit's inputs if running in an AudioUnit and not within a sub-patch.

MonoToQuad Node

The MonoToQuad node converts four mono signals to one four-channel polyphonic signal. It is the inverse of the QuadToMono Node.

MonoToStereo Node

The MonoToStereo node converts two mono signals to a stereo signal. Use the StereoToMono node to convert back.

Output Node

The Output node sends signal output leaving the patch. The signal goes to either:

  • the audio hardware's outputs, if running stand-alone and not within a sub-patch
  • the patch node's output of the same name, the output node is within a sub-patch
  • or the AudioUnit's outputs if running in an AudioUnit and not within a sub-patch

Patch Node

The Patch node is a patch within a patch (or a sub-patch). The patch node's inputs and outputs correspond to the input and output nodes within the sub-patch.

To enter the sub-patch, double-click on the patch node. To exit, select "Exit Sub-Patch" from the View menu.

A patch file may be imported as a sub-patch by selecting "Import Sub-Patch" from the File menu. This imports the file's data, rather than linking to the file.

PolyToMono Node

The PolyToMono node mixes a polyphonic input (denoted by a thick wire) to a monophonic output (thin wire). Each voice is mixed equally.

Typically, you'll want to place linear effects (reverb, delay, EQ) after the PolyToMono, since it will sound the same as placing them before but only a single voice needs to be processed. On the other hand, nonlinear effects, such as Distortion will have quite a different effect if placed before the PolyToMono versus after.

QuadToMono Node

The QuadToMono node converts a four-channel polyphonic signal to four monophonic signals. It is the inverse of the MonoToQuad Node.

StereoToMono Node

The StereoToMono node converts a stereo signal to two mono signals. Use the MonoToStereo node to convert two mono signals to stereo.

Text Node

Text is editable text that can be used to label things and write comments. To edit the text, invoke the context menu on the text.

Time Node

The Time node outputs the transport time (in seconds).

If running as an audio unit, the time node will output the host's current time.

Timer Node

The Timer node outputs the time (in seconds) after its input is triggered.

To see how it works, connect a Trigger node to its input and a Value node to its output.

ZeroCross Node

The ZeroCross node can be used to detect the pitch of a simple waveform. It outputs the frequency of zero-crossings of its input signal in Hertz.

To see how it works, connect a Osc node to its input and a Value node to its output. The zero-cross will esitmate the pitch of the oscillator.

Synthesis

ADSR Node

The ADSR (Attack Decay Sustain Release) node controls the envelope of a note. The control signal can be used for the note's volume, or to vary some other parameter such as a filter cutoff.

The envelope starts when the velocity input becomes greater than zero and decays when the velocity returns to zero. The envelope goes through four stages of attack, decay, sustain, and release each controlled by a knob.

The Attack knob specifies how long in seconds until the note reaches full volume.

The Decay knob specifies how long until (in seconds) the note fades to the sustain level which is, in turn, specified by the Sustain knob.

The Release knob specifies how long (in seconds) until the note fades after the velocity returns to zero.

Noise Node

The Noise node outputs filtered noise. It is a convenient combination of the Random node and the LowPass node.

Osc Node

The Oscillator node is the foundation of most synthesizers. It produces one of the following waveforms, according to its waveforms menu:

  • sine. A neutral waveform with no harmonic character.
  • triangle. Also mellow but with more harmonics.
  • square.
  • sawtooth.

To see what these waveforms look like, set the oscillator's pitch input to 1 and attach the out output to a waveform node.

The pitch input is in units of Hertz.

The sync input will reset the oscillator whenever it crosses 0. To see this in action, hook another low-frequency oscillator to the sync input and watch the waveform node.

The semitones and cents knobs shift the input pitch.

Phasor Node

The Phasor node outputs a sawtooth wave that ranges from 0 to 2π. To create a sin oscillator, connect the Phasor to a Sin node. Or connect the Phasor to a Math Expression Node (Expr) to create your own oscillator or LFO.

Sample Node

Coming soon to iPad.

The Sample node plays a sample. Currently only AIFF files (files with extension .aiff) are supported. Only the first channel is read from the file.

The node's trigger input causes the sample to play. Hook up a Trigger node to the sample node to trigger the sample.

Math

Add Node

The add node adds its two inputs, a and b. Addition of signals is the same as mixing, so the add node can also be used to mix signals (equally).

Div Node

The Div node divides its two inputs, a by b.

Expr Node

The Math Expression Node (Expr) allows the entry of a textual mathematical expression, like 2*x + y + z. The node creates an input for each variable and a single output for the result of the expression.

It has a variety of uses, including: unit conversion, control-signal mapping, wave-shaping or building custom oscillators. It can also be used when doing math with individual nodes is too cumbersome.

The Math Expression Node includes the following operators and functions:

Operators

(x) parenthetical grouping
-x negation
x^y exponentiation: xy
x * y, x / y multiplication, division
x + y, x - y addition, subtraction
x < y, x > y less, greater. 1 if true, 0 if false
x == y equality. 1 if true, 0 if false
x ? a : b conditional. b if x is 0, otherwise a

Functions

Trigonometric functions (angles are in radians)

sin(angle) sine
cos(angle) cosine
tan(angle) tangent
asin(x) arc sine
acos(x) arc cosing
atan(x) arc tangent

Exponential functions

pow(x,y) xy. Can also use x^y as shorthand.
exp(x) ex. Can also use e^x as shorthand.
ln(x) ln
log2(x) log2x
log10(x) log10x
exp2(x) 2x. Can also use 2^x as shorthand.
sqrt(x) square root

Common functions

abs(x) absolute value
floor(x) rounds down to the nearest integer
ceil(x) rounds up to the nearest integer
fract(x) x - floor(x)
mod(x,y) remainder of x / y
min(x,y) returns the lesser of x and y
max(x,y) returns the greater of x and y
clamp(x,a,b) restricts x to the interval [a, b]
step(x, edge) 1 if x > edge, otherwise 0. Hard step.
smoothstep(x, a, b) smooth step from 0 to 1 on the interval [a, b]

LessThan Node

The LessThan node outputs 1 if a < b, otherwise 0.

Mod Node

The mod node computes the remainder of division of a by b.

Mult Node

The mult node multiplies its two inputs, a and b.

Random Node

The Random node outputs random numbers in the range [0, 1].

Sin Node

The Sin node outputs sin(x), where x is its input.

Sub Node

The sub node subtracts its two inputs, a and b.

MIDI

Keyboard Node

The keyboard node converts MIDI note messages as well as interaction with its on-screen keyboard into pitch and velocity signals.

Pitch is expressed as the fundamental frequency of the note in Hertz. MIDI note velocities are scaled to a zero-to-one range.

The keybaord has two modes:

  • Legato. Only one note at a time, and notes will not be re-triggered.
  • Poly. Polyphonic - multiple notes can be played simultaneously.

When in poly mode, the keybaord's pitch and velocity outputs become polyphonic, shown as thicker connections. This can consume considerably more CPU time than monophoic processing. To support polyphony efficiently in your patch, use the PolyToMono node, which will mix the polyphonic signals to monophonic.

Trigger Node

The Trigger node outputs one when its button is pressed, and zero otherwise.

To assign the button to a MIDI key, right-click on the button, select Learn Midi Note and then press a key on your controller. To unassign the MIDI key, select Unassign Note from the button's right-click menu.

Effects

Delay Node

The Delay node time-delays the input signal by a duration specified by the Time knob, in seconds. Time may be modulated.

The Mix knob controls how much of the output is from the delay.

The Feedback knob controls how much of the output is fed back into the input, which determines the level of repeats.

Distortion Node

The Distortion node adds harmonics to a signal by applying a sigmoid function to the signal. As the input signal becomes larger, the sigmoid behaves more like a step function.

To create a great rock distortion sound for electric guitar, run a HighPass node before the distortion, to give the guitar some tightness and a LowPass node after as a tone control. Adjust the HighPass for more of a fuzzy sound. Connect this to a good old tube amp and commence rocking.

Filter Node

The Filter node is a 12db/octave low-pass filter with resonance. To change the filter cutoff frequency and resonance, drag on the filter graph.

The frequency input controls the cutoff frequency of the filter in units of Hertz. The filter's cutoff frequency ranges between 20 Hz and half the current sample rate (e.g. 22 kHz for standard 44 kHz audio).

Resonance amplifies the frequencies close to the cutoff frequency. Resonance may be modulated using the resonance input. Range: 0 to 1.

In the future, this node will be improved with more filter types.

PitchShift Node

The PitchShift node changes the pitch of its in input according to the value of its shift input. If shift is one, the input signal is unchanged. If shift is two, the output will be the input shifted one octave up. If shift is 1/2, the output will be the input shifted one octave down. Best results are achieved when shift is between 1/2 and 2.

The PitchShift node uses the FFT-based phase vocoder algorithm, which is polyphonic.

Level

Constant Node

The Constant node outputs a constant value specified by its knob.

Level Node

The Level node adjusts the level of its input. For example:

Mapper Node

The Mapper node transforms input according to a curve. Three control points manipulate the curve. For the more technically inclined among you, the curve is a quadratic Bezier.

Range Node

The Range clamps its input within a range specified by the min and max inputs.

Spline Node

The Spline node provides an arbitrary piecewise-linear envelope. That is, it connects some points with lines to make a function. The node's input takes the x-coordinate and output provides the y-coordinate.

Among the Spline node's uses are pitch envelopes, amplitude envelopes, oscillator waveforms, velocity curves, and automation control.

  • To create a control point, double tap on the function area.
  • To move a control point, drag it.
  • To delete a control point, double tap on it

The value boxes on the left control the min and max value of the function. Control for the scale of the x-axis will be added in a future version.

The red dot shows the current input and output values.

Mixer

Crossfade Node

The Crossfade node blends between its two inputs according to the value of the mix knob.

Mixer4x1 Node

The Mixer4x1 node mixes its four inputs equally. Level nodes may be used to vary the level of each channel prior to mixing.

In the future we plan to build a more full-featured mixer node.

Metering

Light Node

The Light node will light up when its input has a value greater than zero.

Meter Node

The Meter node implements a simple level meter.

This node will be improved with better metering and options in the future.

Value Node

The Value node displays the current value of its input. For example:

Waveform Node

The Waveform node shows a signal as a horizontally scrolling waveform. Hook an output of a node to its input to see what the signal looks like over time. Its a great debugging tool.

DSP

DCBlocker Node

The DCBlocker node prevents a signal from being slowly ofsetted from zero.

HighPass Node

The HighPass node implements a 12db/octave high-pass filter. Its implementation is very simple and efficient.

LowPass Node

The LowPass node implements a 12db/octave low-pass filter. Its implementation is very simple and efficient.

SampleRate Node

The SampleRate node outputs the current sample rate. The sample rate is usually 44.1kHz but may be higher if the audio interface is running at a higher rate.

UnitDelay Node

WARNING: This node is currently in beta.

The UnitDelay node is a single-sample delay. Like the FeedbackDelay node, the UnitDelay can be used to determine where a delay occurs in a feedback loop.

The presence of a UnitDelay node in the patch causes Audulus to switch into single-sample processing mode. This requires considerably more CPU. We are working on a way to improve that.

Switch

Demux8 Node

The Demux8 node is an 8-way demultiplexer. The sel input selects which of the 8 outputs the input is routed to.

Mux8 Node

The Mux8 node is an 8-way multiplexer. The sel input selects which of the 8 inputs are routed to the output.