# libjdkmidi

Copyright 1986-2004 by J.D. Koftinoff Software, Ltd.
jeffk@jdkoftinoff.com

Released under the GPL: May 1, 2004 Please see the file COPYING

## Quick Start

(for gcc toolchains: linux,macosx,cygwin,mingw32,etc)

    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

## Directory List

    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

## Usage with your own projects

    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

## History

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:

- MIDI parsing
- MIDI Show Control message creation and handling
- Standard MIDI File type 0 and type 1 reading and writing
- Timestamped MIDI message and System Exclusive encapsulation
- Efficient MIDI Track objects for sequencing
- MIDI Track objects for editing MIDI events
- MIDI message process chains
- Containers for multiple MIDI Tracks with iterators
- MIDI Sequencer core for sequencing and triggering GUI events
- MIDI Driver abstractions for I/O and sequencing
- MIDI Driver implementation for Win32 for I/O and sequencing
- Tempo calculations
- 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
- SMPTE management and calculations

For more information, please contact Jeff Koftinoff

## CHANGELOG

    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