Unofficial documentation for Yamaha's mixer control protocol with an emphasis on the TF Series of mixers. The concepts in this documentation do apply to some of Yamaha's other mixers (notably the QL, CL, Rivage, and DM3 series), but since I only have access to a TF console, that's what this documentation is most relevant to.
Note: This is a big work in progress. If you want to help out, feel free to open up a Discussion, Issue, or Pull Request.
- Python Script Template - Simple Python scripts and PDFs that are light on details
- MTX3, MTX5-D, MRX7-D, XMV Series, EXi8, EXo8 RCP Spec V4.0.0 - Yamaha docs on the protocol for their multi-zone commercial mixing system (thanks @morydd)
- RIVAGE PM Series OSC Specifications V1.0.2 - Documentation for using Open Sound Control (OSC) on Rivage PM consoles (thanks @snurrgnu)
- DM3 Series OSC Specifications V1.0.0 - Documentation for using Open Sound Control (OSC) on DM3 consoles (thanks @hansSchall)
Yamaha uses a simple TCP connection to transfer all of the data between the client and the mixer.
The data is split into messages that are delimited by a newline character (\n
).
Each message starts with one of the following command keywords:
Client to Mixer:
get
- Request a value from the mixerset
- Set a value on the mixerssrecall_ex
- Recall a scene to the mixer
Mixer to Client:
OK
- Indicates that the client's request was acceptedOKm
- The difference between this keyword andOK
is likely to be an indication of a modified value, but this has not yet been confirmedNOTIFY
- Unsolicited message from the mixer indicating a change was made outside of the current connectionERROR
- Indicates an error with the client's request
- Strings
- Represented by a variable length of characters surrounded by quotation marks (
"
)
- Represented by a variable length of characters surrounded by quotation marks (
- Decibels
- Represented by an integer where the dB value has been multiplied by 100 (
10 dB
->1000
) - Max Fader Value: 1000
- Min Fader Value: -13800
- Negative Infinity Value: -32768
- Represented by an integer where the dB value has been multiplied by 100 (
- Booleans
- Represented by either a
0
or1
,0
for false and1
for true
- Represented by either a
Getting and setting simple values uses essentially the same syntax.
The only difference is really that a get
command doesn't contain a value on the end while set
does.
Here's some basic examples:
-
Channel 1 Fader Values:
get MIXER:Current/InCh/Fader/Level 0 0
set MIXER:Current/InCh/Fader/Level 0 0 1000
-
Channel 16 Fader Label:
get MIXER:Current/InCh/Fader/Name 15 0
set MIXER:Current/InCh/Fader/Name 15 0 "My Label"
- Yamaha - For making a great mixer. Not for properly documenting it's API.
- bitfocus/companion-module-yamaha-rcp - For compiling a list of commands available