The ABC Plus Project
|
---|
![]() |
|
IntroductionOne of my hobbies is music: I play folk and early music on a bunch of wind instruments and guitar. I find that the ABC music notation language is a wonderful tool to typeset sheet music. ABC is one of the best designed, easy to use, well-thought out, and nicely implemented notation formats I've ever seen. It's an excellent alternative to other good notation languages like GNU Lilypond, or MusiXTeX, or Philip's Music Writer. You can write music in a very simple ASCII format and convert it to MIDI, or typeset it to make professional-looking scores. ABC was originally designed for simple melodies, but there have been efforts to extend the notation. The ABC Music Standard is now at version 2.2, and supports polyphony and lots of other features. Some ABC applications implement most of the the ABC 2 language; low-level details (formatting and MIDI effects) are supported too. The purpose of the ABC Plus project is to provide software and documentation for this extended ABC release. This is an example of classical music written in ABC Plus; it sounds like this. What I informally call ABC Plus is, in practice, the current implementation of ABC 2. This site provides binaries for FOSS, multiplatform ABC 2 applications only. Please refer to the ABC page for a complete list of available software.
All binaries, included those in RPM and deb packages, were built
on a GNU/Linux Mint 21.1 box with Cosmopolitan libc
(cosmocc
3.3 compiler). Cosmopolitan makes these static binaries truly
multiplatform: they will run on GNU/Linux, macOS, Windows, *BSD,
and BIOS on both AMD64 and ARM64 architectures. Cosmopolitan is
beyond awsome!
|
A couple of notes.
First of all: please note that I am not the author of abcm2ps, abc2svg, and abcmidi. I wish I were such a great programmer! I just provide the packages or the links. Please refer to the authors for any questions.
Secondly: please refer to The ABC Notation software page for a full and quite long list of ABC software.
Finally: please, please, don't write to me asking how to do this or that. I've run out of time. I recommend that you join the abcusers mailing list, and ask questions there. Thanks!
I have written a manual that explains how to write music using ABC 2. It focuses on using abcm2ps, abc2svg, abcmidi, and the ABC/MusicXML translators, but most of the information it contains can be applied (at least to some extent) to all ABC applications. Many thanks to Norman Schmidt who helped me translate parts of the manual.
I release this manual under the GNU Free Documentation License 1.3. This basically means that it's free and that you can freely modify it, as long as you make your modifications publicly available.
Read the manual here or download the latest release (please report errors and omissions!):
Previous versions:
I rely on your feedback to fix errors and omissions, and in general to make this manual more useful. Please feel free to make translations!
As a demonstration of the capabilities of ABC 2, I have prepared a few examples of choral sheet music. They're free to use and share. Please report bugs, should you find any.
All scores include this choral.abc file. MusicXML files were created with Wim Vree's abc2xml version 79. The sources are compatible with both abcm2ps and abc2svg.
Prof. Enrico Gregorio (University of Verona, Italy) has written a LaTeX package for including ABC/ABC Plus music in LaTeX documents. Thanks a lot!
The package is available from all CTAN mirrors, e.g. http://www.ctan.org/tex-archive/macros/latex/contrib/abc/. Here's a local copy.
The following archives contain the latest abcm2ps, abcmidi, abcpp, and abc2prt binaries:
abctools-20240813-cosmo.zip | multiplatform binaries |
The great ABC scorewriter abc2svg can be used in three ways:
The latter is quite handy: it turns abc2svg to a portable app that can be run from, say, a pendrive. All you need is a web browser, and there you are: ABC music on the go!
The GNU/Linux packages provide the commands abcjsc, abcmjs, abcnode, abcjqs, and abctopdf. A JavaScript engine must be installed; a multiplatform QuickJS package is provided for your convenience.
Version 1.22.19:
New stable release | |
abc2svg-1.22.19-1.noarch.rpm | RPM package |
abc2svg-1.22.19-1.src.rpm | source RPM |
abc2svg_1.22.19-1_all.deb | deb package |
abc2svg-1.22.19.zip | offline webapp. To run the abc2svg editor, unzip the archive then click on abc2svg.xhtml. |
quickjs-20240113-cosmo.zip | multiplatform QuickJS package |
New stable release | |
abcm2ps-8.14.15-11-cosmo.zip | multiplatform binary, without Pango support. |
abcm2ps_8.14.15-11_all.deb | convenience deb package, for all platforms. |
abcm2ps-8.14.15-11.noarch.rpm | convenience RPM package, for all platforms. |
abcm2ps-8.14.15-11.src.rpm | source RPM |
While you could use the binary included in the zip file, deb and RPM packages are provided for convenience. They contain the same binary as the zip file.
No Pango support, sorry. Please use SVG + XHTML output or switch to abc2svg if you need to display UTF-8 text.
An exciting feature of abcm2ps and abc2svg is the possibility of writing extensions as PostScript or SVG code. Some of the ABC files included in the abcm2ps distribution include some examples of such extensions.
I have gathered some code and written a few .fmt files. I remind you that to use the code in external .fmt files one has to write this command line:
abcm2ps file.abc -F formatfile
where formatfile refers to the file formatfile.fmt. In addition to format files, one could also write so-called header files (extension .abh) that can be included in ABC sources using %%abc-include. Optimally, they could be used by both abcm2ps and abc2svg.
There you are a list of my .fmt files, which will grow as I finish writing and testing them.
itachords.fmt |
Accompaniment chords using Italian note names (Do Re Mi).
Written by Jean-François Moine. |
demo-itachords.pdf |
guitarchords.fmt | Guitar chords diagrams, version 1.3. | |
percussions.abh |
Percussion notes.
These maps work in abcm2ps, abc2svg, and abc2xml. |
|
newheads.fmt | This format file provides slender black note heads, i.e. less round than the default shape. Version 1.4. For abcm2ps-8.* only. | |
dacapo.abh |
This header file provides missing decorations:
D.C.alcoda, D.C.alfine, D.S.alcoda, D.S.alfine, dacapo, dacoda. |
|
bravura.fmt |
This format file uses the Bravura font, redefines
dynamics glyphs, and provides a few extensions.
Version 1.3, for abcm2ps-8.* only. |
|
smufl.fmt |
Extension to bravura.fmt to use any SMuFL-compliant
music font.
Version 1.3, for abcm2ps-8.* only. |
|
deco-marks.fmt | Position marks. Obsolete: should be rewritten to make it work on both abcm2ps and abc2svg. | demo-marks.pdf |
renaissance.fmt | Format file for Renaissance music, by Eric Forgeot | charlotte.pdf |
thinlines.fmt | Draw thinner lines | n/a |
ps.zip | Lots of new decorations and symbols, by David Lacroix | Symbols.pdf |
Easy Notes | Easy notes: note heads including the note name. By Jeremy Cowgar. | easynotes.png |
The latest version is available as source from http://ifdo.ca/~seymour/runabc/top.html.
abcmidi-20240813-cosmo.zip | multiplatform binaries |
abcmidi_20240813-1_all.deb | convenience deb package, for all platforms |
abcmidi-20240813-1.noarch.rpm | convenience RPM package, for all platforms |
abcmidi-20240813-1.src.rpm | source RPM |
While you could use the binaries included in the zip file, deb and RPM packages are provided for convenience. They contain the same binaries as the zip file.
abcpp is a simple yet powerful preprocessor designed for, but not limited to, ABC music files. It provides conditional output, macros, symbol renaming, and file inclusion. I wrote it for two reasons: first, I wanted to overcome incompatibilities between ABC packages; secondly, I wanted to be able to write portable and more readable ABC files.
Inspired by the C and S-Lang ( http://www.s-lang.org) preprocessor, abcpp supports some directives that allow you to play a few tricks. You write your ABC music files with directives lines like #define or #ifdef, defining macros or excluding portions of text according to specific conditions. Then you preprocess your file with abcpp, producing an output file suitable for each ABC application or voice. Interestingly, abcpp is actively used with MusiXTeX-related programs.
In a nutshell, have your ABC cake and eat it too!
Version 1.4.6:
abcpp-1.4.6.tar.gz | sources |
abcpp-1.4.6-cosmo.zip | multiplatform binary |
The source archive also contains the documentation. Many thanks to the developers who sent me patches!
abc2prt is a simple tool to extract parts from multivoice ABC music files.
I wrote it because it's often desirable to give singers their own part in addition to the complete score. I know that Perl scripts exist that do the trick, and Unix users will be happy with them. However, installing Perl on a Windows machine only for running a script is quite an overkill.
abc2prt is a command line tool. Usage is
$ abc2prt -v voicename [inputfile] [outputfile]
If inputfile and outputfile are not specified, abc2prt will use standard input and standard output. An example is
$ abc2prt -v TII music.abc music-tii.abc
which will output the whole header and all the lines that belong to the voice defined as V:TII, including w: lines. At most five -v fields are allowed.
If there's enough request, I'll write a graphical version. The multivoice extensions were written by Matthew K. Junker, junker at alum dot mit dot edu. Many thanks, Matthew!
abc2prt-1.0.2.tar.gz | sources |
abc2prt-1.0.2-cosmo.zip | multiplatform binary |
This site is maintained by Guido Gonzato, Ph.D.
For information, suggestions, etc, please drop me a line: guido.gonzato at gmail.com