Sorry Robert, I looked into the web midi code and my advice makes no sense! It's been a while since I worked on this code!
Websockets are the perfect approach for you, they are actually transformed directly into MIDI messages and parsed like any other MIDI source.
I will outline some parts of wvr_thames.ino that will come in handy for you to reference, but let me know if any of it is going over your head, some of the style I used for this code is not typical Arduino style programming.
line 285: wvr.setMidiHook() tells WVR to pass any incoming midi to a handler function, before acting on it. In this case the handler is midiHookKeyboard()
line 230: midiHookKeyboard gets a pointer to the midi data, and is allowed to modify it before returning.
line 206: the function sustain() checks what kind of a message it is, and may erase it if it is a NOTE_OFF. Using this approach you could check if the incoming midi is a particular note, and if so, turn on some LEDs, or whatever you like, and just return and leave the message untouched. If you prefer to have a separate message to control the lights, you could use a MIDI CC. midi_in.h defines the MIDI_CC vales that WVR currently recognizes, but you could use any other CC value, watch for it, and respond as you like.
All this assumes that you have a working knowledge of MIDI protocol. If you do not, it may take a minute to get your head around, it is a fairly old protocol, and a bit quirky, but there are lots of tutorials out there to help break it down. Accomplishing everything you want to do without using any MIDI is totally possible as well, there is wvr.play(uint8_t voice, uint8_t note, uint8_t velocity) and friends, that can do everything in a more direct fashion. It would not be hard to add some code to server.cpp, at line 85 the websocket data is present, and could be parsed and handled in any way that is convenient. There are the remnants of a JSON based rpc framework that I ended up abandoning there as well to inspire how it could look.
rgb.cpp exposes 2 functions rgb_init() and rgb_set_color(), but both are designed for one LED only. I have not experimented with more, but I'm sure the adafruit library has that included. If it is too slow, and if the i2s idea doesn't work, I could setup the RMT method, and expose that in the wvr class, I have all that code setup in another project and it works very well.
Here is how that looks.