synthmata / synthmata.github.io

GNU General Public License v3.0
30 stars 13 forks source link

Load voice data from MIDI sysex, if compatible message is received. #4

Closed dronus closed 4 years ago

dronus commented 4 years ago

This adds loading SYSEX over MIDI, closing the loop to use Synthmata as a DX7 programmer. When sysex information is enabled on the DX7 (must be done after every power on), synthmata will now receive the Patch data on any patch change, eg. selecting the patch on the DX7. This way patches could be edited in the DX7 using synthmata without exporting them before and the result directly stored on the DX7 as usual. Synthmata then only acts like a controller board for all parameters, replacing the extremely costly hardware devices providing hundreds of physical knobs.

synthmata commented 4 years ago

Thank you for this. I'll check that this doesn't cause any issues with the Volca FM (it shouldn't, but the Volca can be weird about sysex), and if there's nothing weird happening I'll accept the pull.

dronus commented 4 years ago

There should be no issues as the application is just listening for compatible sysex messages. So on the Volca itself, nothing is expect to happen with this patch. If the Volca can be enabled to send sysex on editing, like a DX7 can do, it may expose bugs in the impementation, but only by receiving wrong data on the web application.

So there are no serious problems to expect except if the Volca is always transmitting Sysex (without the need to enable it) and the data format is differing that much that the application in turn trashes the patch.

synthmata commented 4 years ago

When the DX7 sends its sysex on patch change, does it mark the channel number in the 3rd byte (4 least significant bits), and is it the same as specified on the midi out setting on the DX7?

I'm just trying to work out if listening for patches on every channel and interface is appropriate, or whether it would be better to have a midi interface/channel selector drop-down to make it more specific. It's an edge case I know, but if you had multiple DX7s, or a TX816, it could be problematic...

dronus commented 4 years ago

Good idea, I will check this out and add a channel check to the receiving function, if so.

dronus commented 4 years ago

I've implemented this, and it does not work as expected for the original Yamaha DX7, which always transmits the channel number 1. The setting on this synthesizer only affects it's MIDI input it seems.

It does however work as expected for the Dexed plugin.

I guess it will work as expected for other modern devices or plugins. Maybe you can check the Volca in this respect.

So I would say we keep this change. It also corrects the "substatus" validation, which rejected sysex for every other channel by fault due to missing parenthesis.

synthmata commented 4 years ago

The Volca requires the use of channel 1 as well, so I'll probably just add a note in the GUI about using channel 1 on a Mk1 DX7. I think that'll be OK, right?

dronus commented 4 years ago

Just added a hint to the UI.

synthmata commented 4 years ago

OK, cool, I've merged this, so it's live on the github.io version. I'll wait until some of these other pulls are resolved until I push everything to the .com page.