featherbear / presonus-studiolive-api

Exploring the PreSonus network control protocol from a StudioLive Series III
https://featherbear.cc/presonus-studiolive-api/
46 stars 13 forks source link

Message type MB #45

Open jskeet opened 1 year ago

jskeet commented 1 year ago

In my experimentation, I've found that the MB message type is used when the mute button is pressed on the "main" output for a channel, when mutes are linked. (I personally use globally linked mutes, which is how I discovered this.)

I'm guessing MB might be "Mute Button"?

I haven't looked into the details of the body though, other than to note that two messages are sent each time.

featherbear commented 1 year ago

According to here https://github.com/featherbear/presonus-studiolive-api/issues/13#issuecomment-1060546079 MB internally stands for Meter8

Considering MS stands for Meter16 I would be inclined to believe that the B stands for byte (and hence S for short)

So MB is probably "Meter Byte"

That said, I haven't made any time to dissect the MB packets yet. I hopefully thought that I could ignore the MB packets them, but looks like it's necessary to keep track of the mute states when aux links are enabled

jskeet commented 1 year ago

It's really weird that they're using the term "meter" for faders and mutes. I'll try to make some more notes (and copy them here) about what happens when mute is toggled. Notes for the process:

Hopefully that should give us enough to work with...

jskeet commented 1 year ago

Okay, experiment complete. Under each setting, I muted/unmuted main channel1, then muted/unmuted aux1 channel2.

The UC side of things is quite simple:

Note that UC never sends the MB messages - although it does receive them.

From the subscribing client side, we see (only showing the muting; the unmuting is equivalent):

Unlinked

The client just sees the PV messages, both for main and aux.

Main Mutes Auxes

Mute main ch1:

(The data here is everything after the "C-bytes".)

Mute aux1 ch2: The client just sees the PV messages (e.g. Key=line/ch2/assign_aux1; Group=0; Value=0)

All aux mute link

Mute main ch1: PV, MB, MB (I believe the messages are basically as above)

Mute aux1 ch2: No MB, but a separate PV message for each aux (so line/ch2/assign_aux2, line/ch2/assign_aux3 etc)

Global mute link

Mute main ch1: PV, MB, MB

Mute aux1 ch2: No MB, but a separate PV message for each aux and line/ch2/mute and the FX outputs (e.g. line/ch2/assign_fx4)

Hope that's useful!