midi2abc - program to convert MIDI format files to abc notation
midi2abc -f infile [-xa] [-ga] [-a acbeats] [-m time signature] [-ppu
parts per unit] [-aul denominator of unit length] [-gu] [-b bars] [-Q
tempo] [-u pulses] [-k key] [-c channel] [-obpl] [-bpl bars] [-bps
bars] [-o filename] [-s] [-sr units] [-sum] [-nt] [-splitbars]
[-splitvoices] [-midigram] [-mftext] [-nogr]
midi2abc takes a MIDI format file and converts it to something as close
as possible to abc text format. The user then has to add text fields
not present in the MIDI header and possibly tidy up the abc note
The output of midi2abc is printed to the screen. To save it to a file,
use the redirection operator, (e.g. midi2abc -f file.mid > file.abc) or
specify the output file using the -o option.
Use only one or none of the options -u -gu, -b and -Q. Midi2abc
normally converts the MIDI time units into quantum units normally
corresponding to the abc 1/16th note or 1/32nd note. If none of these
is present, the program will use the PPQN information in the MIDI
header to compute the suitable conversion factor. For most MIDI files
on the web, it is recommended to rely on the MIDI header information
and not use any of the options other than the formatting options.
The program will extract the time signature infromation from the MIDI
file if it is present. Otherwise it will assume 4/4 or you could
specify it with -m. option.
If the tune has an anacrusis, you can use either the -ga or -xa option
to estimate the its length. Alternatively, you can specify its value
using the -a option. The anacrusis is specified in half unit lengths,
where the unit length is defined by the L: field. For example if L:
1/8, then a quarter note would be indicated by the value 4, (4 1/16
where acbeats specifies the anacrusis in half unit lengths.
-xa extract the anacrusis from file by finding the first strong note
-ga guess the anacrusis by minimizing the number of ties across bars
-m time signature
number of bars wanted in output
tempo in quarter-notes per minute
Allows you to specify directly the number of midi pulses per abc
-ppu parts per abc unit length
Normally, the smallest note unit that midi2abc can extract is
half the L: unit length.This is called the quantum unit. Thus
for L: 1/8, midi2abc can extract 1/16 notes but not 1/32 notes.
You can change this by specifying -ppu 4 for example. The number
of parts should be a power of 2.
-aul denominator of abc unit length
Normally midi2abc chooses a unit length of 1/8 or 1/16 depending
upon the time signature. For time signatures smaller than 3/4
the L: 1/16 is used and for larger time signatures L: 1/8 is
used. You can specify the unit length to be used using this
parameter. Thus -aul 32 will cause midi2abc to use a unit length
of 1/32 nd note.
-gu Tells midi2abc to estimate the number of midi pulses per abc
time unit from the note duration or spacing in the MIDI file.
-gk Tells midi2abc to guess the key signature by minimizing the
number of accidentals even if the key signature is already
specified in the MIDI file. By default the key signature is the
one specified in the MIDI file. If it is not specified, then
the program guesses the key signature by minimizing accidentals.
-k key key signature: -6 to 6 sharps.
select only this midi channel.
input file in midi format
-o output file
specifies the output abc file name.
-s do not discard very short notes.
-sr quantum units
do not notate a short rest smaller than the specified size after
a note. If the size (in quantum units) is zero, nothing is done.
For larger values, the rest is absorbed into the preceding note.
In other words, the preceding note is lengthened to include that
-sum print a short summary of the input midi file.
-nt do not look for triplets or broken rhythm
-obpl Print only one bar per line instead of 4. For complex music this
improves the readability and avoids some problems with some abc
to postscript converters. This option is deprecated.
-nogr (No note grouping.) Inserts a space between all notes. It makes
a less pretty postscript file but it is easier to edit.
Print nbars of music on every line followed by a backslash.
When nbars have been printed (including those lines joined by a
backslash continuation) go to a new line (with no backslash).
This parameter changes the way midi2abc prints chords composed
of notes of unequal length (polyphonic chords). Normally,
midi2abc joins the longer notes to the notes in the following
chord using ties. A more readable output, can be obtained if the
measure is split into separate parts using the ’&’ feature in
abc notation. The algorithm for dividing the notes in a
polyphonic chord to separate voices (label_splits in midi2abc.c)
needs some improvement. I welcome any assistance.
This parameter like above handles polyphonic chords by splitting
an entire voice into multi voices.
When this option appears, all other options are ignored and no
abc file is produced. Instead a list of all notes in the MIDI
file are printed in a fixed format. Each line represents a pair
of MIDI note on/off event. The line contains the on/off time of
the note, its track number, channel number, midi pitch and midi
velocity. The last record indicates the duration of the MIDI
file in MIDI pulse units. The output is designed to go into a
graphical user interface which will produce a graphical
representation (piano roll).
When this option appears, all other options are ignored and no
abc file is produced. Instead a list of all the MIDI commands
are printed. The output is designed to go into a graphical user
interface provided by runabc.tcl.
* The key is chosen so as to minimize the number of accidentals.
Alternatively, the user can specify the key numerically (a positive
number is the number of sharps, a negative number is minus the number
* Note length can be set by specifiying the total number of bars or the
tempo of the piece. Alternatively the note length can be read from the
file. However, by default it is deduced in a heuristic manner from the
inter-note distances. This means that you do not have to use the MIDI
clock as a metronome when playing in a tune from a keyboard.
* Barlines are automatically inserted. The user specifies the number of
measures in the anacrusis before the first barline and the time
* The program can guess how the length of the anacrusis, either by
looking for the first strong note or minimizing the number of notes
split by a tie across a barline.
* Where a note extends beyond a bar break, it is split into two tied
* The output has 4 bars per line.
* Enough accidental signs are put in the music to ensure that no pitch
errors occur if a barline is added or deleted.
* The program attempts to group notes sensibly in each bar.
* Triplets and broken rhythm (a>b) are supported.
* Chords are identified.
* Text information from the original MIDI file is included as comments.
* The -c option can be used to select only 1 MIDI channel. Events on
other channels are ignored.
midi2abc does not ...
* Supply tune title, composer or any other field apart from X: , K:,
Q:, M: and L: - these must be added by hand afterwards, though they may
have been included in the text of the MIDI file.
* Support duplets, quadruplets, other esoteric features.
* Support mid-tune key or time signature changes.
* Deduce repeats. The output is just the notes in the input file.
* Recover an abc tune as supplied to abc2midi. However, if you want to
do this, "midi2abc -xa -f file.mid" comes close.
abc2ps(1), abc2midi(1), abc2abc(1)
James Allwright <J.R.Allwright@westminster.ac.uk>
Seymour Shlien <email@example.com>
This man page describes midi2abc version 2.87 from July 09 2005.
Copyright 1999 James Allwright
midi2abc is supplied "as is" without any warranty. It is free software
and can be used, copied, modified and distributed without fee under the
terms of the GNU General Public License.
09 July 2005