Now hosted by Finnegan Software, Inc. - since March 15, 2007
All references to "me, myself, and I" are those of the original author,
Timur Tabi, except where noted (and at the moment, there are no
notes... :) )
Last Updated: November 19, 1999
The OS/2 Real-Time MIDI Subsystem, or
RTMIDI, provides support for sending and receiving
MIDI messages and processing them in real-time. For more information on
OS/2 Warp,
check out my new
user page
on the OS/2 Supersite.
Why does OS/2 need RTMIDI?
OS/2 is a protected, non real-time operating system. This means that
applications
don't have direct hardware access, nor are they real-time. Applications
run in what
is called "user space" or "application space". Device drivers,
which run in "kernel space", do have access to the hardware and are
real-time
(to an extent).
The advantage of this is that applications can't hurt
the rest of
the system. If an application crashes, nothing else will be affected.
This is what
the trademark "Crash Protection" means. The drawback is that in order
to do any real-time processing, a device driver is required.
Windows 3.1 is not a protected OS. Applications can do
real-time processing,
but they can also take down the entire computer if they crash. Windows
95, when
running only true 32-bit Windows 95 applications (and there are a lot
more OS/2
applications then there are true Windows 95 applications) is also
protected. However,
16-bit Windows 3.1 apps can still take down Windows 95.
Therefore, OS/2 applications cannot process MIDI data
effectively.
This is the main reason why there haven't been any real OS/2 MIDI
applications to
date. And this is where RTMIDI comes in.
So you say, "Well, I'll just use a 32-bit Windows MIDI
application."
Good luck. Such appliations have incredibly bad latency problems. Even
without RTMIDI,
OS/2 is nowhere near as bad as Windows. Don't believe me? Check out
this article
from Microsoft on "Overcoming
Timer-Latency Problems in MIDI Sequencers" (you may need to register
with MSDN before you can view it). So what's their solution? Put
all your
timing-sensitive code into a 16-bit DLL. In other words, Microsoft has
not solved
the problem, and there is no indication that they will. So if you
want a true
32-bit real-time MIDI solution, OS/2 Warp 4 is a better choice than
Windows.
How does RTMIDI work?
The core of RTMIDI is a ring-0 physical device driver (PDD) called
MIDI.SYS. There
is also a dynamical link library (DLL) called RTMIDI.DLL which provides
an API for
applications. For most functions, RTMIDI.DLL just acts like a front-end
to MIDI.SYS,
but in some cases it actually does some real work.
RTMIDI's primary function is to perform the real-time
MIDI processing
needs that an OS/2 application cannot perform, such as:
Sending and receiving MIDI data to/from the hardware.
Timestamping of MIDI data with millisecond accuracy
Providing real-time playback of MIDI data
Providing real-time synchronization
Providing the ability to process MIDI data in real-time
What other information on RTMIDI is
available?
The DevCon 8 documentation, in INF format is available here.
The DDK
Online MMPM/2 Device Driver Reference contains the latest official
RTMIDI device
driver reference. Note that it does not cover any undocumented
features, such as
Type B and Type C drivers.
The The
OS/2 API Project
is slowly being updated to include all of the RTMIDI API's, including
the undocumented
calls in OS/2 Warp 4. If you don't find what you need, email
me.
Also on the DevCon
you can find JRTMIDI,
a Java interface to RTMIDI.
If you're a Pascal programmer, you might be interested in this header
file: rtmidi.pas.
The RTMIDI architecture was presented at the following
conferences:
OS/2 Warp Game Developer Conference in San Mateo, California on
August 15, 1995.
IBM Technical Interchange in Paris, France from October 2 to
October 6, 1995.
ColoradOS/2 - from October
14, 1996 to October 18, 1996.
Click here to download the latest version of
the Freelance
Graphics overheads that I use for presentations on RTMIDI. This file
was created
with Freelance Graphics 2.1 for OS/2, but it should work on all
versions of FLG.
What are the RTMIDI release dates?
The first release, dubbed Phase I, was made available on DevCon
8 as part of the Entertainment Toolkit.
Phase I provides real-time playback and high-resolution
timing.
A much improved version, called Phase 1.5, was released
in OS/2 Warp
4. However, all of the enhancements are officially undocumented. Look
for documentation
on this page and on the The
OS/2
API Project. Currently, the documentation isn't up to date, so email
me if you want to know more.
There is an update to RTMIDI available from IBM
that you should
download. It is available on the DD
Pack.
Here are some web sites and articles
that reference RTMIDI. If you know of a MIDI
programming site that doesn't have an entry on RTMIDI, send a note to
the author
and to me (so I can bug him/her too!).
JRTMIDI
- Java classes for RTMIDI, available on the DevCon.
vismidi3.zip - IBM VisualAge C/C++
OpenClass classes for RTMIDI, thanks to Joel Troster.
Here is a list of Type A device drivers for RTMIDI. Type A drivers
provide direct
hareware support for RTMIDI. Most of these are available on the DD
Pak Online.
MPU-401.
A generic driver for sound cards with true hardware MPU-401
compatability (e.g. not the AWE-32). It only uses UART (dumb)
mode. This driver is also an MMPM/2 driver. The source code is
available on the DevCon
DDK.
OPL-3.
A generic driver for sound cards with true hardware Yamaha OPL-3 FM
chips. This driver is also an MMPM/2 driver.
PAS-16.
The latest drivers for Warp 4 support RTMIDI, but not MIDI input
(recording).
The Manley Gravis
Drivers - Excellent drivers for your Advanced Gravis soundcard,
RTMIDI support will be added soon.
ICS2115.ZIP
- This drivers supports the WaveFront MIDI synthesizer on the Turtle
Beach Classic. It comes with an updated MPU401.SYS as well.