Bird Notation
Bird is a musical notation designed for composition of modern electronic music. Think of it as Markdown for music.File Structure
A.bird file has these sections, in order:
- Signature — set BPM, key, and scale
- Global track definitions — declare tracks with their instruments, effects, and channel strips
- Motif definitions (optional) — reusable MIDI pattern fragments
- Arrangement — define the section order and bar counts
- Section definitions — write the musical content for each section
[!NOTE] The olderchandchannelskeywords are still accepted by the parser for backward compatibility, but new files should usetrkandtracks.
Motif Definitions
Motifs are reusable MIDI pattern fragments defined at the top level of a bird file. They appear between track definitions and the arrangement. A motif is a namedPatternGroup — it supports the full pattern vocabulary (p/v/n/t/sw/MPE/voice layers).
motif <name> <length_beats>. The body uses the same 2-space indent as sections and tracks. All pattern features work inside motifs: bracket subdivisions, euclidean rhythms, dotted/triplet durations, voice layers, MPE, swing, groove.
Motif Operations
When referencing a motif with@name(ops), operations are applied left to right, comma-separated:
| Operation | Syntax | Description |
|---|---|---|
transpose | transpose 7 | Shift all pitches by N semitones |
octave | octave -1 | Transpose by whole octaves |
invert | invert 60 | Mirror pitches around pivot (default 60) |
rev / reverse | rev | Reverse note order in time |
stretch | stretch 0.5 | Scale durations by factor |
rotate | rotate 2 | Cyclic pitch rotation |
constrain | constrain 0 2 4 5 7 9 11 | Snap to scale pitch classes |
harmonize | harmonize 3 7 | Add parallel voices at intervals |
shift_vel | shift_vel -20 | Shift all velocities |
scale_vel | scale_vel 0.8 | Multiply all velocities |
quantize | quantize 0.25 | Snap note starts to grid |
humanize | humanize 0.05 | Add timing/velocity jitter |
swing | swing 0.6 0.5 | Apply swing (amount, grid) |
legato | legato | Extend notes to next note start |
staccato | staccato 0.5 | Shorten notes by factor |
phase | phase 0.5 | Time-rotate within length |
degrade | degrade 0.3 | Randomly remove 30% of notes |
thin | thin 2 | Keep every Nth note |
truncate | truncate 2 | Cut to first N beats |
repeat | repeat 2 | Repeat the pattern N times |
offset | offset 0.5 | Shift all notes forward |
Tokens Reference
Structure
| Token | Purpose | Syntax | Example |
|---|---|---|---|
sig | Start signature block | sig then indented entries | see above |
tracks | Start tracks block | tracks then indented entries | see above |
trk | Define a track (in sections) | trk <number> <name> | trk 1 kick |
plugin | Assign instrument plugin | plugin <keyword> | plugin mini |
fx | Assign insert effect | fx <keyword> | fx delay |
strip | Assign channel strip | strip <keyword> | strip console1 |
type | Set track type | type midi or type audio | type audio |
arr | Start arrangement block | arr then indented entries | see below |
sec | Start section definition | sec <name> | sec verse |
b | Set global bar count | b <bars> | b 4 |
key | Set key signature | key <root> [mode] | key Eb min |
cont | Continue pattern phase across section boundary | cont | cont |
Arrangement
Thearr block lists sections with their bar lengths, indented:
Key Signature
Sets the musical key for the project. Supports all 12 roots with sharps/flats, major and minor:Pattern (p)
Defines the rhythmic grid. Each token is one note slot. Positive = note-on, _ = rest.
Duration Tokens
| Token | Duration | Ticks |
|---|---|---|
ww | Double whole note | 768 |
w | Whole note (1 bar in 4/4) | 384 |
qq | Half note | 192 |
q | Quarter note (1 beat) | 96 |
xx | Eighth note | 48 |
x | Sixteenth note | 24 |
s | Thirty-second note | 12 |
ss | Sixty-fourth note | 6 |
. or d:
| Token | Alias | Duration | Ticks |
|---|---|---|---|
w. | wd | Dotted whole | 576 |
q. | qd | Dotted quarter | 144 |
xx. | xxd | Dotted eighth | 72 |
x. | xd | Dotted sixteenth | 36 |
s. | sd | Dotted thirty-second | 18 |
q.. = 1.75 beats (qdd).
Triplet (⅔× duration) — append , or t:
| Token | Alias | Duration | Ticks |
|---|---|---|---|
w, | wt | Whole triplet | 256 |
q, | qt | Quarter triplet | 64 |
xx, | xxt | Eighth triplet | 32 |
x, | xt | Sixteenth triplet | 16 |
s, | st | Thirty-second triplet | 8 |
Rests
.or_— rest of the same length as the previous duration_w,_q,_x,_xx,_s,_ssetc. — explicit rest durations (same naming as above, prefixed with_)
Note:.as a standalone token (space-separated) means rest..immediately after a duration letter (no space) means dotted:q.= dotted quarter (1.5 beats),q .= quarter then rest.
Duration Multiplier
Append a number to any duration token to multiply its length. Works for both note-ons and rests:| Token | Meaning | Ticks |
|---|---|---|
w4 | Whole note × 4 = 4 bars | 1536 |
q2 | Quarter note × 2 = half note | 192 |
_w8 | 8 bars of rest | 3072 |
_q4 | 4 beats of rest | 384 |
qd2 | Dotted quarter × 2 | 288 |
Timing Rule
Allp lines in a section must sum to the same total bar length. A 4/4 bar = 384 ticks = 4 quarters = 8 eighths = 16 sixteenths. Mismatched lengths cause desync.
Examples
Ties
Combine durations with~ (tilde) to express held notes that span standard note values — just like ties in sheet music:
Tuplets (Bracket Subdivision)
Divide any duration into N equal parts using bracket notation. Inside brackets,- (or x) marks a hit, . (or _) marks a rest:
v, n, and t lines are visual grouping only — the parser strips them. They keep tuplet values visually aligned with the p line.
Euclidean Rhythms
Distribute K hits evenly across N slots using the Bjorklund algorithm. Syntax:duration(k,n) or duration(k,n,r) where r is an optional rotation offset:
duration / n beats. Hits and rests are distributed as evenly as possible by the Bjorklund algorithm.
Motif References
Reference a named motif as a pattern token. The motif occupies itslength_beats on the timeline and brings its own notes, velocities, and timing:
... on v/n lines for visual alignment (no-op, purely cosmetic):
Velocity (v)
Sets the MIDI velocity (0–127) for each note slot. Cycles through values when the pattern repeats.
| Syntax | Meaning | Example |
|---|---|---|
80 | Absolute velocity | v 80 |
. | Default velocity (80) | v . 100 . 100 |
- | Repeat previous velocity | v 100 - 60 - → 100, 100, 60, 60 |
+N / -N | Relative offset from previous | v 80 +10 -20 |
v line entirely also yields velocity 80 — the same value . produces.
Notes (n)
Specifies pitches for each pattern slot. Supports multiple formats that can be mixed.
Formats
| Format | Example | Description |
|---|---|---|
| MIDI number | n 60 | Middle C |
| Note name | n C4 | Middle C (with octave) |
| Chord name | n @Cm7 | C minor 7th chord (all notes play simultaneously) |
| Repeat | n 60 - | Repeat previous pitch |
| Relative offset | n 60 +7 +5 | Add/subtract semitones from previous |
| Simultaneous notes | n 60 64 67 | All on one line = chord (C major triad) |
Note Names
Standard note names with optional accidentals and octave:Chord Names
Prefix with@. Optionally prefix octave before root letter.
| Chord | Syntax | Notes |
|---|---|---|
| Major | @C, @Cmaj, @CM | C E G |
| Minor | @Cm, @Cmin, @C- | C Eb G |
| Dominant 7th | @C7, @Cdom7 | C E G Bb |
| Major 7th | @Cmaj7, @CM7 | C E G B |
| Minor 7th | @Cm7, @Cmin7, @C-7 | C Eb G Bb |
| Diminished | @Cdim, @Co | C Eb Gb |
| Diminished 7th | @Cdim7, @Co7 | C Eb Gb A |
| Half-diminished | @Cm7b5, @Cø | C Eb Gb Bb |
| Augmented | @Caug, @C+ | C E G# |
| Augmented 7th | @Caug7, @C+7 | C E G# Bb |
| Suspended 2nd | @Csus2 | C D G |
| Suspended 4th | @Csus4, @Csus | C F G |
| Dominant 9th | @C9 | C E G Bb D |
| Minor 9th | @Cm9, @Cmin9 | C Eb G Bb D |
| Major 9th | @Cmaj9, @CM9 | C E G B D |
| Power chord | @C5, @Cpower | C G |
@3Cm7 = C minor 7th starting at octave 3.
Simultaneous Notes (Chords)
Multiple plain notes on onen line play simultaneously as a chord:
Bracket Chords (Explicit Voicings)
Use[note note note] on an n line for per-step chord voicings. Each bracketed group counts as one note step that cycles with the pattern:
Sequential Notes
When using-, +N, or @chords, each token is a separate step that cycles with the pattern:
Layering
Multiple velocity + note groups can share one pattern (multi-layer voicings):Swing (sw)
Adds groove by shifting every other note later. Applied per channel per section.
| Value | Feel |
|---|---|
50 | Perfectly straight (default) |
55 | Light swing |
60 | Medium swing |
67 | Triplet swing (classic MPC feel) |
75 | Heavy swing |
~N adds random ±N ticks of jitter to all notes for extra humanization.
Per-Note Timing (t)
Fine-grained timing offsets per pattern slot. Values are in ticks (1 tick ≈ 1/96 of a beat). Cycles like velocity.
- Start offset — shifts the note-on position:
- Positive = late (behind the beat / laid back)
- Negative = early (ahead of the beat / pushing)
0= on grid
- End offset (optional, after
/) — adjusts the note-off (release) by N ticks:- Positive = longer held note
- Negative = shorter (more staccato)
- Defaults to
0if omitted
CC Curves (cc)
Define MIDI continuous controller curves. Supports both multi-line (preferred) and single-line (legacy) formats.
Multi-line format (preferred)
Uses the same position/value/shape sub-lines asauto blocks:
Single-line format (legacy, still supported)
Pitch Bend (pb)
Same multi-line format as cc but without a controller number. Values range from -8191 to +8191.
pb 0 ramp q2 8191 ramp q2 0
Aftertouch (at)
Channel aftertouch (key pressure). Same format as pb. Values 0–127.
at 0 ramp q2 90 hold q ramp q 0
Automation (auto)
Define automation curves using breakpoints with positions, values, and interpolation shapes. Each block has a header line and up to three sub-lines:
Sub-Lines
| Prefix | Purpose | Example |
|---|---|---|
. | Positions — beat locations in bar:tick format (96 ticks per beat) | . 0:0 4:0 8:0 |
_ | Values — parameter values at each position (0.0–1.0 normalized) | _ 0.2 0.8 1.0 |
~ | Shapes — interpolation curve from this point to the next | ~ lin exp smt |
Shape Keywords
| Shape | Interpolation |
|---|---|
lin | Linear (straight line between points) |
exp | Exponential (fast start, slow end) |
log | Logarithmic (slow start, fast end) |
stp | Step/hold (constant until next point) |
smt | Smooth (cubic Hermite interpolation) |
Examples
Automation Macro Names
Semantic macro names are mapped to real plugin parameter names automatically:| Macro | Controls |
|---|---|
brightness / cutoff | Filter cutoff frequency |
resonance | Filter resonance |
attack | Amp/filter attack time |
decay | Amp/filter decay time |
release | Amp/filter release time |
pitch | Oscillator/sound pitch |
drive | Distortion/harmonics amount |
mix | Wet/dry mix |
width | Stereo width |
Plugin Keywords
Instruments
| Keyword | Plugin | Type |
|---|---|---|
synths | Pigments | General synth |
mini | Mini V3 | Analog mono synth |
cs80 | CS-80 V4 | Poly synth |
prophet | Prophet-5 V | Poly synth |
jup8 | Jup-8 V4 | Poly synth |
dx7 | DX7 V | FM synth |
buchla | Buchla Easel V | West coast |
surge | Surge XT | Open source synth |
kick | Kick 3 | Kick drum synth |
drums | Heartbeat | Drum machine |
bass | Mini V3 | Bass (uses Mini V) |
sublab | SubLabXL | Sub bass |
monoment | Monoment Bass | Bass synth |
Effects
| Keyword | Plugin |
|---|---|
delay | Tube Delay |
valhalla | ValhallaRoom |
widener | Softube Widener |
soothe | soothe2 |
tube | Dist TUBE-CULTURE |
Channel Strips
| Keyword | Plugin |
|---|---|
console1 | Console 1 |
Automation Macro Names
Semantic macro names are mapped to real plugin parameter names automatically. Use these in step or ramp automation.Synth Macros
| Macro | Controls |
|---|---|
brightness / cutoff | Filter cutoff frequency |
resonance | Filter resonance |
attack | Amp/filter attack time |
decay | Amp/filter decay time |
release | Amp/filter release time |
Drum/Bass Macros
| Macro | Controls |
|---|---|
pitch | Oscillator/sound pitch |
decay | Sound decay time |
volume | Output level |
drive | Distortion/harmonics amount |
Effect Macros
| Macro | Controls |
|---|---|
mix | Wet/dry mix |
decay | Reverb decay / delay feedback |
width | Stereo width |
Channel Strip Macros (Console 1)
| Macro | Controls |
|---|---|
input_gain | Input gain |
comp_thresh | Compressor threshold |
comp_ratio | Compressor ratio |
eq_mid_gain | EQ mid band gain |
low_cut | High-pass filter |
cont — Pattern Continuity
Use cont in a section to continue a channel’s pattern phase from the previous section (rather than restarting from beat 1):
cont, each section resets the pattern/note/velocity counters to 0. With cont, the counters pick up where the previous section left off, creating seamless transitions.
Track Types
| Type | Description |
|---|---|
midi | MIDI track (default) — plays notes through instrument plugin |
audio | Audio track — plays audio samples or Lyria-generated audio |
Complete Example
Tick Reference
All timing in Bird is based on a 384-tick bar (96 ticks per beat in 4/4):| Unit | Ticks |
|---|---|
| Whole note (bar) | 384 |
| Half note | 192 |
| Quarter note (beat) | 96 |
| Eighth note | 48 |
| Sixteenth note | 24 |
One t tick | 1 |
sw and t timing features operate in this tick space.