This is the command abc2midi that can be run in the OnWorks free hosting provider using one of our multiple free online workstations such as Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator
abc2midi - converts abc file to MIDI file(s)
abc2midi infile [refnum] [-c] [-v] [-ver] [-t] [-n limit] [-CS] [-quiet] [-silent] [-Q
tempo] [-NFNP] [-NFER] [-NGRA] [-STFW] [-OCC] [-NCOM] [-HARP] [-BF] [-TT] [-o outfile]
The default action is to write a MIDI file for each abc tune
with the filename <stem>N.mid, where <stem> is the filestem
of the abc file and N is the tune reference number. If the -o
option is used, only one file is written. This is the tune
specified by the reference number or, if no reference number
is given, the first tune in the file.
refnum process the tune with reference number refnum
-c selects checking only
-v n selects verbose option where n is the level (optional)
-ver prints version number and exits
-t selects filenames derived from tune titles
-CS use 2:1 instead of 3:1 for broken rhythms
-quiet Suppresses some common warnings.
Suppresses other messages.
-n X limits the length of the file name stem to X characters
sets the default tempo in quarter notes per minute if it was not specified in the
-NFNP Ignore any dynamic indications !f! !ff! etc.
-NFER Ignore any fermata indications (eg H or !fermata!).
-NGRA Ignore any grace notes.
-STFW Place lyric text in separate MIDI tracks.
-NCOM Suppress some comments in the output MIDI file.
-OCC Accept old chord convention (eg +D2G2+ instead of [DG]2).
-BF BarFly mode: invokes a stress model if possible.
-HARP Roll ornaments=roll are generated for the harpist (same pitch)
-TT Changes the tuning from A = 440 Hz.
write output to outfile
load a set of custom stress modes from a file
* Broken rhythms (>, <), chords, n-tuples, slurring, ties, staccatto notes, repeats, in-
tune tempo/length/time signature changes are all supported.
* R:hornpipe or r:hornpipe is recognized and note timings are adjusted to give a broken
rhythm (ab is converted to a>b).
* Most errors in the abc input will generate a suitable error message in the output and
the converter keeps going.
* Comments and text fields in the abc source are converted to text events in the MIDI
* If guitar chords are present, they are used to generate an accompaniment in the MIDI
* If there are mis-matched repeat signs in the abc, the program attempts to fix them.
However, it will not attempt this if a multi-part tune description has been used or if
multiple voices are in use.
* Karaoke MIDI files can be generated by using the w: field to include lyrics.
* Nonnumeric voice id's, eg. V: soprano, as proposed for the new abc standard is accepted.
* Invisible rests specified by x are treated the same way as normal rests (z).
* Decorations may be indicated using either the deprecated notation (eg. !fermata!) or the
standard version 2.0 notation (eg. +fermata+).
* No field is inherited from above the X: field of the tune.
ABC SYNTAX EXTENSIONS
* There are some extensions to the abc syntax of the form
%%MIDI channel n
These control channel and program selection, transposing and various other features of
Each of these should appear on a line by itself. All of them are allowed within the abc
tune body. By using these in combination with the part notation, one can, for example,
play a part transposed or in a different key.
The idea behind this syntax is that other programs will treat it as a comment and ignore
%%MIDI channel n
selects melody channel n (in the range 1-16).
%%MIDI program [c] n
selects program n (in the range 1-128) on channel c. If c is not given, the program is
selected on the current melody channel. Most modern tone generators follow the General
MIDI standard which defines the instrument type for each program number.
%%MIDI beat a b c n
controls the way note velocities are selected. The first note in a bar has velocity a.
Other "strong" notes have velocity b and all the rest have velocity c. a, b and c must be
in the range 0-128. The parameter n determines which notes are "strong". If the time
signature is x/y, then each note is given a position number k = 0, 1, 2 .. x-1 within each
bar. Note that the units for n are not the unit note length. If k is a multiple of n, then
the note is "strong". The volume specifiers !ppp! to !fff! are equivalent to the following
!ppp! = %%MIDI beat 30 20 10 1
!pp! = %%MIDI beat 45 35 20 1
!p! = %%MIDI beat 60 50 35 1
!mp! = %%MIDI beat 75 65 50 1
!mf! = %%MIDI beat 90 80 65 1
!f! = %%MIDI beat 105 95 80 1
!ff! = %%MIDI beat 120 110 95 1
!fff! = %%MIDI beat 127 125 110 1
%%MIDI beatmod n
Increments by n (or decrements if n is negative) the velocities a, b and c described
above. The instructions !crescendo(! and !crescendo)! are equivalent to inserting a
%%MIDI beatmod 15 wherever they occur. (Alternatively you can use !<(! and !<)!.)
Similarly the instructions !diminuendo(! and !diminuendo)! are equivalent to %%MIDI
%%MIDI deltaloudness n
where n is a small positive number. By default the crescendo and diminuendo instructions
modify the beat variables a, b, and c by 15 velocity units. This instruction allows you to
set this default to value n.
For instruments such as church organ that have no greatly emphasized beat notes, using
this will force use of the 'b' velocity (see %%MIDI beat) for every note irrespective of
position in the bar. This allows dynamics (ff, f, etc) to be used in the normal way.
Revert to emphasizing notes the the usual way. (default)
%%MIDI beatstring <string of f, m and p>
This provides an alternative way of specifying where the strong and weak stresses fall
within a bar. 'f' means velocity a (normally strong), 'm' means velocity b (medium
velocity) and 'p' means velocity c (soft velocity). For example, if the time signature is
7/8 with stresses on the first, fourth and sixth notes in the bar, we could use the
%%MIDI beatstring fppmpmp
%%MIDI transpose n
transposes the output by the specified number of semitones. n may be positive or negative.
%%MIDI rtranspose n
Relative transpose by the specified number of semitones. i.e. %%MIDI transpose a followed
by %%MIDI rtranspose b results in a transposition of a+b. %%MIDI transpose b will result
in a transposition of b semitones, regardless of any previous transposition.
%%MIDI c n
specifies the MIDI pitch which corresponds to c. The default is 60. This number should
normally be a multiple of 12.
%%MIDI grace a/b
sets the fraction of the next note that grace notes will take up. a must be between 1 and
b-1. The grace notes may not sound natural in this approach, since the length of the
individual grace notes vary with the complexity of the grace and the length of the
following note. A different approach (which is now the default) assumes that the grace
notes always have a fixed duration. To use the other approach you would specify,
%%MIDI gracedivider b
where b specifies how many parts to divide the unit length specified by the L: field
command. For example if b = 4 and L: = 1/8, then every grace note would be 1/(8*4) or a
32nd note. Time would be stolen from the note to which the grace notes are applied. If
that note is not long enough to handle the grace then the grace notes would be assigned 0
%%MIDI chordname name n1 n2 n3 n4 n5 n6
Defines how to play a guitar chord called "name". n1 is usually 0 and n2, n3 to n6 give
the pitches of the other notes in semitones relative to the root note. There may be fewer
than 6 notes in the chord, but not more.If "name" is already defined, this command re-
defines it. Unlike most other commands, chordname definitions stay in effect from where
they are defined to the end of the abc file. The following illustrates how m, 7, m7 and
maj7 could be set up if they were not already defined.
%%MIDI chordname m 0 3 7
%%MIDI chordname 7 0 4 7 10
%%MIDI chordname m7 0 3 7 10
%%MIDI chordname maj7 0 4 7 11
%%MIDI gchord string
sets up how guitar chords are generated. The string is a sequence made of of z's, c's f's
and b's for rests, chords, fundamental and fundamental plus chord notes respectively.
This specifies how each bar is to be played. An optional length is allowed to follow the
z's, c's f's and b's e.g. czf2zf3. If the abc contains guitar chords, then abc2midi
automatically adds chords and fundamentals after encountering the first guitar chord. It
keeps using that chord until a new chord is specified in the abc. Whenever the M: field is
encountered in the abc, an appropriate default string is set :
For 2/4 or 4/4 time default is equivalent to : %%MIDI gchord fzczfzcz
For 3/4 time default is equivalent to : %%MIDI gchord fzczcz
For 6/8 time default is equivalent to : %%MIDI gchord fzcfzc
For 9/8 time default is equivalent to : %%MIDI gchord fzcfzcfzc
The gchord command has been extended to allow you to play the individual notes comprising
the guitar chord. This allows you to play broken chords or arpeggios. The new codes
g,h,i,j, G,H,I,J reference the individual notes starting from the lowest note of the chord
(not necessarily the root in the case of inversions). For example for the C major chord, g
refers to C, h refers to E and i refers to G. For a gchord command such as,
%%MIDI gchord ghih
Abc2midi will arpeggiate the C major guitar chord to CEGE. The upper case letters G,H,I,
and J refer to the same notes except they are transposed down one octave. Note for the
first inversion of the C major chord (indicated by "C/E"), E would be the lowest note so g
would reference the note E.
Like other gchord codes, you may append a numeral indicating the duration of the note. The
same rules apply as before. You can use any combination of the gchord codes,
%%MIDI chordprog n
Sets the MIDI instrument for the chords to be n. If the command includes the string
octave=n where n is a number between -2 and 2 inclusive, then this will shift the pitch of
the instrument by n octaves. For example %%MIDI chordprog 10 octave=1.)
%%MIDI bassprog n
Sets the MIDI instrument for the bass notes to be n. If the command includes the string
octave=n where n is a number between -2 and 2 inclusive, then this will shift the pitch of
the instrument by n octaves. For example %%MIDI bassprog 10 octave=-1.)
%%MIDI chordvol n
Sets the volume (velocity) of the chord notes at n.
%%MIDI bassvol n
Sets the volume (velocity) of the bass notes at n. There is no corresponding melodyvol
command since there are 3 velocity values for melody, set using the beat command.
Turns on guitar chords (they are turned on by default at the start of a tune).
Turns off guitar chords.
Turns on a continuous drone (used in bagpipe music) consisting of two notes. By default
the notes are A, and A,, played on a bassoon at a velocity of 80. This can be configured
by the %%MIDI drone command described below.
Turns off the continuous drone.
%%MIDI drone n1 n2 n3 n4 n5
Sets the drone parameters where n1 is the MIDI program, n2 and n3 specify the MIDI pitches
of the two notes in the chord, and n4 and n5 specify the MIDI velocities of the two notes.
If you do not set these parameters they are by default 70 45 33 80 80. A value of zero or
less indicates that the setting of this parameter should be left as it is.
%%MIDI drum string [drum programs] [drum velocities]
This sets up a drum pattern. The string determines when there is a drum beat and the drum
program values determine what each drum strike sounds like.
e.g. %%MIDI drum d2zdd 35 38 38 100 50 50
The string may contain 'd' for a drum strike or 'z' for a rest. By default a voice starts
with no drum pattern and '%%MIDI drumon' is needed to enable the drumming. The drum
pattern is repeated during each bar until '%%MIDI drumoff' is encountered. The %%MIDI drum
command may be used within a tune to change the drum pattern. This command places the
drum sounds on channel 10 and assumes your tone generator complies with the General Midi
standard - if it does not, then you may hear tones instead of drum sounds.
In both the gchord and drum commands, the standard note length of a single note f,c,z or d
is not set by the L: command. Instead it is adjusted so that the entire gchord string or
drum string fits exactly into one bar. In other words the duration of each note is divided
by the total duration of the string. This means that, for example, the drum string "dd" is
equivalent to drum string "d4d4". You cannot currently specify fractions directly (eg.
C3/2) as done in the body of the music, but it is still possible to express complex
rhythms. For example, to indicate a rhythm such as (3ddd d/d/d/d, you would write the
%%MIDI drumbars n
The %%MIDI drum line can sound quite monotonous if it is repeated each bar. To circumvent
this problem a new MIDI command %%MIDI drumbars n where n is a small number will spread
out the drum string over n consecutive bars. By default drumbars is set to 1 maintaining
compatibility with existing abc files. You should take care that the drumstring is evenly
divisible between the drumbar bars. Also the time signature should not change between bars
in a drumbar unit. (Sample abc file in doc/CHANGES June 24 2008.)
%%MIDI gchordbars n
This command spreads the gchord string over n consecutive bars just like drumbars (above).
(A sample is found in doc/CHANGES March 17 2009.)
With version 1.54 Dec 4 2004 of abc2midi, notes in chords (eg. [FAc]) are not played in
the same instant but offsetted and shortened by 10 MIDI time units. Thus the first note in
the chord (eg. F) is played for the full indicated time, the second note (eg. A) starts 10
MIDI units later and is shortened by the same amount and the third note starts another 10
MIDI units later and is shortened by another 10 units. This introduces an "expressivo"
option and avoids the heavy attack. (This does not apply to gchords or multivoiced
chords.) The amount of the delay and shortening may be configured by the MIDI command
%%MIDI chordattack n
where n is a small number. If n is zero, then abc2midi should behave as in earlier
versions. The delay n is in MIDI time units where there are 480 units in a quarter note
beat. The program may not run correctly if n is too large and there are short chords.
%%MIDI randomchordattack n
Like above except that the delay is a random variable uniformly distributed between 0 and
%%MIDI trim x/y
where x and y are two numbers. This command controls the articulation of notes and chords
by placing silent gaps between the notes. The length of these gaps is determined by x/y
and the unit length specified by the L: command. These gaps are produced by shortening the
notes by the same amount. If the note is already shorter than the specified gap, then the
gap is set to half the length of the note. The fraction x/y indicates a note duration in
the same manner as specified in the abc file. The actual duration is based on the unit
length specified by the L: field command. It is recommended that x/y be a fraction close
to zero. Note trimming is disabled inside slurs as specified by parentheses. You can turn
off all note trimming by setting x to 0, eg 0/1. By default, note trimming is turned off
at the beginning of a tune or voice command.
%%MIDI expand x/y
where x and y are two numbers defining a fraction less than 1. This command controls the
articulation of notes and chords in the reverse manner. The notes are lengthened by this
fraction so they overlap the start of the next note.
%%MIDI drummap note midipitch
Please see abcguide.txt.
%%MIDI ptstress filename
This command loads file filename into abc2midi which contains the Phil Taylor stress
parameters and puts abc2midi in the mode where it applies these stress parameters on every
note. This model runs in opposition to the standard beat model, so the MIDI beat,
beatstring, beatmod commands become ineffectual. This also means that the dynamic
indications !f! !pp! etc. do not work any more.
There are two different implementations of the stress model. Model 1 modifies the note
articulation and takes control of the MIDI trim parameters too. To revert back to the
standard model, put the command %%MIDI beataccents. Model 2 modifies both the onset and
ending of each note allowing a musical beat to expand or contract in time. However, the
length of a musical measure should be preserved. Note if you using model 2, which the
current default, you must include -BF as one of the runtime parameters of abc2midi.
The model divides a bar into equal segments. For each segment, a loudness or MIDI velocity
is specified and a duration multiplier is specified. If a note falls into a specific
segment, it assumes the velocity of that segment and its duration is modified accordingly.
If the note overlaps more than one segment, then the note assumes the average of those
The input file specifies the number of segments and the loudness and duration multipliers
for each segment. The file has the following format. The first value is the number of
segments and each line specifies the velocity and duration multiplier of the specific
segment. The velocity is limited to 127 and the duration is a decimal number. The note
durations is modified by varying the gap between notes, so it is not possible to extend a
note. This preserves the regular tempo of the music. The program scales, the note duration
indications by dividing it by the maximum value which here is 1.4.
%%MIDI stressmodel n
where n is either 1 or 2, selects the stress model implementation.
other %%MIDI commands such as bendvelocity, bendstring, controlstring have been
introduced recently and are described in the file abcguide.txt.
COMPATIBILITY WITH DRAFT STANDARD 2.0
The proposed standard introduces a new copyright field using the syntax
%%abc-copyright (c) Copyright John Smith 2003
Abc2midi now inserts this in the MIDI file in the form of a metatext copyright tag.
Changes were made to the event_specific function in store.c to process the copyright
information. It is also copied into the Karaoke track (if it is created) as as @T field.
Use abc2midi online using onworks.net services