EDIT: 14th November 2020 - An updated version of this post can be found here
GitHub: featherbear/presonus-studiolive-api/tree/e5b00cda55dd485223cf688c73b779a3d21843f4
I wanted to add functionality to the PreSonus StudioLive 16 Series III console. For example, to fade the level of a channel instead of instant (un)muting.
There is no MIDI interface for the console - so we would have to emulate the network messages sent from their UC Surface app.
Connection
The console listens on TCP 53000
KeepAlive packets are sent periodically every 1 second.
Packet
Each packet starts with 0x55 0x43 0x00 0x01
Followed by the length (short) (little-endian) of the payload
Followed by a message code (2 bytes)
Then some sort connection verification __ 0x00 __ 0x00
Message Codes
API Event Name | ASCII | Byte Code |
---|---|---|
KeepAlive | KA | 0x75 0x65 |
Hello | UM | 0x85 0x77 |
JSON | JM | 0x74 0x77 |
Setting | PV | 0x80 0x86 |
Settings2 | PL | 0x80 0x76 |
FileResource | FR | 0x70 0x82 |
FileResource2 | FD | 0x70 0x68 |
UNKNOWN_REPLY | BO | 0x66 0x79 |
CompressedUnknown | CK | 0x67 0x75 |
Metering
Metering data is transmitted via UDP from the console, to a port requested by the client.
The metering data looks something like this:
0-3 | 4-5 | 6-7 | 7-11 | 12-15 | 16-19 | 20… |
---|---|---|---|---|---|---|
head | length | code | conn | levl | ??? | data |
The length
bytes don’t seem to match up with the size of the payload.
And I don’t know that bytes 16-19
refer to