XMidi Home Page



I have recently revised my XMidi package. The new version is "1.4" and I am proud to make it available.

By the way, let me introduce myself. My name is Peter Loeb. I have been a professional programmer for over 20 years and a professional musician for more years than I care to count.

What is XMidi, Anyway?

XMidi is an XML application for MIDI. What does this mean?

What is MIDI

MIDI (Musical Instrument Digital Interface) is really two things.

  1. MIDI is a way for electronic (musical) instruments to communicate. In this context, a computer can be a musical instrument. This form of MIDI is simply signals going through cables. This was the "original" form of MIDI.

    When a MIDI instrument is connected to a computer, running the right kind of software (a sequencer), a MIDI "stream" (the signals going through the cable) can be "captured" and recorded into a computer file. This is called a midi file.

  2. MIDI can exist as a file on a computer. This is the form I am interested in here. The MIDI file format has become the de-facto industry standard for music programs of various kinds.

    A MIDI file is a "binary" file. This means that, unlike a text file (.txt), it is not easily read by "normal" programs, and not easily read by humans. Try opening a MIDI file (.mid) in Notepad!

What is XML

XML (eXtensible Markup Language) is intended to do for data interchange what HTML has done for presentation on the web. If you want to know more about XML (or HTML, or a lot of other things for that matter), I suggest you look at the W3C (World Wide Web Consortium) web page.

Briefly, XML is a way of formatting data so that it can be understood by humans and computers, and so that it can be easily shared by a variety of different programs.

What is XMidi

XMidi is an XML application I wrote to handle MIDI files. It is "open source" software. There are three basic parts:

  1. MX - a program to convert a midi file to XMidi format.
  2. XM - a program to convert XMidi format to a midi file.
  3. XMidi.dtd - a DTD (Document Type Definition) to "validate" an XMidi document.

Why XMidi?

There are several issues to address.

Music Notation

XMidi doesn't deal with music notation. However, it is a big issue. Music notation evolved over hundreds of years into its present (somewhat chaotic) form. Although there are books which attempt to define rules for notation, the experts do not entirely agree.

Further, there are numerous "splinter" groups, each of which have different notational needs.

Certain things are quite clear:


MIDI allows electronic musical instruments to communicate with each other. This is a truly awesome accomplishment and should not be underestimated. However, in order to do that, it was necessary to make it user-hostile.

MIDI files are not easy to read, even for computer programs! Having written some programs which deal with MIDI, I can attest to that.


XMidi is a step towards bridging the gap between electronic musical instruments (including computers) and traditional music notation. There are some XML music notation attempts. Check out MusicXML. At some point in the future, it would be nice to "merge" XMidi (or some other package like it) with MusicXML (or some other package like it).

Despite the fact that I am quite far from reaching the above goal, yet, I believe that even in its present form, XMidi may prove to be quite useful. Some of the potential uses that I see (aside from the above) include:

The XMidi package

The XMidi files can be downloaded in one zip file which contains these pieces:


Each piece of source code contains a copy of the MIT Licence. My intent is that this should be "open source" software. See OSI for a description of what that means.

I hope that this idea will be picked up by some of the commercial software companies so that people will be able to transfer "documents" (music) from one program to another easily.


I wish to thank the author of the web site at http://www.borg.com/~jglatt/index.htm for the very informative technical articles which helped me to understand the internals of MIDI files. Thanks.

Not too long ago, Mark Leicester modified some of the code (from Version 1.3) so it could be used in the Apache Cocoon project. This is very gratifying to me. Thanks, Mark.

If you have questions, comments, suggestions, etc. you may contact me at peter@palserv.com.


Last updated Mar 22, 2005.