  This is a device driver for many MIDI controllers.  It used to be
three separate drivers for BSD, Linux and SVR4 systems.  It is now
one unified driver with small support files for each individual system.

  Its features include:

  + Support for many different MIDI cards.

  + Support for different timing mechanisms.  kernel and SMPTE are
    the ones that really work.  There's code to support using the
    MPU401 in intellegent mode as a timing reference, but it doesn't
    buy you anything.

  + Reads/Writes data in Standard MIDI File event form.  Just
    grab an event from a Standard MIDI File and write(2) it
    to the device - the driver will do the right thing.

  + Supports open, close, read, write, ioctl and select
    system calls.

  + Supports an ASYNC mode.  The driver will send a SIGIO to the
    process group whenever data arrives or data can be written.

  + Automatic note off and controller reset on device close(2)

  + SMPTE timing support if you have a Music Quest card with
    SMPTE features.

  + A "raw" mode for reading/writing events without timing information
    (ie immediately).

  + Some proto sound card support.  Perhaps the GUS PnP Pro was a bad
    choice for a first attempt.  But at least it made me write some
    good PnP code.

  To install, Linux and Unixware have Makefiles.  The BSDs have
READMEs with specific instructions.  Read the README for you
system and follow the instructions in it.

  The man page is written with the new mandoc macros as opposed
to the old man macros.  Berkeley is making this shift and
I'm following suit.  I don't know how available the mandoc
macros are, but groff comes with them.  There is a Makefile file
for making and installing the man page.  Edit it as necessary.

  This implementation of the driver uses long longs when
converting SMF ticks to/from kernel ticks.  This is to
preserve accuracy.  Without using long longs, a long value
will overflow, or accuracy will be lost be dividing early.
Unfortunately doing long long math is costly and impacts
the system.  If someone is good with numerics and has a
good way of doing these calculations without losing accuracy,
or overflowing, please let me know.

mike
durian@boogie.com
