Page 1 of 1

ABCLua -- an open-source ABC library

Posted: Sat Mar 02, 2013 8:35 pm
by johnhw
Hi all,

I've released an open-source (BSD) parser/emitter library for ABC notation, written in Lua. ABCLua is available at

The use of Lua makes it easy to embed this library in other C-based software as required.

ABCLua can additionally process parsed ABC into pitched, timed, event streams (which can be transformed into MIDI, for example). It includes an ABC2Midi compatible MIDI generator as an example script, along with a variety of other demo scripts. It supports a reasonable subset of ABC 2.1(.1); I've created a fairly broad set of test cases, but I'd be very interested in any limitations or incompatibilities.

ABCLua currently supports:
    - All standard note descriptions and tune metadata fields
    - Complex meters M:(1+4+2)/8
    - Full key definitions K:C locrian ^c _g alto t=-2
    - Multi-tune songbooks
    - Tuplets (3 abc (5:2:7 abcdefg
    - Aligned lyrics +w: th-ese wor-ds are al-igned in the event stre-a-m
    - Full chord parsing and transformation into pitches
    - Symbol lines s:* * "Cm7" * * ">here" * !fermata!
    - Grace notes, decorations {cf}!fermata!~G
    - Slurs and chords (ABC) and [Ceg]
    - Named chords "Cm7"C G F | "Dmaj" D e' f |
    - Repeats (with variable counts, such as |::: :::|) and variant endings |: abc :|1 def |2 fed ||
    - Parts with variant endings P:A2(BA(BAB)2)3
    - Multi-voice songs V:v1
    - Voice overlay with &
    - Macros, user macros and transposing macros
    - abc-include to include files
    - I:linebreak
    - abc-include to include files
    - propagate-accidental rules
Extended features include:
    - Fractional accidentals for microtonal music ^/2C (also in key definitions: K:C ^/4f)
    - Nested tuplets (e.g. (7:5:7 A A (3 A A A A A)
    - Ratio for broken rhythm can be set with directive %%set-broken-ratio