Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
ABC2MIDI(1)		    General Commands Manual		   ABC2MIDI(1)

       abc2midi	- converts abc file to MIDI file(s)

       abc2midi	 infile	 [refnum]  [-c]	 [-v]  [-ver]  [-t]  [-n  limit] [-RS]
       [-quiet]	[-silent] [-Q tempo] [-NFNP] [-NFER]  [-NGRA]  [-STFW]	[-OCC]
       [-NCOM] [-HARP] [-BF] [-TT] [-o outfile]	-CSM [filename]

	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

       -RS    use 3:1 instead of 2:1 for broken	rhythms

       -quiet Suppresses some common warnings.

	      Supresses	other messages.

       -n  X  limits the length	of the file name stem to X characters

       -Q  tempo
	      sets the default tempo in	quarter	notes per minute if it was not
	      specified	in the abc header.

       -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.

       -o outfile
	      write output to outfile

       -CSM infile
	      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

       * 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 output

       * If guitar chords are present, they are	used to	generate an accompani-
       ment in the MIDI	output.

       * If there are mis-matched repeat signs in the  abc,  the  program  at-
       tempts  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

       *  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.

       * 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 abc2midi.

       Each  of	 these	should appear on a line	by itself. All of them are al-
       lowed 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 it.

       %%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 instru-
       ment 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 whereever they	occur.
       (Alternatively you can use !<(! and !<)!.) Similarly  the  instructions
       !diminuendo(! and !diminuendo)! are equivalent to %%MIDI	beatmod	-15.

       %%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 ve-
       locity  units. This instruction allows you to set this default to value

       %%MIDI nobeataccents

       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.

       %%MIDI beataccents

       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 following

       %%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 semi-
       tones, 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 du-

       %%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	funda-
       mental 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  individ-
       ual  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 indi-
       vidual  notes starting from the lowest note of the chord	(not necessar-
       ily 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 ref-
       erence the note E.

       Like other gchord codes,	you may	append a numeral indicating the	 dura-
       tion of the note. The same rules	apply as before.  You can use any com-
       bination	of the gchord codes, (fcbghijGHIJz).

       %%MIDI chordprog	n

       Sets the	MIDI instrument	for the	chords to be n.	 If  the  command  in-
       cludes  the string octave=n where n is a	number between -2 and 2	inclu-
       sive, 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 in-
       cludes the string octave=n where	n is a number between -2 and 2	inclu-
       sive,  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	corre-
       sponding	 melodyvol  command  since  there  are	3  velocity values for
       melody, set using the beat command.

       %%MIDI gchordon

       Turns on	guitar chords (they are	turned on by default at	the start of a

       %%MIDI gchordoff

       Turns off guitar	chords.

       %%MIDI droneon

       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 ve-
       locity  of  80.	This can be configured by the %%MIDI drone command de-
       scribed below.

       %%MIDI droneoff

       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 spec-
       ify the MIDI pitches of the two notes in	the chord, and n4 and n5 spec-
       ify the MIDI velocities of the two notes.  If you do not	set these  pa-
       rameters	 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

       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  de-
       fault 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 in-
       stead 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  ad-
       justed  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  cur-
       rently specify fractions	directly (eg. C3/2) as done in the body	of the
       music, but it is	still possible to express complex rhythms.  For	 exam-
       ple,  to	 indicate  a rhythm such as (3ddd d/d/d/d, you would write the
       string "d4d4d4d3d3d3d3".

       %%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  con-
       secutive	 bars. By default drumbars is set to 1 maintaining compatibil-
       ity 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

       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 an-
       other 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 de-
       lay 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  dis-
       tributed	between	0 and n-1.

       %%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  parenthe-
       ses.  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  pa-
       rameters	 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	 loud-
       ness  or	MIDI velocity is specified and a duration multiplier is	speci-
       fied. 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 segment values.

       The  input  file	 specifies the number of segments and the loudness and
       duration	multipliers for	each segment. The file has the following  for-
       mat.  The first value is	the number of segments and each	line specifies
       the velocity and	duration multiplier of the specific segment.  The  ve-
       locity 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 mu-
       sic. 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

       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.

       abc2ps(1), midi2abc(1), yaps(1).

       James Allwright <>

	by Seymour Shlien <>

       This man	page describes abc2midi	version	2.27  June 25 2006.

       Copyright 1999 James Allwright

       abc2midi	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.

       More complete documentation may be found	in  abcguide.txt  which	 comes
       with the	abcMIDI	distribution.

				27 August 2011			   ABC2MIDI(1)


Want to link to this manual page? Use this URL:

home | help