MIDI, sysex, LED, LCD screen questions

Hi to all!
I have found OSC few days ago and it is awesome! I work in Sequoia 15 and would like to build a template based on a MCU Pro controller profile. But I can’t wrap my head around some specific things. Just to be clear, I am in no case an expert coder (or even a beginner coder for that matter, just a lowly musician :slight_smile: So:
1.How can I turn a LED widget on with a number of arbitrary MIDI CC values (ex: 00, 15, 35, 67)? (This would be the equivalent of the LED rings of the rotary encoders on the hardware unit).
2.Could I somehow replicate the 55x2 character LCD display of the MCU? I’m guessing that it should first recieve the corresponding Sysex messages, somehow decoding them into separate ASCII characters and than sending them to multiple text widgets?
3.How could I get better in programming OSC specificaly, is there a crash course or some pdf for dummies like myself? Where does one start, without investing too much time in it?
And I would like to say, I really appreciate and admire the effort and camaraderie involved in this fine project.
All the best!

No one?..

Hi,

1.How can I turn a LED widget on with a number of arbitrary MIDI CC values (ex: 00, 15, 35, 67)? (This would be the equivalent of the LED rings of the rotary encoders on the hardware unit).

Do you need to replicate the led’s behavior precisely ? Otherwise just sending the values to a knob widget will update it’s gauge. Setting the knob’s dashed property to true might bring some led-ish style to it, too.

If you want to trigger specific actions depending on an incoming value, you can use a script widget or create a custom module. Either way, you’ll need to learn a bit about the javascript programming language. Here is a very simple example based on your question: create a script widget with

Now when the MIDI device sends CC16 messages to open stage control, the script will receive the value, we can trigger custom actions with the script property now:

if (value < 15) {
  // do something
} else if (value < 35) {
  // do something else
} // etc

2.Could I somehow replicate the 55x2 character LCD display of the MCU? I’m guessing that it should first recieve the corresponding Sysex messages, somehow decoding them into separate ASCII

Following the same logic, you could process the sysex message with a script widget (address would be /sysex and preArgs would be empty since there’s no channel information here). Make sure to enable sysex by adding the sysex keyword in the server’s midi configuration.

3.How could I get better in programming OSC specificaly, is there a crash course or some pdf for dummies like myself? Where does one start, without investing too much time in it?

There’s no crash course, examples are (very) slowly being added to the docs but the steep learning curve is definitely here.

Hi,
Jean-emmanuel, thank you very much for your time and effort to help me and everyone else. I tried to figure it out by trial and error, but I guess I’m still way out of that league, scripts and such. Looks like I would have to learn at least some basic JS programming.
Just for info, there are 4 operating modes (patterns) of the LED rings. It is explained in the Logic control hardware manual (it is the same unit as the MCU, basically). I think these modes are handled in the unit itself, not the DAW. The dashed lines on the pot I really like, but unfortunately the control must be an encoder, otherwise it doesn’t send properly. However, the LEDs I could live without. I would really like to be able to make the display though, which I don’t get it how to translate the bytes of the sysex message to the corresponding ascii characters and than assign??? them to the appropriate place holder in the text widget. But please, you don’t have to bother with this any more, sir. I am so much thankfull just for giving us this awesome thing, let alone personally helping everyone, and for free!? That’s something, man!
PS: my appologies for being a bit pushy for a reply :slight_smile: I was just excided. Again, thaks so much!

Here is a small proof-of-concept session containing a script that decodes the sysex message and display it in a text widget : mackielcd.json (2.7 KB)

I found a good description of the Mackie protocol, I’m considering implementing it in OSC someday, we’ll see…

Wow, man! Hat’s off to you, sir! That’s awesome. I will try it as soon as I can and report back to the forum.

Works like a charm! Of course, I just changed the target in the script widget to correspond to the virtual midi port on my pc. I even added the MCU XT for another 8 channel strips and managed to get it’s LCD display woking too. I tinkered a bit for this, allthough nothing fancy. First of all, I opened a secondary virtual midi port, as every controller instance should communicate on a separate midi port, even for basic functions, not just the display. Then I changed the script widget’s target accordingly.
Next I made a copy / paste: ID+1 of the script and text widgets. Than, in the new scipt widget I changed the last line:
// update text widget
set(“lcd”, locals.text.slice(0,56).join("") + “\n” + locals.text.slice(56).join(""))
so instead of “lcd” I wrote “lcd1”. This corresponds to the ID of the new text widget.
Last in the following line in the new script widget:
if (value.includes(“f0 00 00 66 14 12”))…
I changed the “14” with “15”, In order to correspond to the midi port that MCU XT normally uses.
I hope this makes sence, it came up a bit convoluted. I hope someone would find it usefull.
Jean-Emmanuel, thank you so much! I wish you great success with this great project!

Thanks for your feedback, I’ve made some progress with the MCU implementation, I’ll keep you posted.

Here it is : https://github.com/jean-emmanuel/open-stage-control-mcu

2 Likes

Mr. Jean-Emmanuel, you are incredible! I can’t believe you made the whole damn thing, while I was going a fader today, a knob tomorrow, feeling proud thinking that I make progress :smiley: That is just amaizing!
I tried it for a couple of hours and as far as I can tell everythig works flawlessly in Sequoia. I made a small adjustment though: I changed the default value of the faders from 0.782 to 0.806, in order to get unity gain at default value. Although Sequoia has a fader calibration feature for remote control devices, somehow I couldn’t get the result that way and the only way I got it right was to manually change the value of the “fader_0” widget. But maybe this is DAW specific… I suppose it is.
I am wondering though if this module could be expanded, without additional modifying the custom module? For example, is it possible to put all this in one tab, and in another tab make something completly different? Something like macros, shortcuts… simpler stuff? I would suppose that in order not to mass with the functionality of the custom module, this traffic would have to go through another midi port…? Anyway, I’m thinking out loud and overstaying my welcome :zipper_mouth_face:
I bow to you once more, Sir!

You’re right, MCU support seems to differ from one DAW to another, I’m glad it works for you since I couldn’t test every button with my DAW. The custom module should only convert mcu-related message (I made sure of that in a recent change), you can use the same midi port as long as you avoid the mcu-related slots:

  • notes on channel 1
  • control changes on channel 1
  • channel pressure on channel 1
  • pitchbend on channels 1-9
1 Like

I forgot to mention: the vu meters will only work with the next osc release.

Hi,
So, I finally had the time to test extensively, and I can confirm that (with a sole exception) everything works in Sequoia, although with some minor adjustments. Namely, a small number of controls does not match the expected midi IDs. I have been able to identify all of them and change the expected IDs in Sequoia to match the MCU’s. However, I think that the other way around is the right way to do it (but I couldn’t figure how to do it myself). So, the following was adjusted changed in Sequoia:
Parameter:********Original ID:*******Changed to:
Jog Wheel----------b0 3c 00-------------bf 3c 00
Cursor left-----------90 62 00------------90 64 00
Zoom-----------------90 64 00------------90 63 00
Cursor right---------90 63 00------------90 65 00
Scrub Switch-------90 65 00------------90 62 00

Also, the Latch and Touch IDs were interchanged (4e - 4d), but according to the Sequoia manual that is by design (although I can’t figure out why…?)
The only thing that I can’t seem to get to work are the vu meters. I updated OSC to 1.2, so I am guessing this is the release you refered to… Or maybe is there more to it?

Thanks, I’ve updated the module. If you want to invert the two automation buttons in the custom module edit these lines : https://github.com/jean-emmanuel/open-stage-control-mcu/blob/master/mcu.js#L64-L65

The vu meters are supposed to work yes, no mention of this in the manual ? You can set DEBUG to true in the module to print all processed and ignored messages, this may help finding out what’s happening.

1 Like

Hi,
Thanks for the updated module, everything works now out of the box, except for the vu meters, that I still struggle with.
The manual is a bit vague in explaining this, it says the following:

Control element: Home (corresponds to the “Solo” button in the module)
Function: Activate LCD meter by holding “F1”, “F2”, “F3”, or “F4”

Not really clear on what is meant. However, toggling the Solo button alone switches the midi output messages for the vu meters on/off, I can see that clearly in the midi out monitor in Sequoia and in the module as well (debug mode). So, Sequoia sends and OSC recieves the messages (I assume). Still, nothing happens in the module.
FYI, the messages are d0 xy 00, where x is the channel number in the module (0-7), and y is the vu meter level (0-c).
I have no idea what the F1-F4 buttons are for, maybe for changing metering modes?? The only thing they do is trigger all the signal LEDs on/off. It is possible that those are the key, and I may be too dumb to figure it out… But OCD aside, who needs the bloody meters anyway :smiley:

Function: Activate LCD meter by holding “F1”, “F2”, “F3”, or “F4”

I think this is for displaying meters with the lcd display; did you trying holding F1 for a few seconds ?

FYI, the messages are d0 xy 00, where x is the channel number in the module (0-7), and y is the vu meter level (0-c).

That's what is expected actually (d0 = channel pressure on channel 1). I think I found the cause : there is another message that tells whether the vu meters should be activated or not, I've updated the interface so that the vu meters are activated by default when this message is not sent.

Voila! The vu meters work first thing after the module is opened. The solo button now toggles between meters on/off. But now, when in “on” state, and I press any one function key (F1-F8), the meters shut off and there is no way to bring them back on, neither with the solo button, nor function keys.
However this is in no way a deal braker. The module is functional and usefull regardless, and I am so gratefull and happy to have it. Everything else works flawlessly, and I really did tested it all, at least the functionality in Sequoia.

Great ! The mackie protocol is not officially documented, this module is based on reverse-engineering (not my work) and may be improved with further community contributions :wink:

1 Like

Hi, just tried to set this up with reaper(MCU and MCU extended), how to extend this to 16 channels ?
The GUI is ready, but it seems i need to change the mcu.js file too, but how exactly ?

I think that is the cause for the feedback happening (NOTE_ON channel=1)

Thanks!

To be more precise, reaper sending constantly midi data when touching a fader on my touch monitor (for example) -> several value causes the fader to jump quickly up and down.

oliveros, you managed to set it up correctly with an mcu ext, maybe you can supply your modded script here and how you exactly set it up(although in reaper there seems to be the main problem). I am using loopmidi…

Thanks!