Well, I figured out a few things. Two requirements are very strict for native SCUMM (but not required by ScummVM):
- The iMuse SysEx f0 7d 00... is used to allocate channels (well documented in the ScummVM source), and is mandatory.
- While MIDI specs allow multiple parameter sets after a single event code, SCUMM requires the event code to be repeated before each parameter set.
Furthermore (also thanks to well documented ScummVM source):
- iMuse SysEx f0 7d 30... can be used for looping.
- The time division parameter seems to be ignored. Apparently, native SCUMM is hardcoded to always use 01 e0 for this, just like ScummVM does. Thus I had to modify the tempo to match this value.
I also tried to add General MIDI support, but my SoundCanvas doesn't receive any program change events. I guess, this is done with the MT-32 specific SysEx.
Originally Posted by jestar_jokin
If you extract a song from the game (e.g. 000_ROL.dmp), and strip out the non-MIDI data (the ROL header data) using e.g. a hex editor, then use your mid2rol tool, does the resulting file work in a native SCUMM exe?
It does, it produces a bit identical copy after all.
Btw, Scumm Revisited has a save .mid button, which automatically strips the ROL header. No need to hex edit it out.