Purpose was written as an open-source wrapper to the DirectMidi library (itself, of course, being a wrapper to the DirectMusic library). As such, it is of course open to anyone who wants to make modifications. Suggestions are, however, welcome; as of July 19, 2007 (the release of version 0.9.1), I have completed the level of functionality I think I need for my own application; therefore, I'm sure I'll find something new I need ;), but barring that this library may be in bugfix mode.

The major goal was to make applications developed in C++ be able to have the DirectMidi portion ported over to C# as seamlessly as possible. As such, the C++ namespace "directmidi" was replaced with the .net namespace "DirectMidi", but all classes , enumerations, and structures retained their names. In addition, DirectX structures referenced by the API were duplicated (as value classes where possible, reference classes if needed) with the same name in the DirectMidi namespace. Enumerations and defined values were also duplicated, and where possible their names are close to the same; due to .net's requirement of having all values part of a class or enumeration, however, some logical rearrangement was necessary, for example:

directmidi::NOTE_OFF DirectMidi::MidiMessage::NOTE_OFF


The current version is version 2.3b-0.9.1 (2.3b refers to the DirectMidi version; 0.9.1 is the .net wrapper version)

As of version 0.9.0, all of the DirectMidi classes have been wrapped; due to the developer's lack of a midi input port, however, some of the more interesting parts are slightly untested (most notably, the wrapper class for the CReceiver class, and the CInputPort class). In addition, a number of DirectMusic interfaces have been wrapped - all those which can be retrieved by CAudioPath::GetObjectInPath, portions of the IDirectMusicSegment interface, and the IReferenceClock interface.

Version 0.9.1 added bugfixes to API signatures, KsProperty implementation for COutputPort, and the ability to implement .net IDirectMusicTool's and tool graphs.

Future directions

I have finished the functionality I set out to implement in this wrapper library, but suggestions are welcome. As it stands, all of the DirectMidi functionality is wrapped, and much of the DirectMusic functionality is wrapped as well. There remain areas which are not wrapped - if anyone has a need for any further functionality, I would be more than happy to assist others in expanding this library.

Usage Notes

Download 2.3b-0.9.1 (DLL and Source)

About the Author

My name is Jason Hendrickson. I guess that's it about me for right now!

Please visit and email the project manager (me) if you'd like to give any comments, suggestions, or feedback.