Pitch and Scales
Pitch travels through a patch in more than one form. A MIDI note number, a v/oct control voltage, and a frequency in Hz can all describe the same note, and different nodes expect different ones.
Throughline handles compatible conversions on the connection itself, so a lot of pitch patching just works. This page covers the cases where you want the conversion or the harmonic constraint to be something you can see.
Pitch Domains
| Domain | Unit | Looks like |
|---|---|---|
| MIDI note | midiNote |
60 is middle C |
| Pitch CV | v/oct |
Relative to C4 |
| Frequency | Hz |
440 is A4 |
MIDI Decode emits Pitch as v/oct. Oscillator takes a Pitch input that accepts MIDI, control, or a plain number. Because those agree, the cable between them needs nothing in the middle.
Use Convert when you want the domain change to be explicit in the graph — because it is part of the design, because several destinations share it, or because a reader would otherwise have to infer it. The input meaning follows the connected upstream source, and the node's dropdown chooses the target domain.
See Data Types and Conversion for the wider rules on units and coercion.
Constraining to a Key
Two nodes snap notes to a scale, and which one you want depends on what is flowing.
- Quantize Pitch constrains a control pitch signal. Use it inside a modulation or CV path.
- MIDI Scale Quantize constrains a MIDI note stream. Use it in a MIDI chain — see MIDI Processing.
Both offer Root and Scale. Available scales are Chromatic, Major, Minor, Pentatonic, Blues, Dorian, and Mixolydian; Quantize Pitch adds Custom.
Quantizing is what makes randomness musical. A Random or Sample & Hold source produces values with no regard for key; quantize downstream and the same source becomes a usable melodic line.
There Is No Patch-Wide Key
This is the part worth reading carefully.
Throughline has no global key setting that every node quietly obeys. Scale and root are authored on the node that does the constraining, and they apply only to the path that node sits on. Two Quantize Pitch nodes in one patch can enforce two different tonalities, and that is deliberate — a bass line and a pad can disagree.
The consequence: adding a quantizer somewhere does not put the rest of the patch in key. Every pitch path that needs a constraint needs its own quantizer.
Sharing One Scale Decision
When several quantizers should agree, patching them individually means changing key in several places. Scale solves that.
Scale has Key and Scale parameters and a single Scale output. Patch that output into the Scale input of any quantizer and the quantizer follows the node instead of its own settings. One node then holds the harmonic decision for as many destinations as you wire.
Connecting a Scale node still does not create a patch-wide key. It only affects the quantizers you actually connect it to. The difference is that the decision now lives in one visible place rather than being duplicated across parameter rows.
Diagram as text
Scale connects to Quantize Pitch via Scale. Scale connects to MIDI Scale Quantize via Scale. Random connects to Quantize Pitch via Value. Quantize Pitch connects to Oscillator via Pitch.
graph LR
SCALE[Scale] -->|Scale| Q1[Quantize Pitch]
SCALE -->|Scale| Q2[MIDI Scale Quantize]
RAND[Random] -->|Value| Q1
Q1 -->|Pitch| OSC[Oscillator]Sliding Between Notes
Glide smooths a control signal toward each new value, which is portamento when the signal is pitch. Put it between a pitch source and an oscillator's Pitch input.
Place it after any quantizer. Quantize then glide, and the patch slides between in-key notes. Glide then quantize, and the quantizer snaps the slide into a staircase.
Common Patch Examples
Random melody in key
- A clock or LFO trigger → Sample & Hold.
- → Quantize Pitch with a Root and Scale.
- → Oscillator Pitch.
Diagram as text
Clock connects to Sample & Hold via Trigger. Sample & Hold connects to Quantize Pitch via Value. Quantize Pitch connects to Oscillator via Pitch.
graph LR
TRIG[Clock] -->|Trigger| SH[Sample & Hold]
SH -->|Value| QUANT[Quantize Pitch]
QUANT -->|Pitch| OSC[Oscillator]Transpose a performance
Use MIDI Transpose on the MIDI stream rather than arithmetic on a pitch signal. It shifts by Semitones and Octaves and can clamp the result to the valid MIDI range. Math nodes do raw arithmetic and know nothing about notes — see Math and Logic.
Rules of Thumb
- Compatible pitch connections need no conversion node. Use Convert when you want the change to be visible.
- There is no global key. Constrain each pitch path that needs it.
- Use Quantize Pitch for control signals, MIDI Scale Quantize for MIDI.
- Patch a Scale node into several quantizers to keep one harmonic decision in one place.
- Quantize before you glide.