Hacker News new | past | comments | ask | show | jobs | submit login

Here’s a non exhaustive list of what midi (and the standard midi file format) does poorly, off the top of my head:

- Control Change msgs are largely a wasteland of non supported features

- messages are not uniform size, so you can’t read a midi file backwards for instance

- the file format, usb format, uart format, and bluetooth format are all related but not fully compatible. Especially the file format which has meta messages that cannot be sent over bluetooth or uart, etc.

- sysex messages are not packetized in the original spec, needing delay to send large messages

- NRPN and RPN messages are another wasteland

- same with system real-time, song changes, bank changes, smpte, all needless complexity no one uses.

- the file format needs a chunk length written in the header, which is annoying to keep rewriting when recording continuously

- the file format needs an “end of track” msg that needs to be rewritten again and again when recording to disk

It’s fine for NoteOn and NoteOff. Most of the rest of it is pretty mediocre imo.




Here's some more:

- no way to play a unison without resorting to multiple channels - communication is one-way, so no standard way to query what CCs the synth actually supports - tuning table support wasn't part of the original spec (MTS exists but most synths don't implement it) - poly aftertouch exists but it's hard to actually use it effectively due to how it's implemented in keyboards and how the protocol is designed - 128 notes per channel isn't enough for some instruments without resorting to MPE - MPE addresses an important use case but breaks some MIDI abstractions (users have to know about "zones" instead of "channels") - it's possible to lose a "note-off" resulting in a stuck note - 31.25 kbps is slow by modern standards (USB is faster, but then you're stuck with short cables and the "what if neither or both devices are a USB host" problem)

On top of that, I think it's a bad sign that midi.org requires you to login to download the MIDI 1.0 spec. What are they trying to accomplish by making it harder than it needs to be to just read a 40-year-old specification?

I think it may be a good time for a new protocol that isn't based on the same fundamental abstractions as MIDI. Device compatibility isn't necessarily even that big a problem as long as cheap conversion devices to translate between protocols exist (though of course MIDI devices would be limited to what it's possible to express in MIDI).

Instead of note on / note off, I'm imagining a bidirectional protocol where the controller explicitly allocates voice circuits, explicitly tunes them to a particular pitch, and then either triggers envelope generators or takes manual control of the envelope.

For a physical layer I think CAN bus could be a pretty good option. It's meant for low-latency real-time tasks, it's supported by a lot of microcontrollers, the standard speed is 1mbps, and cable length can be very long at that speed (40 meters).


> Instead of note on / note off, I'm imagining a bidirectional protocol where the controller explicitly allocates voice circuits, explicitly tunes them to a particular pitch, and then either triggers envelope generators or takes manual control of the envelope.

Sounds way more complicated.

What makes midi great is how simple Note On and Note Off are.

At the end of the day, piano keyboards are just buttons. It’s no different than a qwerty keyboard. Getting the note data should be trivial.

The simplicity of the Note On Note Off api is the only reason midi still exists despite the rest of it.


> Sounds way more complicated.

Well, sort of. Consider though that a polyphonic synthesizer typically has to internally go to the trouble of allocating a free voice circuit, tuning it to some pitch, and triggering the envelope. What I'm suggesting is making that more explicit in the protocol. In some ways it's simpler because it's closer to how the synthesizer actually works.

> What makes midi great is how simple Note On and Note Off are.

It is nice that you can get a working MIDI controller or synth up and running with very little effort, but if a thing is too simple then it misses a bunch of nuance and becomes an impediment to more sophisticated use cases.

> At the end of the day, piano keyboards are just buttons. It’s no different than a qwerty keyboard. Getting the note data should be trivial.

Technically, that's not true. Most MIDI controllers use a double switch mechanism, where the time elapsed between activating the first and second switch tells you have fast the key was pressed. That gets sent as velocity in the NOTE-ON message.

Sending high-resulotion pitch data should be fairly trivial as well, it's just that we don't have a standard widely-supported way to do it. (MPE seems to be the current best option.)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: