Skip to main content

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:
  1. Signature — set BPM, key, and scale
  2. Global track definitions — declare tracks with their instruments, effects, and channel strips
  3. Motif definitions (optional) — reusable MIDI pattern fragments
  4. Arrangement — define the section order and bar counts
  5. Section definitions — write the musical content for each section
[!NOTE] The older ch and channels keywords are still accepted by the parser for backward compatibility, but new files should use trk and tracks.

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 named PatternGroup — it supports the full pattern vocabulary (p/v/n/t/sw/MPE/voice layers).
The header is 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:

Tokens Reference

Structure

Arrangement

The arr 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

Dotted (1.5× duration) — append . or d: Double dotted: q.. = 1.75 beats (qdd). Triplet (⅔× duration) — append , or t:

Rests

  • . or _ — rest of the same length as the previous duration
  • _w, _q, _x, _xx, _s, _ss etc. — 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: This is useful for held notes that span multiple bars, or for compactly expressing long rests:

Timing Rule

All p 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:
Ties are more musical than multipliers for note-on durations. Both can coexist — ties for composition, multipliers for mechanical rests.

Tuplets (Bracket Subdivision)

Divide any duration into N equal parts using bracket notation. Inside brackets, - (or x) marks a hit, . (or _) marks a rest:
Brackets on 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:
The duration token sets the total time span. Each slot gets 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 its length_beats on the timeline and brings its own notes, velocities, and timing:
Optional ... 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. Values are clamped to 0–127. The velocity list cycles independently of the pattern length. Omitting the 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

Note Names

Standard note names with optional accidentals and octave:
Octave 4 starts at MIDI 60 (Middle C). Omitting octave defaults to 4.

Chord Names

Prefix with @. Optionally prefix octave before root letter. Octave prefix: @3Cm7 = C minor 7th starting at octave 3.

Simultaneous Notes (Chords)

Multiple plain notes on one n 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.
The optional ~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 0 if omitted
One tick = 1/24 of a sixteenth note = 1/96 of a quarter note.

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 as auto 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.
Legacy single-line: pb 0 ramp q2 8191 ramp q2 0

Aftertouch (at)

Channel aftertouch (key pressure). Same format as pb. Values 0–127.
Legacy single-line: 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

Shape Keywords

Examples

Sub-lines are optional — you can provide just positions and values without shapes (defaults to linear), or just a header with no sub-lines.

Automation Macro Names

Semantic macro names are mapped to real plugin parameter names automatically:

Plugin Keywords

Instruments

Effects

Channel Strips


Automation Macro Names

Semantic macro names are mapped to real plugin parameter names automatically. Use these in step or ramp automation.

Synth Macros

Drum/Bass Macros

Effect Macros

Channel Strip Macros (Console 1)


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):
Without 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


Complete Example


Tick Reference

All timing in Bird is based on a 384-tick bar (96 ticks per beat in 4/4): The sw and t timing features operate in this tick space.