djipco / webmidi

Tame the Web MIDI API. Send and receive MIDI messages with ease. Control instruments with user-friendly functions (playNote, sendPitchBend, etc.). React to MIDI input with simple event listeners (noteon, pitchbend, controlchange, etc.).
Apache License 2.0
1.54k stars 116 forks source link

Mackie or HUI not implemented #363

Closed batata004 closed 1 year ago

batata004 commented 1 year ago

Hi, this library is awesome but is there a way I can use Mackie or HUI with it? It's an important feature to allow syncronizing the state of faders/knobs on the DAW and on the keyboard. With HUI it would be pretty easy to make the DAW discover all the faders/knobs values at startup without the user having to move each and everyone of the knobs/faders a little bit so the DAW gets the correct initial value.

djipco commented 1 year ago

HUI (Human User Interface Protocol) and MCU (Mackie Control Universal) are not implemented by the library and there are no plans for them to be. In fact, to keep WEBMIDI.js lean, it would probably be best if they were implemented as separate add-on libraries. If someone was willing to take on this task, I would happily help them out as best as I can. However, given the proprietary nature of HUI and MCU, I'm suspecting equivalent facilities will be developed using MIDI 2.0 in the future.

batata004 commented 1 year ago

@djipco Thanks for clearing this out! I am willing to do a separate add-on/plugin to this but I cant find absolutely no information online on how to do the basics of HUI using JS. I have an Arturia MIDI keyboard which is great and supports HUI, but I have no idea where to start (I know programming very well, but I cant find any useful information on how to start reading HUI since it looks like it uses a completely different protocol and I dont know if Javascript allows reading that). Could you please provide some information, if you are aware of it?

I think it wouldnt be necessary to implement all HUI features, I think the only and most useful one is syncing the initial state of all faders/knobs of the MIDI controller to the Javascript side. This is actually the only thing I really see useful from HUI and I am pretty sure 99% of people would use it because it's a necessary thing every time you turn on your midi controller.

djipco commented 1 year ago

I know next to nothing about how HUI is implemented. My guess is that it uses MIDI system exclusive (a.k.a. sysex) commands to do its bidding. HUI is a proprietary protocol and thus is not publicly documented.

You can start by looking on GitHub for examples. I know there is such a Python library called PythonMcu which might be a good place to start.

batata004 commented 1 year ago

@djipco thank you!!!

takyano commented 1 year ago

there might be some info for you on this Reaper forum post:

https://forum.cockos.com/showthread.php?t=101328