I have created a new MIDI format to overcome both the limitations of the current one and the unwillingness of the International MIDI Consortium to develop a MIDI 2.0 file format. So I made my own for my game engine. I even added some primitive scripting features.
But here comes the big problem: now I need to develop an editor. While I created a textual representation of it, which is a weird mix of assembly with Lua influences and essentially musical notes and rhythm as values, but eventually it should have a full GUI editor.
The format so far has the following kind of commands:
- Flow control commands
- MIDI emit commands which can be either:
- Note on and off commands
- Velocity change (aftertouch)
- Program change
- Control change
- Pitch bend
- A few other less important commands (SysEx, etc.)
- Commands for the scripting (Arithmetic commands on writable registers, compare and branch, etc.)
- The ever important
wait
command, on which the whole system depends, as it tells the sequencer how much clock cycles have to wait between two commands
I have to process these commands for two display widgets, one displays the notes in a piano roll format, one displays any other commands. However, thanks to the way things work, I usually cannot just process MIDI commands directly. For example, notes are defined by a note-on and note-off event (often with aftertouch), no duration. And then comes editing. And then comes to editing around various wait commands. And then comes to editing around various conditional jump commands.
I started to work on a system that converted and separated each command for display, but it's a bit time consuming, and adds extra complexity. But modifying it a bit and adding a "transpiler" to the two systems would make editing pretty easy to implement. I already added "macro"-like features to the textual representation of the format. Could this work?