Well, we still don't have any HM? file specs, however when
you make HMP files using DTX/DTX2's MIDI->HMP conversion you will soon notice, that
most of your HMP files will either crash Descent immediatly or make it very unstable,
crashing Descent when the music loops, when switching to the automap or sometimes when you
want to exit the mine...
So Dan Wentz has took the time to write down some tips to
avoid this and make HMP files with the command-line driven tool MIDI2HMP, that do not
crash Descent.
MIDI2HMP - MID->HMP converter
Ok here's Dan's 7 steps to safe MIDI composition for Descent
1 and 2.
1) OK first of all it's good practice to
place all non-note midi events (chorus/reverb/pan/volume/patch/expression etc) before any
note events start. So for example...

You'd want to first shift the whole song to begin at measure
2. And place all non-note events (initializing channels) somewhere between the
second beat of the first measure (*) and the first beat of the second measure ($)
where the note data would begin to play.
2) I'm not sure about other conversion
utilities, but this is required for HMI. Track one should be labeled "Loop" and
contain only the events mentioned in the next step.
- All instrument tracks for General midi songs need to be named
with "[G]" preceding whatever instrument name is used (instrument name is
optional but good to do for reference) For example "[G] grand piano."
- FM song's instrument tracks need to start with [F].
- Furthermore, GUS cards can't read instruments unless you
include a "U" So for a safe guard, D2's midi tracks all started with
"[GUF]" to cover all bases.
- Track names may NOT contain a hyphen!
3) Here's the fun part; Loop points. Say
your song is 48 measures long, 4:4 time signature and you're using 120 ticks per quarter
note. You would need to insert event messages as followings.
Forgive the crude use of symbology :)
LOOP TRACK ONLY:
"*" is at 1:4:119, Event message 110 with a value of 0
"@" 47:4:119, 111 set to 0.
"#" 48:1:000, 1 set to 0
FOR ALL OTHER INSTRUMENT TRACKS:
"^" 1:4:119, Event message 1 with a value of 0
"&" 48:1:000, 1 set to 0
All midi events on Tracks 2.3 etc that occur between Track
1's event (*)110/0 and (#)1/0 will loop. Note that the alignment of messages need to
be precise for each respective track.
4) Drums always are assigned to Midi channel
10 (duh) :)
5) Voices are always prioritized to the
lower midi channels. So long sustained notes, or melodies that need to be assured to play
with full duration, need to be placed on the lower channels. Bass, etc (anything that
doesn't need to sustain as long) should be placed
higher.
6) Always beware of cluttering midi events.
Depending on your sequencer, you may be able to automate volume/pan etc. Try not to place
too many successive midi events within the song. This will put a higher tax on your cpu
and isn't necessary.
7) It's always a good idea to manually set
each patch with a proper event message. See (1) for best placement.