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?
Man I have no idea but I read your entire post and it seems like you need to pause that work for a day or two. Do something else, touch grass, then come back and I'm sure you'll have your answers.
Also sounds like one of those rare times when talking to a yellow duck would help. And splitting it all into smallest possible problems. Then solve one after another without thinking of the whole.
I did the "do something else", and I'm still stuck...๐