<h1>libjdkmidi</h1>

<p>
<b>Copyright 1986-2004 by J.D. Koftinoff Software, Ltd.</b><br>
<a href="http://www.jdkoftinoff.com/"></a><br>
<a href="mailto:jeffk@jdkoftinoff.com">jeffk@jdkoftinoff.com</a><br>
</p>

<p>
Released under the GPL: May 1, 2004
Please see the file COPYING
</p>


<h2>Quick Start</h2>

<p>(for gcc toolchains: linux,macosx,cygwin,mingw32,etc)</p>

<pre>
cd build/gnu
make tests
./jdkmidi_test_multitrack ../../songs/jeffswedding.mid | less
./jdkmidi_rewrite_midifile ../../songs/jeffswedding.mid out.mid
./jdkmidi_test_show out.mid
make clean
less ../tests/jdkmidi_rewrite_midifile.cpp
</pre>

<h2>Directory List</h2>

<pre>
include/jdkmidi
        : Header files for libjdkmidi

src
        : Source files for libjdkmidi

tests
        : Source files for simple test programs

build/gnu
        : Place to do builds in for gnu gcc

build/vc6
        : MS Visual C++ 6 projects

build/macosx
        : Mac OS X xcode project added

songs
        : Place I keep some MIDI files in for testing

docs
        : Place to keep some documentation, autogenerated from doxygen
</pre>


<h2>Usage with your own projects</h2>

<pre>
Add the include directory:
    -I /libjdkmidi/include

Add the library directory:
    -L /libjdkmidi/lib

Link with libjdkmidi:
    -l jdkmidi

All symbols are in the c++ namespace jdkmidi
</pre>


<h2>History</h2>

<p>
This library was originally a collection of utility functions for MIDI written in C back in 1986 for the Atari ST computer.  Since then it has evolved into a fairly powerful C++ MIDI Library including:
</p>

<ul>
<li> MIDI parsing
<li> MIDI Show Control message creation and handling
<li> Standard MIDI File type 0 and type 1 reading and writing
<li> Timestamped MIDI message and System Exclusive encapsulation
<li> Efficient MIDI Track objects for sequencing
<li> MIDI Track objects for editing MIDI events
<li> MIDI message process chains
<li> Containers for multiple MIDI Tracks with iterators
<li> MIDI Sequencer core for sequencing and triggering GUI events
<li> MIDI Driver abstractions for I/O and sequencing
<li> MIDI Driver implementation for Win32 for I/O and sequencing
<li> Tempo calculations
<li> MIDI Matrix to count note on's and off's and hold pedals 
  to avoid stuck notes and all-notes-off problems when merging midi streams
<li> SMPTE management and calculations
</ul>

<p>For more information, please contact Jeff Koftinoff <jeffk@jdkoftinoff.com>
</p>

<h2>CHANGELOG</h2>

<pre>
1986: MIDI parsing and message handling added, in C
1989: Simple MIDI File Parsing added
1989: Ported to run on Macintosh with Think C
1989: Converted to old style C++ with GCC for Atari ST
1990: Ported to work on Borland C++ 3.1 for DOS MIDI Sequencers
1992 - 1996: Added MIDI Show Control classes
1997-1998: Added more robust MIDI Track classes, WIN32 support
2004: Dusted off, moved into namespace jdkmidi and cleaned up a little
2004 May 1: Released under the GNU GENERAL PUBLIC LICENSE
2004 May 26: Some clean ups, warning fixes, mac os x project file added, 
     visual c++ project file added, jdkmidi_rewrite_midifile added
2005 Oct 14: Some more warning fixes, fixed dangerous seq( seq ) in constructor.
     visual c++ 2005 project file added.
</pre>
