This file has not been updated since I have taken over the support of the abcMIDI package. To see the list of the latest versions see the readme.txt file. To see a log of all the changes I have made see the file CHANGES. The abcguide.txt and the unix (linux) man files (eg. abc2midi.1) contain the latest user guides. The abcguide.txt probably contains the most detail. The official version number of the abcMIDI package is given in the file VERSION. Seymour Shlien 26 October 2003. ------------------------------------------------------------- current versions : midi2abc version 2.4 abc2midi version 1.24 abc2abc version 1.19 yaps version 1.12 Improvements made to abcMIDI package ------------------------------------ 1. abc2midi was found not to handle comments at end of lines properly. This was fixed in the source code with release 1.2.1 of abc2midi. 2. midi2abc was generating %MIDI instead of %%MIDI for a program change. This was fixed in release 1.6.1 3. Release 1.2.2 of abc2midi introduced the -c checking only option and some new error checking, as well as code to deduce repeats. 4. abc2abc 1.0 was released on 25th July 1996 5. Release 1.2.3 of abc2midi allowed more flexible use of ::, :| and |:, improved handling of tuples and other minor improvements. 6. Added #ifdefs for Mac port. 7. Added -xm and -xl options to midi2abc plus a straight quantization algorithm for better handling of MIDI output by another package. 8. Added -Q option to midi2abc. 9. Removed the default heuristic algorithm and use a straight quantization algorithm by default, with code to find a good note length by brute-force trial - Original algorithm sometimes made mistakes in quantizing. 10. Added V: field to allow multi-track output from abc2midi in version 1.3 11. Changed Error messages to Warning messages for some error conditions in abc2midi. 12. Improved bar length checking to prevent errors being generated by the anacrusis in abc2midi. 13. Added checking for equal track lengths in abc2midi. 14. Made midi2abc fail cleanly when it runs out of memory for notes. 15. Fixed part-handling bug in abc2midi. 16. Improved handling of bar placement in midi2abc. 17. Fixed various type inconsistencies in midifile.c to improve portability. 18. abc2midi was not handling propagation of accidentals within a bar e.g. |^cdc|. This was fixed. 19. Added handling for the 7 key signature modes and re-wrote parsekey in the process. 20. Fixed bug in hornpipe handling routine (tomidi.c). 21. Fixed bug in default unit calculation (toabc.c). 22. Changed midi2abc to look at last note to decide between equally likely key signatures and suggest a mode for the tune if it does not appear to be major mode. 23. Changed strchr to index in mftext.c to aid portability. 24. Changed handling of grace notes to report more error conditions. 25. Changed midi2abc to generate voice fields for format 1 files and also to assume the same length anacrusis in each voice. 26. -xa option added to midi2abc to deduce anacrusis by looking for a strong beat. 27. Release 1.4 of abc2midi allows [ and ] for chords, ( ) for slurs and also introduced a queue mechanism for allowing general polyphony. 28. Release 1.4 of abc2midi appears to a fix a problem with chord generation. 29. Release 1.4 of abc2midi recognizes J, H, L and R as note decorations. 30. Fixed bug in hornpipe routine. 31. Fixed bug in note decoration recognition. 32. Added support for multiple fields in " " and ! ! separated by ; . 33. Fixed problem with grace notes before chords. 34. Added support for new K: field standard 35. Fixed bug that caused spurious ties from notes at the end of a slur field. 36. Release 1.4.2 of abc2midi made on 15th January 1997. 36. Correction to midi2abc quantization algorithm 37. abc2midi changed to allow TAB character instead of space. 38. -n option added to abc2midi (not the PC version, which already uses almost the maximum possible memory). 39. Support added for augmented and diminished chords. 40. Support added for repeats in part notation e.g. P:A(AB)6. 41. Added transpose option to abc2abc. 42. Release 1.4.3 of abc2midi made on 28th April 1997. 43. Added support for w: field in abc2midi 44. Fixed problem in chord handling in abc2abc 45. %%MIDI gchord allowed in mid-tune 46. added %%MIDI chordprog, bassprog, chordvol, bassvol 47. length specifiers allowed in %%MIDI gchord string 48. fixed bar-length checking in abc2abc to do chords and grace notes 49. Made the linebreaking option more intelligent in abc2abc. 50. Made abc2abc linebreak at P: 51. added -u option to abc2abc 52. added %%MIDI control command to abc2midi 53. added support for karaoke MIDI to abc2midi. 54. changed karaoke support to act line by line. 55. Minor bug fix to karaoke support in version 1.5.1 56. Fixed bug in part handling pointed out by Steve Allen. 58. Complete re-write of midi2abc to use dynamic data structures. version 2.0 (beta) released on 8th June 1998. 59. Added -k (specify key) and -ga (guess anacrusis) options to midi2abc. Fixed bug in printing rests. 60. version 2.0 of midi2abc released on 12th June 1998. 61. non-portable error diagnosis removed from mftext and midi2abc. 62. midi2abc fixed to always produce legimite length notes. 63. Parser changed to allow arbitrarily long lines. 64. midi2abc changed to recognize rests before each track. 65. midi2abc changed to used c = 72 (and undo abc2midi pitches). 66. Parser changed to allow decorations to be applied to chords. 67. abc2midi changed to allow broken rhythm between chords. 68. abc2midi changed to improve accuracy of reported line numbers. 69. abc2midi mallocs more space for notes or text when needed. 70. support for staccato notes in chord. 71. improved tie handling code. 72. fix to allow all channels to be used (suggested by De Clark). 73. Static limit on number of syllables in w: fields removed. 74. Allowed . in part specifier (P: field in header). 75. Used %%MIDI beat to implement !ppp! to !fff!. 76. Added -o option to abc2midi to specify filename. 77. Corrected problem with Voice/Part conflict reported by Brendan Macmillan. 78. Removed bug in line number generation for error reports. 79. Version 1.5.8 of abc2midi released on 21st Sept 1998. 80. Further bug fixing for Voice/Part problem. 81. Trap buffer overflow in NOFTELL version - problem reported by Richard Robinson 82. Clean up NOFTELL modifications to remove linker problems (pcc version). 83. New NOFTELL mechanism introduced - do a dummy write track to determine track length in abc2midi. 84. P:X in the header allowed to be a part marker in abc2midi. 85. Changed save_note() so that chord generation takes account of transpose - problem report and bug fix by Seymour Shlien 86. Tidied up note off queue handling in abc2midi. Fixes problem with PCC version NOFTELL fix. 87. Changed min to long in midi2abc guesslengths(). Fixes PCC divide by zero error. 88. Added rtranspose to abc2midi. 89. Cleaned up midi2abc and midifilelib code (no implicit declarations of parameter types). 90. Voices inherit global transpose, tempo and meter instead of values from previous track. 91. Removed spaces from after tie signs in midi2abc : abc spec. does not allow spaces in chords. 92. voicecontext structure introduced to make K: and L: fields local to their own voice in file parsing stage. 93. printf() fix: DJGPP seems to require %ld and not %Ld in printf to print longs. 94. exit value for all codes made 1 on error and 0 on normal termination. 95. re-write of karaoke code to integrate it into main mywritetrack() code. Also allows multiple verses and has better error-checking. 96. Added %%MIDI chordname and library of named chords to abc2midi 97. Fixed bug in | handling in abc2midi w: field. 98. Better checking for M: field in abc2midi 99. chord handling and broken rhythm handling moved to first pass of abc2midi. 100. Further bug fixes for abc2midi w: field. 101. %%MIDI nobarlines and %%MIDI barlines options added to abc2midi - based on changes suggested by Laura Conrad. 102. Added support for M:none. 103. Voice numbers changed from absolute voice numbers to numerical labels. 104. Accompaniment written to separate track by abc2midi. 105. Support put in the parser for abc2ps's [X: ] inline field notation. 106. Fix to stop bogus Q: fields crashing abc2midi. 107. Support for "_Ignored words" in abc2midi. 108. abc2midi allows voices after voice 1 to be missing in some parts. 109. Changed mf_sec2ticks() in midifile.c to get rid of rounding errors that were affecting the PCC version of midi2abc. 110. Fixed problem with tracks not starting at time=0 in abc2midi. 111. Fixed overflow problem with long H: fields in abc2midi. 112. [1 allowed to go mid-bar and [2 allowed to be separated from :| in abc2midi. More robust repeat-fixing algorithm to take account of |1 and :|2. 113. Fix to midifile.c suggested by Seymour Shlien to fix problem with porting to MS visual C++. 114. Added support for trills in abc2midi. 116. Fixed bug in midi2abc that caused it to crash if input MIDI file contained long metatext strings. 117. Added support for lyrics to tied notes in abc2midi. 118. Fixed bug that mangled %%MIDI lines in abc2abc and also stopped abc2abc filtering out comments outside tune. 119. Added support for clefs in K: field. 120. Replaced K:cclef with proper clefs; baritone, tenor, alto, mezzo and soprano. 121. Minor improvements to parseabc.c - recognizes multiple '/' in length specifier and warns about c, or C'. 122. Added support for the I: field to parseabc.c and changed abc2midi to recognize I:octave=X. 123. Added -d and -v options to abc2abc for changing unit note lengths. 124. Parser changed to report an error for \ * ** or ! in mid music line. 125. midi2abc changed to look for a filename if -f option is missing. 126. part-handling changed in abc2midi to handle an arbitrary number of parts. 127. Support for variant endings more complicated than [1 and [2. Also allow || to occur mid-bar. 128. Support for Mac-style text files (with \r as end of line). 129. -o and -sum options added to midi2abc by Seymour Shlien. 130. Fixed bug in Part/variant ending interaction in abc2midi. 131. Fixed bug in yaps' handling of in-tune M: fields. 132. Added font selection commands to yaps. 133. Added support for grace notes within broken rhythm to abc2midi. 134. Added page numbering to yaps. 135. Fixed bug in yaps which caused fonts to get lost after a newpage. 136. Added vskip command to yaps. 137. Added %% font and font-spacing commands to yaps. 138. Minor changes to support Pacific C compiler. 139. Added support in yaps for ties and slurs straddling 2 music lines. 140. Added -x (number tunes with number in X: field) to yaps. 150. Fix to yaps to handle guitar chords with characters in the range 128-255. 151. Added proper tuple support to yaps - uses half-brackets when notes in the tuple are not a beamed set. 152. Changed guitar chord transposition in abc2abc to handle A/B and A(B) as well as not transposing anything with a leading underscore or other special symbols. 153. Added support for flipping note heads and spacing out accidentals in yaps. 154. Fix for K: parsing code which was running past the end-of-line character in some cases and generating extra error messages in abc2midi. 155. Added support for treble-8, treble+8 and similar variants in yaps. 156. Fix for V: fields in header causing abc2midi to crash. 157. Changed K: field parser to accept clef=, octave= and transpose= . 160. Added support for %%staffsep to yaps. 161. Fix to make yaps bar-length checking cope with in-tune metre changes. 162. Changed yaps so that all tune spacing is calculated before output file is opened. This is used to generate encapsulated PostScript and to start a new page instead of breaking a tune across pages. 163. Added %%MIDI beatstring to abc2midi - using code by Martijn Versteegh. 164. Fixed BoundingBox generation in yaps. 165. Added explicit function type declarations and re-ordered some functions as well as adding genmidi.h and queues.h to make code compile under Pacific C and hopefully improve portability. 166. Added the %%MIDI drum command and !drum! and !nodrum! to abc2midi. 167. Added support for %%titleleft and %%titlecaps to yaps. 168. Fixed crash caused by !drum! with no %%MIDI drum statement. 169. Fixed obscure division by zero error in midi2abc. 170. Added landscape mode to yaps. 171. Shortened tempo note tail length in yaps so that it never collides with the title. 172. Corrected positioning of C clef in yaps. 177. Added support for -n X to give X bars per line in abc2abc, with correct handling of associated w: field. 178. Added support for dotted rests to yaps. 179. Fixed bug with broken rhythm in yaps. 180. Fixed bug causing abc2abc to crash with comments at end of w: field. (code is still not ideal). 181. Created parser2.c for common code between abc2midi and yaps. 182. Made erroneous note-off events a non-fatal error in midi2abc. 184. Added drum track detection to midi2abc, with output that selects channel 10 for drums. 185. Removed channel number from midi2abc %%MIDI program output, so that abc2midi matches instrument to the correct voice in midi2abc output. 186. Added -s option to midi2abc to retain very short notes. 187. Support for abc2midi to handle very long filenames (provided by Colin Watson). 188. Fix to allow abc2midi/abc2abc/yaps parser to handle space between key A-G and mode. 189. Fix for abc2midi handling of non-consecutive voice numbers. 190. More user-friendly error message when chord buffer overflows in abc2midi. 191. Support for w: line continuation characters in yaps. 192. Fixed problem with trill generation in abc2midi (was the wrong length). 193. Fixed inconsistency in midi2abc.c causing a one octave transpose if the -k switch was specified. 194. Changed abc2midi to support _, ^, <, > and @ in guitar chords. 195. Added support for / in abc2midi guitar chords. 196. Fix for Q:1/2=X in yaps. 197. Added support for breve notes and breve rests to yaps. 198. Changed yaps to accept rests in tuples. 199. Changed parser to accept tuples written as (n::r . 200. Fix for handling ties across chords in yaps. 201. Improved handling of M:none in yaps. 202. Fixes for bar-length checking in yaps. 203. Added %%MIDI ratio to abc2midi. 204. Applied fix supplied by Ingo Saitz for change of tempo not being handled properly by abc2midi in multi-voice music. 205. Further fix for bar-length checking in yaps. 206. Added code change by Seymour Shlien to midi2abc for -sr option to handle MIDI with gaps between notes that come out as rests. 207 Added %%chordsabove and %%chordsbelow to yaps. 208. Added handling for U: field (abbreviation) to parser. 209. Fix to abc2midi to stop accidentals in accompaniment chords from being applied elsewhere in the bar. 210. Changed K: field parsing so that it only starts a tune if it contains a key signature. 211. Trapped condition where double ties could cause segmentation faults - thanks to Seymour Shlien for tracing down this problem. 212. Added -t and -n options to abc2midi for better handling of filenames. 213. Made parser more robust when handling L: field - thanks to Seymour Shlien for telling me that this could cause division by zero errors. 214. Fix for problem reported by Ronan Keryell - gchord generation now works after a meter change in the tune. 215. Added %%MIDI pitchbend command using code supplied by Peter Spath. 216. Modified readstr() in abc2midi/yaps parser to avoid potential buffer overflow problem. 217. Added support for strings before and after Q: tempo field in yaps, abc2midi and abc2abc. Also added support for yaps to print mid-tune tempo change. 218. Added support for N: field to yaps. 219. Fixed problem with channel allocation in abc2midi following bug report from Ronan Keryell. 220. Fixed abc2midi problem with broken rhythm > applied to chords thanks to bug report by Ronan Keryell. 221. Added to support for multiple bar rests with Zn notation to abc2abc, abc2midi and yaps. 222. Fix to abc2abc guitar chord transposing thanks to bug report by Atte Jensen. 223. Fix to handling of reserved characters H-Z in abc2abc following bug report by Luis Pablo Gasparotto. 224. Tidied abc2abc code by creating emit_() routines. 225. Fixed bug with broken rhythm marker able to insert itself in tied notes. Thanks to Michel Chasseriau for reporting this. 226. Added support for voice filtering (-V option) to abc2abc. Many of of the code changes for this were made by Seymour Shlien. 227. Added warning message to abc2midi when T: is found outside a tune. 228. Added -nt option to midi2abc to ignore triplets and broken rhythm. 229. Added -X n option to abc2abc.