Back to docs home

# OBOL Documentation

How to structure songs in One-Bar-One-Line (OBOL) format for Music Notes.

Core Concepts

  • OBOL is section-based and bar-oriented.
  • Bars contain beat slots and chord tokens.
  • Meter controls beat-slot count (for example 4/4, 3/4, 6/8).
  • Use R: for rhythm/chords, lyric tracks like 1:/V1:/C:, L: for lead-note tokens, B: for bass-note tokens, D: for drum tokens, and M: for message labels.
  • Beats are separated by spaces across all tracks.
  • Rare half bars use a standalone {half} marker immediately before the bar:

- The marker applies only to the next R: bar.

- A half bar still occupies one rendered bar slot.

- If the half bar starts a section, the renderer shows the second half of the card.

- Otherwise, the renderer shows the first half and leaves the other half transparent.

  • Fermata uses ASCII suffix ~ per beat token:

- R: C~ - G - adds fermata on rhythm beat 1 only

- L: ^3~ 4 5 6 adds fermata on lead beat 1 only

- Rhythm and Lead fermata marks are independent per track

  • Rhythm rest tokens (rendered as Unicode rest signs in song views):

- rw = whole rest (𝄻)

- rh = half rest (𝄼)

- rq = quarter rest (𝄽)

- re = eighth rest (𝄾)

- Rests can also carry fermata suffix, for example rq~

  • Rhythm keep-open timing marker:

- trailing 0 keeps timing open without rendering extra chord text (for example C0, DX0)

- DX0 renders as muted D (D with muted X) on the first half-beat, with the second half kept open

  • Lead and Bass dot notation uses ASCII prefixes:

- ^1 = over-dot note 1

- _1 = under-dot note 1

- 1 = plain note

  • Lead and Bass tracks use Numbered Musical Notation (Jianpu-style numbers).
  • Bass rows render as numbers by default. Song detail pages can switch Bass display to note names from Options, and the preference is reused on later renders.
  • In Bass note-name mode, the renderer maps bass digits as key-relative major-scale degrees; for example, in key D, 1=D, 2=E, 3=G♭, 4=G, 5=A, 6=B, 7=D♭.
  • Lead/Bass timing in one beat-slot:

- one sub-part = quarter (no underline)

- two sub-parts = eighth (single underline in render)

- four sub-parts = sixteenth (double underline in render)

- three sub-parts = single underline (triplet-style grouping in one beat-slot)

- uncertain/unsupported subdivisions render without underline

- | splits one beat-slot into two half-beat groups with independent underline weights (for example 1|23; here 1 is eighth-style and 23 is sixteenth-style)

- for 6/8, treat each Lead beat-slot as dotted-quarter for timing interpretation

  • Lead/Bass rests and extensions:

- 0 = rest

- - = extend the previous sounding note by one beat-slot unit; rendered as · in Lead/Bass notation views

- 10 in one beat-slot means 1 eighth + 0 eighth

  • Lead/Bass bend notation uses ASCII operators inside an L: or B: token:

- 3>4 = bend from 3 to 4 on that beat

- 4<3 = release bend from 4 to 3

- For multi-beat bend holds, write the bend on the first beat and repeat the target note on following beats (for example 3>4 4 4)

- Optional slur markers ( ) can visually group sustained bend phrases across beats

  • Drum tracks use D::

- One token maps to one beat, like other tracks.

- - means no drum hit.

- Basic symbols: K kick, S snare, H closed hi-hat, O open hi-hat, C crash, T tom.

- Combine symbols in one beat for simultaneous hits, for example D: KH H SH H.

- Repeat D: lines when a bar needs multiple drum rows.

  • Message labels use M::

- One token maps to one beat, like other tracks.

- Use quoted text for multi-word labels, for example M: "let it ring" PM "Use thumb" -.

- Use - for an empty message beat.

- Repeat M: lines when a bar needs multiple simultaneous message rows.

  • Ending markers are section headers:

- {Fade out} marks an ending that gradually fades.

- {Fine} marks the definite end of the song.

- They may be empty markers or contain bars like other sections.

Example


{Key: F}
{BPM: 125}
{Time: 4/4}

{Verse}
R: Dm - C -
1: ma ma ma ma
L: ^1 _2 3 4
B: 5 6 7 1
D: KH H SH H
M: "let it ring" PM "Use thumb" -
R: F
1: la la la la
L: 5 6 ^7 _1
B: 1 - 5 -
D: K - S -
M: - - accent -
R: C
1: bend and hold now
L: (3>4 4 4) 4<3
B: (5 5 5) 1
R: C~ - G -
1: hold this then move
L: ^3~ 4 5 6
{half}
R: G D
1: half bar
R: rw rh rq re~
1: rest whole half quarter
L: 10 20 30 40
L: 1234 5670 1111 0000
L: 1 23 4567 1|23
L: 1 - - -
B: ^5 _6 7 1

Tips

  1. Use consistent section names like Verse, Chorus, Bridge.
  2. Keep bar separators (|) balanced and explicit.
  3. Define meter early unless section-level overrides are required.
  4. Use repeated L:, B:, D:, or M: lines when a bar needs multiple simultaneous rows; rows render in source order.