

Basically by transpiling, I’m converting commands to a format with absolute time position rather than the current relative one, so I don’t have to deal too much with the relative wait
commands, seeking would be easier to implement rather than one using relative positions, and I wouldn’t really have the issue with inserting extra commands when relative jump commands exist. As I said, the textual format already have some macros that function in similar vein, such as the [0]: note 0 0x7FFF s.:a-5
macro, that automatically inserts noteon
and noteoff
commands at the appropriate places when processed, and also jump commands use labels similar to some unstructured programming stuff.
I think I’ll try to work on a game for a while, then peek into someone else’s code that had similar problems on how they actually did it.
As for the MIDI 1.0 limitations:
- More than 16 channel implementation is a bit tricky, and I really didn’t want the composer to rely on automatic polyphony handling real time (which would likely conflict with sound effects, etc.), nor wanted to deal with that too on top of everything else.
- Precision issues with Control Change commands, and I wanted most if not all things to be controlled via MIDI easily rather than aggressive preset swapping or SysEx commands. Some special functionality still uses SysEx, like global waveform changing in the FM synth, where you basically command to change one of the 128 possible waveforms to be changed to a custom parameter-generated one. The only thing that cannot be done from MIDI is specifying path for files, which is intentional since it would mess with real-time features.
- Adaptive soundtracks. To my knowledge, there’s not a whole lot of formats for this, let alone ones that are known to be open, and even then many don’t go much farther than maybe mixing a few extra tracks they can swap-in, mute, etc., while mine could manipulate instrument parameters, pitch, etc. Instead of going the route of downloading
easymp3playback.dll
andeasymp3playback.h
(originally I used sdl-audio), I went with my own audio solution, and since my engine already was custom tailored for “retro pixelart”, I doubled down in that direction, and went with a pretty lo-fi sampler and an FM synth so far.
That’s why you self-host!