Audio sources. Their amplitude can be piped into any scalar socket for audio-reactive effects.
Generators
Audio LFO
audio-lfo
Audio-rate modulator. Wire into a mod input (Filter cutoff, Oscillator freq/level, Channel gain/pan) — the wave sweeps that knob between min and max, in the knob's own units, smoothly at audio rate. For frame-rate modulation of any other param, use the regular LFO node instead.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.LFO once the chain reaches a mod input.
gotcha
min/max are read in the destination param's own units (e.g. ±500 on a cutoff mod = ±500 Hz around the knob), not normalized — mod inputs need no separate depth knob.
gotcha
The wave sums with the destination knob's value inside the audio clock domain; wire it into a mod input (Filter cutoff_mod, Oscillator freq_mod/level_mod, Channel gain_mod/pan_mod).
gotcha
Wiring it into a regular audio input works technically (it's a signal) but is heard as a raw DC-ish ramp, not a tone.
gotcha
phase is in degrees (0..360), not radians.
Parameters
Name
Type
Default
Shape
shape
enum
"sine"
sine · square · sawtooth · triangle
Rate (Hz)
rate
scalar
0.01 … 40
2
Min (dest units)
min
scalar
-20000 … 20000
-500
Max (dest units)
max
scalar
-20000 … 20000
500
Phase (°)
phase
scalar
0 … 360
0
Sockets
Direction
Name
Type
outputprimary
out
audio
Audio Source
audio-source
Play an audio file or pipe microphone input into the graph. Connect the output to the Output node's audio socket to hear it during playback.
space
param:start_offset=time
reads
time
flags
unstable
gotcha
Audible only when this source's output reaches the Output node's audio socket (ctx.audioRoutedToOutput); otherwise it keeps advancing for downstream amplitude data but plays muted.
gotcha
mode=microphone requests getUserMedia once on first compute and reuses the stream after; volume is the only param it honors, loop/sync_to_scene_time/start_offset are file-only.
gotcha
sync_to_scene_time seeks the element to ctx.time + start_offset only when drift exceeds 100ms, wrapping modulo duration if loop is on, else clamping to the end.
gotcha
Layer pre-roll (ctx.preroll) holds the element paused in both sync and free-run modes, so audio never leads the cut.
gotcha
stable:false forces re-evaluation every frame to track ctx.playing; disconnecting the node mid-playback lets the element keep playing until the next param change or delete.
Parameters
Name
Type
Default
Mode
mode
enum
"file"
file · microphone
Audio file
file
audio_file
—
Volume
volume
scalar
0 … 1
1
Loop
loop
boolean
true
Sync to scene time
sync_to_scene_time
boolean
true
Start offset (s)
start_offset
scalar
0 … 600
0
Sockets
Direction
Name
Type
outputprimary
out
audio
Audio Spectral
audio-spectral
Turn audio into a spectrum image — a scalar field (frequency × magnitude) to drive Displace, Copy-to-Points, gradients, SDF fields, and more. Linear / log / mel / waveform / chroma / 2D spectrogram.
flags
unstable, no-mask
gotcha
retimeable:false — reads a live AnalyserNode tap, so Time Offset treats this as a closure boundary and feeds the outer field through un-shifted.
gotcha
algorithm=spectrogram always renders as log-frequency columns regardless of the algorithm dropdown; it accumulates one column per scene frame live.
gotcha
Offline, the spectrogram's row history is reconstructed deterministically with one FFT per row at each row's preceding frame time, not resampled from live state.
gotcha
smoothing is a temporal one-pole filter applied only to the 1D field (linear/log/mel/waveform/chroma), reset whenever bins changes; it does not affect the spectrogram.
gotcha
chroma folds all bins into 12 octave-independent pitch classes rather than mapping bins to frequency, so its column order is C..B, not low..high Hz.
gotcha
orientation=vertical swaps frequency onto the Y axis; mirror folds both halves of the axis around the center instead of running low-to-high across it.
gotcha
With no audio wired or no live frame yet, the output image is cleared to opaque black rather than left unset.
Polyphonic FM synth voice — the notes→audio rasterizer for bells, keys, and metallic tones. Wire a notes source (Step Pattern) into it, route the audio into a Layer Output audio socket or the Output node, and press Play. Harmonicity sets the modulator ratio, modulation index the brightness.
flags
no-mask
gotcha
compute() does no audio work: it builds an instrument descriptor the audio engine turns into a Tone.PolySynth(FMSynth); notes pass through by reference for reschedule diffing.
gotcha
No notes wired, or an empty notes array, emits nothing — route the audio into a Layer Output or the Output node and press Play to hear it.
gotcha
harmonicity is the carrier:modulator frequency ratio; mod_index sets FM depth/brightness — together they cover bells, electric pianos, and metallic percussion.
Parameters
Name
Type
Default
Harmonicity
harmonicity
scalar
0.25 … 8
3
Mod index
mod_index
scalar
0 … 40
10
Attack (s)
attack
scalar
0.001 … 2
0.01
Decay (s)
decay
scalar
0.001 … 2
0.15
Sustain
sustain
scalar
0 … 1
0.5
Release (s)
release
scalar
0.001 … 5
0.3
Level
level
scalar
0 … 1
0.7
Sockets
Direction
Name
Type
input*
Notes
notes
notes
outputprimary
out
audio
MIDI Editor
midi-editor
Author notes on a piano roll. Double-click the node (or press its Edit button) to open the editor over the viewport; wire the notes output into an instrument (Synth, FM Synth, Sampler). Notes live on the scene timeline — bars follow the project BPM.
flags
no-mask
gotcha
Notes live in the hidden `notes` param (notes_clip, absolute scene ticks) authored via the piano-roll editor (double-click the node, or its Edit button) — not the param panel.
gotcha
loop=true tiles only notes starting inside [0, loop_end_bars) for loop_repeats cycles; notes at/after the loop point go silent while looping, and a boundary-crossing note keeps its full duration.
gotcha
Unlike Step Pattern, this data is authored, not tempo-derived: changing the project BPM moves the piano-roll grid but never the stored notes.
gotcha
fingerprintExtras only folds in bpm/ticksPerFrame/fps while loop=true; with loop off the def caches purely off params, unaffected by tempo changes.
Parameters
Name
Type
Default
New-note velocity
default_velocity
scalar
0 … 1
0.8
Loop
loop
boolean
false
Loop end (bars)
loop_end_bars
scalar
0.25 … 256
4
Repeats
loop_repeats
scalar
1 … 512
32
Sockets
Direction
Name
Type
outputprimary
out
notes
Noise
audio-noise
Seeded noise source (white / pink / brown) — the same seed produces the exact same sound live and in exports. Audible while the timeline plays and the chain reaches the Output node's audio socket, a Layer Output's audio socket, or the Active node.
flags
no-mask
gotcha
Descriptor only: compute() emits a generator descriptor; the audio engine builds the actual sample buffer from a seeded PRNG once the chain reaches an audio output.
gotcha
seed makes playback deterministic (same seed -> identical samples live and in exports), unlike Tone.Noise's Math.random; use different seeds to decorrelate two Noise nodes.
gotcha
type is white/pink/brown noise color, not a waveform.
Parameters
Name
Type
Default
Type
type
enum
"white"
white · pink · brown
Level
level
scalar
0 … 1
0.3
Seed
seed
scalar
0 … 9999
0
Sockets
Direction
Name
Type
outputprimary
out
audio
Oscillator
audio-oscillator
Free-running audio tone (sine / square / sawtooth / triangle). Wire it through audio effects into the Output node's audio socket — it sounds while the timeline plays. Keyframe or wire the frequency for sweeps.
flags
no-mask
gotcha
No note input by design: this is a free-running drone, not an instrument; notes-to-audio crossing happens in the instrument nodes instead.
gotcha
freq_mod and level_mod sum into freq/level inside the audio clock domain: audio-rate freq_mod is FM, level_mod is tremolo/AM.
gotcha
detune is in cents (-1200..1200), separate from freq which is Hz.
gotcha
Descriptor only: compute() emits a generator descriptor; the audio engine builds the live Tone.Oscillator when the chain reaches an output.
Parameters
Name
Type
Default
Waveform
wave
enum
"sine"
sine · square · sawtooth · triangle
Frequency (Hz)
freq
scalar
1 … 20000
220
Detune (cents)
detune
scalar
-1200 … 1200
0
Level
level
scalar
0 … 1
0.5
Sockets
Direction
Name
Type
input
Freq mod
freq_mod
audio
input
Level mod
level_mod
audio
outputprimary
out
audio
Player
audio-player
Play an audio file through the chain — unlike Audio Source, the signal is processable, so effects, rate changes, and export mixdown all apply. Audible while the timeline plays and the chain reaches the Output node's audio socket, a Layer Output's audio socket, or the Active node.
gotcha
With no file picked (including right after a project reload, since file params don't serialize) compute() returns {} — the chain carries nothing rather than a dead stage.
gotcha
rate changes both speed and pitch together (tape-style), unlike Audio Transpose which shifts pitch alone; range is 0.25..4.
gotcha
Playback is synced to the timeline transport — scene play/pause/seek drive it, not a wall clock — and offline export decodes the same file URL deterministically.
gotcha
start_offset (seconds) is where playback begins within the file, not a delay before it starts.
Parameters
Name
Type
Default
Audio file
file
audio_file
—
Level
level
scalar
0 … 1
0.8
Rate
rate
scalar
0.25 … 4
1
Loop
loop
boolean
true
Start offset (s)
start_offset
scalar
0 … 600
0
Sockets
Direction
Name
Type
outputprimary
out
audio
Sampler
audio-sampler
Pitched sample playback — the notes→audio rasterizer for one-shots. Load an audio file, set the MIDI root pitch it was recorded at, and every incoming note replays it repitched. Wire a notes source (Step Pattern) into it, route the audio into a Layer Output audio socket or the Output node, and press Play.
flags
no-mask
gotcha
With no notes wired, an empty notes array, or no file loaded, compute() returns {} — nothing plays.
gotcha
root_pitch is the MIDI note the recording was made at; every incoming note is repitched relative to it, so a wrong root_pitch transposes every note.
gotcha
release (seconds) is the tail after note-off, independent of the sample's own natural decay.
gotcha
The notes array is passed through by reference (never copied) for the reconciler's identity diff, so an upstream node must hand back a new array, not mutate in place, for a change to register.
Parameters
Name
Type
Default
Sample file
file
audio_file
—
Root pitch (MIDI)
root_pitch
scalar
0 … 127
60
Release (s)
release
scalar
0.001 … 5
0.5
Level
level
scalar
0 … 1
0.8
Sockets
Direction
Name
Type
input*
Notes
notes
notes
outputprimary
out
audio
Step Pattern
audio-step-pattern
Text-pattern note trigger: each character is one step — `x` = hit, `X` = accented hit (velocity 1), `.` or `-` = rest, anything else is ignored (spaces are fine as separators). One step lasts the chosen division at the Project Settings BPM; the pattern tiles from the timeline start. Wire the notes output into an instrument (Synth / FM Synth / Sampler) to hear it.
flags
no-mask
gotcha
"X" (accent) always fires at velocity 1, ignoring the velocity param, which only applies to lowercase "x" hits.
gotcha
Any character besides x/X/./- is skipped entirely, not treated as a rest, so "x... x..." reads identically to "x...x..." — separators don't shift the grid.
gotcha
gate is the note's duration as a fraction of one step (0.05..1), not seconds; duration = gate x step length.
gotcha
swing delays every 2nd step by swing x step/2 on the absolute tick-0 grid (not the pattern-local index), so odd-length patterns swing consistently across repeats.
gotcha
One step's length is set by division (beats = 4/denominator) at the project's BPM (Project Settings), so changing BPM re-times the whole pattern.
gotcha
The tick math reads ctx.bpm/ticksPerFrame/fps outside the params fingerprint; fingerprintExtras folds them in so a BPM change busts the cache instead of serving a stale-tempo pattern.
Parameters
Name
Type
Default
Pattern
pattern
string
"x...x...x...x..."
Division
division
enum
"1/16"
1/4 · 1/8 · 1/16 · 1/32
Pitch (MIDI)
pitch
scalar
0 … 127
36
Velocity
velocity
scalar
0 … 1
0.8
Gate
gate
scalar
0.05 … 1
0.5
Swing
swing
scalar
0 … 0.75
0
Repeats
repeats
scalar
1 … 256
64
Sockets
Direction
Name
Type
outputprimary
out
notes
Synth
audio-synth
Polyphonic synth voice — the notes→audio rasterizer. Wire a notes source (Step Pattern) into it, route the audio into a Layer Output audio socket or the Output node, and press Play. Waveform picks the tone; the ADSR envelope shapes each note.
flags
no-mask
gotcha
With no notes wired or an empty notes array, compute() returns {} — the chain carries nothing and no voices are scheduled.
gotcha
Polyphonic (Tone.PolySynth): overlapping note events in the wired notes stack as separate voices rather than stealing/retriggering one voice.
gotcha
attack/decay/release are seconds; sustain is a level fraction (0..1), not a time.
gotcha
The notes array is passed through by reference (never copied) for the reconciler's identity diff, so an upstream node must hand back a new array, not mutate in place, for a change to register.
Parameters
Name
Type
Default
Waveform
wave
enum
"sawtooth"
sine · square · sawtooth · triangle
Attack (s)
attack
scalar
0.001 … 2
0.01
Decay (s)
decay
scalar
0.001 … 2
0.15
Sustain
sustain
scalar
0 … 1
0.5
Release (s)
release
scalar
0.001 … 5
0.3
Level
level
scalar
0 … 1
0.7
Sockets
Direction
Name
Type
input*
Notes
notes
notes
outputprimary
out
audio
Modifiers
BitCrusher
audio-bitcrusher
Lo-fi bit-depth reduction: crushes the signal down to as few as 1 bit for digital grit and crunch, with a wet/dry blend. Wire an audio chain through it — keyframed bits and wet changes ramp click-free.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.BitCrusher once the chain reaches an audio output.
gotcha
bits is the number of quantization levels (1 = 2 levels, extreme crush; 16 ≈ transparent), not a sample-rate/downsample control.
Parameters
Name
Type
Default
Bits
bits
scalar
1 … 16
4
Wet
wet
scalar
0 … 1
1
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Channel
audio-channel
The utility strip: gain (dB), stereo pan, and a mute switch for any point in an audio chain. Wire audio through it to trim levels or place a part in the stereo field — gain and pan changes ramp click-free and are keyframable.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.Channel once the chain reaches an audio output.
gotcha
gain_mod sums on a LINEAR unity stage AFTER the dB gain knob (an Audio LFO at min -0.5/max 0.5 makes a tremolo); pan_mod sums directly with the pan knob (-1..1) for autopan.
Parameters
Name
Type
Default
Gain (dB)
gain
scalar
-60 … 12
0
Pan
pan
scalar
-1 … 1
0
Mute
mute
boolean
false
Sockets
Direction
Name
Type
input*
Audio
audio
audio
input
Gain mod
gain_mod
audio
input
Pan mod
pan_mod
audio
outputprimary
out
audio
Chorus
audio-chorus
Thickens and widens the signal by mixing in slightly delayed, LFO-detuned copies. Rate and depth set the wobble; spread pans the two LFOs apart for stereo width.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.Chorus once the chain reaches an audio output.
gotcha
The two detune LFOs start freely when the effect stage is created; an offline export forces phase 0 for determinism, so live-preview wobble timing can drift from the render (audibly equivalent).
gotcha
spread pans the two LFOs apart in stereo degrees (0 = mono wobble, 180 = fully opposite channels).
Parameters
Name
Type
Default
Rate (Hz)
rate
scalar
0.1 … 10
1.5
Depth
depth
scalar
0 … 1
0.7
Delay (ms)
delay_ms
scalar
2 … 20
3.5
Spread (deg)
spread
scalar
0 … 180
180
Wet
wet
scalar
0 … 1
0.5
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Compressor
audio-compressor
Dynamic range compressor: signal above the threshold is reduced by the ratio, with attack/release envelope timing and a soft knee. Wire an audio chain through it to tame peaks or glue a mix — parameter changes ramp click-free and are keyframable.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.Compressor once the chain reaches an audio output.
gotcha
attack/release are in seconds, not milliseconds; knee is a soft-knee WIDTH in dB, not a threshold offset.
gotcha
Default knee (30 dB) is very soft — close to the 40 dB max — so gain reduction engages gradually well below threshold rather than as a hard cutoff.
Parameters
Name
Type
Default
Threshold (dB)
threshold
scalar
-60 … 0
-24
Ratio
ratio
scalar
1 … 20
4
Attack (s)
attack
scalar
0.001 … 1
0.003
Release (s)
release
scalar
0.01 … 1
0.25
Knee (dB)
knee
scalar
0 … 40
30
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Crossfade
audio-crossfade
Equal-power blend between two audio inputs. fade 0 = all A, 1 = all B; keyframe it — or drive it from Audio Bands — for smooth source transitions.
flags
no-mask
gotcha
Composes directly into a 2-lane 'mix' chain descriptor (audio-adapters-routing.ts) rather than using a dedicated crossfade adapter.
gotcha
fade uses an equal-power curve (A = cos(fade·π/2), B = sin(fade·π/2)), so summed power stays constant — unlike a linear fade's -3dB dip at center.
gotcha
A one-sided wire (only A or only B) still plays, at that side's equal-power gain for the current fade — it is never fully muted.
gotcha
Audio→scalar taps (Audio Bands, etc.) read whichever side has a chain (A preferred over B), that side's raw pre-fade signal.
Parameters
Name
Type
Default
Fade (A → B)
fade
scalar
0 … 1
0.5
Sockets
Direction
Name
Type
input
A
a
audio
input
B
b
audio
outputprimary
out
audio
Delay
audio-delay
Echo effect: repeats the signal after a set time, with feedback controlling how many repeats trail off. Ping-pong mode bounces the echoes between left and right channels.
flags
no-mask
gotcha
mode swaps the underlying Tone class (FeedbackDelay vs PingPongDelay) via the effect's fx key, so switching modes recreates the stage rather than retuning it in place.
gotcha
feedback (0..0.95) is the per-repeat decay ratio, not a repeat count; time is the delay length in seconds (0.001..2).
Parameters
Name
Type
Default
Mode
mode
enum
"normal"
normal · ping-pong
Time (s)
time
scalar
0.001 … 2
0.25
Feedback
feedback
scalar
0 … 0.95
0.35
Wet
wet
scalar
0 … 1
0.5
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Distortion
audio-distortion
Waveshaping distortion: drive sets the amount of grit, oversample trades CPU for less aliasing, and wet blends against the dry signal. Wire an audio chain through it — keyframed drive and wet changes ramp click-free.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.Distortion once the chain reaches an audio output.
gotcha
oversample is a string enum ("none"/"2x"/"4x") trading CPU for less aliasing, not a numeric multiplier param.
Parameters
Name
Type
Default
Drive
drive
scalar
0 … 1
0.4
Oversample
oversample
enum
"2x"
none · 2x · 4x
Wet
wet
scalar
0 … 1
1
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
EQ
audio-eq3
Three-band equalizer: boost or cut low / mid / high in dB, with adjustable band crossover frequencies. Wire an audio chain through it and keyframe the band gains — changes ramp click-free.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.EQ3 once the chain reaches an audio output.
gotcha
low_freq/high_freq (Hz) are the crossover boundaries between bands, not band centers; low/mid/high are independent dB trims applied on either side of those boundaries.
Parameters
Name
Type
Default
Low (dB)
low
scalar
-24 … 12
0
Mid (dB)
mid
scalar
-24 … 12
0
High (dB)
high
scalar
-24 … 12
0
Low Crossover (Hz)
low_freq
scalar
40 … 1000
400
High Crossover (Hz)
high_freq
scalar
1000 … 12000
2500
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Filter
audio-filter
Filter an audio signal (low-pass / high-pass / band-pass / notch) with cutoff and resonance. Keyframe the cutoff — or drive it from Audio Bands — for sweeps.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds the Tone.Filter once the chain reaches an audio output.
gotcha
cutoff is Hz (20..20000) and keyframed or driven changes ramp click-free; wire an audio signal to cutoff_mod to modulate it at audio rate.
gotcha
rolloff is a string enum ("-12" / "-24" / "-48" dB per octave), not a number.
Parameters
Name
Type
Default
Type
type
enum
"lowpass"
lowpass · highpass · bandpass · notch
Cutoff (Hz)
cutoff
scalar
20 … 20000
800
Resonance (Q)
q
scalar
0.05 … 20
1
Rolloff (dB/oct)
rolloff
enum
"-12"
-12 · -24 · -48
Sockets
Direction
Name
Type
input*
Audio
audio
audio
input
Cutoff mod
cutoff_mod
audio
outputprimary
out
audio
Limiter
audio-limiter
Loudness limiter: clamps the signal to the threshold ceiling with a fast, max-ratio compressor — put it last in an audio chain to stop peaks and protect the output. Threshold changes ramp click-free and are keyframable.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work; the audio engine builds a Tone.Limiter (a fast, max-ratio compressor) once the chain reaches an audio output.
gotcha
Has only a threshold (dB) control — no attack/release/ratio — so it is meant last in a chain to catch peaks, not to shape dynamics.
Parameters
Name
Type
Default
Threshold (dB)
threshold
scalar
-60 … 0
-6
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Phaser
audio-phaser
Classic swirling phaser: an LFO sweeps a bank of all-pass filters through the spectrum. Rate sets the sweep speed, octaves its range above the base frequency.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() wraps the upstream chain in an effect descriptor; the audio engine builds the Tone.Phaser when the chain reaches an output.
gotcha
Element taps downstream (audio-to-scalar, Audio Bands) read the pre-phaser element signal, not the phased output, until true post-stage taps land.
gotcha
octaves sets the sweep range above base_freq; rate is the LFO speed in Hz, not the notch count.
gotcha
The LFO starts at phase 0 in the offline export context, so exports are deterministic against live playback.
Parameters
Name
Type
Default
Rate (Hz)
rate
scalar
0.1 … 10
0.5
Octaves
octaves
scalar
0 … 8
3
Base Freq (Hz)
base_freq
scalar
20 … 2000
350
Wet
wet
scalar
0 … 1
0.5
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Reverb
audio-reverb
Adds room or hall ambience with a deterministic convolution reverb. Decay sets how long the tail rings out; pre-delay separates the dry sound from the onset of the reverb.
flags
no-mask
gotcha
Impulse response is generated from seeded noise, never Tone.Reverb's unseeded randomness, so exports render byte-identically run to run; IRs are cached per (decay, pre_delay, sample rate).
gotcha
Element taps downstream (audio-to-scalar, Audio Bands) read the pre-reverb element signal, not the wet output, until true post-stage taps land.
gotcha
decay is the tail length in seconds (0.1..20); pre_delay (0..0.5s) gaps the dry onset from the reverb start, it does not shorten the tail.
Parameters
Name
Type
Default
Decay (s)
decay
scalar
0.1 … 20
2.5
Pre-delay (s)
pre_delay
scalar
0 … 0.5
0.01
Wet
wet
scalar
0 … 1
0.35
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
audio
Transpose
audio-transpose
Shifts every note in a notes stream by ± semitones (clamped to the MIDI 0–127 range). Keyframe it for key changes; fractional values detune.
flags
no-mask
gotcha
semitones === 0 passes the input notes value through by identity (===), so a no-op Transpose costs nothing on the reconciler's fast path.
gotcha
Result pitch is clamped to MIDI 0..127, so large shifts near the range edges silently flatten instead of wrapping.
gotcha
semitones is float-legal (not just integer steps), so a keyframed fractional value reads as continuous detune rather than a key change.
Parameters
Name
Type
Default
Semitones
semitones
scalar
-48 … 48
0
Sockets
Direction
Name
Type
input*
Notes
notes
notes
outputprimary
out
notes
Utilities
Audio Bands
audio-bands
Split audio into Low / Mid / High energy (3 scalar outputs) plus an overall level. Drive parameters from a frequency band — bass on scale, highs on a flicker, etc.
flags
unstable, no-mask
gotcha
Reads the live AnalyserNode tap every frame (stable:false); retimeable:false, so Time Offset feeds the current band energies through un-shifted instead of resampling at a shifted time.
gotcha
crossover_hi is clamped to be ≥ crossover_lo; both are in Hz.
gotcha
scale=db remaps each band's dB level within [db_floor, db_ceil] to [0,1] then multiplies by gain; scale=linear multiplies the raw magnitude by gain directly.
gotcha
All four outputs (primary level, aux low/mid/high) are one-pole smoothed by `smoothing` — 0 tracks instantly, near 1 barely moves.
gotcha
primary level is the overall RMS of the time-domain signal, computed independently of the low/mid/high split — it is not their sum or average.
Parameters
Name
Type
Default
Low / Mid (Hz)
crossover_lo
scalar
20 … 20000
250
Mid / High (Hz)
crossover_hi
scalar
20 … 20000
4000
Gain
gain
scalar
0 … 100
4
Smoothing
smoothing
scalar
0 … 0.99
0.5
Scale
scale
enum
"linear"
linear · db
dB floor
db_floor
scalar
-120 … 0
-60
dB ceil
db_ceil
scalar
-60 … 12
0
Sockets
Direction
Name
Type
input*
Audio
audio
audio
outputprimary
out
scalar
outputaux
low
scalar
outputaux
mid
scalar
outputaux
high
scalar
Audio Merge
audio-mergepolymorphic
Mixes up to 8 audio inputs into one signal with per-lane gain, pan, mute, and solo. Set `lanes` to grow the input sockets; gains and pans are keyframable — or drive them from any scalar — for automated mixes.
flags
no-mask
gotcha
Descriptor in, descriptor out: compute() does no audio work, only builds a 'mix' descriptor from per-lane gain/pan/mute strips.
gotcha
gain is a linear multiplier (0..2, default 1), not dB — unlike Channel's gain, which is in dB.
gotcha
Any soloed lane forces mute on, at descriptor-build time, for every other visible lane; a soloed lane still honors its own mute.
gotcha
Unwired lanes are skipped entirely — no strip and no silent lane is created for them.
gotcha
Audio→scalar taps (Audio Bands, etc.) read the first wired lane's raw pre-mix signal, not the summed mix output.
Parameters
Name
Type
Default
Lanes
lanes
scalar
2 … 8
2
Gain 1
gain1
scalar
0 … 2
1
Pan 1
pan1
scalar
-1 … 1
0
Mute 1
mute1
boolean
false
Solo 1
solo1
boolean
false
Gain 2
gain2
scalar
0 … 2
1
Pan 2
pan2
scalar
-1 … 1
0
Mute 2
mute2
boolean
false
Solo 2
solo2
boolean
false
Gain 3
gain3
scalar
0 … 2
1
Pan 3
pan3
scalar
-1 … 1
0
Mute 3
mute3
boolean
false
Solo 3
solo3
boolean
false
Gain 4
gain4
scalar
0 … 2
1
Pan 4
pan4
scalar
-1 … 1
0
Mute 4
mute4
boolean
false
Solo 4
solo4
boolean
false
Gain 5
gain5
scalar
0 … 2
1
Pan 5
pan5
scalar
-1 … 1
0
Mute 5
mute5
boolean
false
Solo 5
solo5
boolean
false
Gain 6
gain6
scalar
0 … 2
1
Pan 6
pan6
scalar
-1 … 1
0
Mute 6
mute6
boolean
false
Solo 6
solo6
boolean
false
Gain 7
gain7
scalar
0 … 2
1
Pan 7
pan7
scalar
-1 … 1
0
Mute 7
mute7
boolean
false
Solo 7
solo7
boolean
false
Gain 8
gain8
scalar
0 … 2
1
Pan 8
pan8
scalar
-1 … 1
0
Mute 8
mute8
boolean
false
Solo 8
solo8
boolean
false
Sockets
Direction
Name
Type
input
In 1
in1
audio
input
In 2
in2
audio
outputprimary
out
audio
Audio Pitch
audio-pitch
Detect the pitch of an audio signal and quantize it to a musical scale. Drive a parameter with melody — note as MIDI, normalized 0..1, or raw Hz, with hold + glide for smooth stepping.
flags
unstable, no-mask
gotcha
retimeable:false — this reads a live AnalyserNode tap, so Time Offset treats it as a closure boundary and feeds the outer pitch value through un-shifted.
gotcha
Pitch detection is McLeod's NSDF method on the time-domain buffer, bounded by min_note/max_note converted to Hz, not FFT bins.
gotcha
as=normalized maps min_note..max_note to 0..1; as=midi returns the fractional MIDI note; as=hz converts back to Hz.
gotcha
When unvoiced (clarity below threshold) and hold=true, the primary keeps gliding toward the last voiced note while aux hz/confidence/gate all read 0.
gotcha
quantize=edo divides the octave into `divisions` equal steps from root, ignoring the scale param; quantize=scale/chromatic snap to the nearest allowed semitone.
Parameters
Name
Type
Default
Min note (MIDI)
min_note
scalar
0 … 127
36
Max note (MIDI)
max_note
scalar
0 … 127
84
Output
as
enum
"normalized"
normalized · midi · hz
Quantize
quantize
enum
"chromatic"
off · chromatic · scale · edo
Root
root
enum
"C"
C · C# · D · D# · E · F · F# · G · G# · A · A# · B
Scale
scale
enum
"major"
major · minor · pentatonic_major · pentatonic_minor · whole_tone