# 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 like1:/V1:/C:,L:for lead-note tokens,B:for bass-note tokens,D:for drum tokens, andM: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:orB: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
- Use consistent section names like Verse, Chorus, Bridge.
- Keep bar separators (
|) balanced and explicit. - Define meter early unless section-level overrides are required.
- Use repeated
L:,B:,D:, orM:lines when a bar needs multiple simultaneous rows; rows render in source order.