What. A. Mess.
A lot of comments, cliche’s, criticisms and chit-chat exists about the original DX7 Velocity limitations. I will address a few of those, mainly from the perspective of someone looking at the underlying code. It’s another level of fun for someone sitting or standing in front of one and playing it.
NOTE: This is only about the MIDI-OUT, I’m not commenting here about the internal sounds. That’s another matter, albeit related somewhat.
The curve. This is what the DX7 MIDI-OUT Note-On velocity curve is supposed to look like and it does. Almost. The X axis (horizontal) is the time it takes for the key travel and the Y axis (vertical) is the resulting MIDI Note-On velocity. So, to the left we see very quick key travel meaning high velocity. As you go to the right you see slower key travel and lower velocity. It looks like a piece-wise approximation of a curve but I have not figured out the math for the curve at this point.
First thing you notice is 32 points. That’s it. That’s the resolution of the DX7’s MIDI Note-On velocity. And that also includes 0 (zero) AKA Note-Off. What’s interesting as I look at the BIN files for the various versions (I don’t have them all) is that the OS code is buggered. The $7F value cannot be accessed by the code. Impossible. It’s a glaring bug. I think the highest the code will allow is something like $7B, but in order to achieve that you need a hammer almost. Another glaring bug – if you play a note really slowly the output is actually quite high. So as you play softer and softer the output is lower and lower, but at some point it’s too slow (too soft) and code blows out the end of the table and starts playing the OS code bytes beyond it. Try it. Remember this is the MIDI Out Velocity I’m talking about, not the native sound engine. I have not shown these “mistakes” in the graph above.
I can see this behaviour in firmware versions 1.7 and 1.8 of the Mark I DX7.
FWIW, I think the DX7S has a 64-byte table and the DX7II has a 128-byte table. I haven’t done a lot of work on those yet as I don’t have either keyboard.
I am planning on fixing this as much as I can in the expansions that I sell. Two of them, the DX7 4X EXP and DX7 8X EXP have a Velocity Offset setting that can add a value to the table value I’ve been discussing. This solves the other major issue and the one most people are familiar with, that it’s hard to get the upper values. As they say, “you can’t get much above 100”.
So, my target is to first fix the bugs, then revisit adjustments such as Velocity Offset or whatever, in order to help the player.