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?
By creating your own format, you now have to create your entire ecosystem, or add functionality to existing systems to deal with your format. That is a huge undertaking and why media consortiums exist for stuff like JPEG, MP3, MP4, etc etc.
I don’t know the music ecosystem at all, so I don’t know what open source programs you could modify to support your format, but realistically that could easily be a year+ project.
If you’re having fun, keep going, but it’s a big challenge