Link and Share
The SOUND4 Link&Share (L&S) is a simple and open protocol that allow users to remotely control SOUND4 processors through a network connection.
SOUND4 offers a tool that manage sending L&S commands to your processors: the Link&Share Transmitter; but you can easily write your own tools in you preferred programming language (C,C#, VB, Java, PHP, ...).
The protocol is based on a standard telnet layer, so it can be joined by simply opening a TCP socket.
The Sound4Server opens TCP ports 3003 by default to access L&S.
Warning: the commands listed here may change depending on the product, its version, and the authorized login access level. To have a list of what you can do, either download the XML documentation from SOUND4 Remote Control in About->Download L&S Doc, or connect with a telnet client, login and type help.
See also: Link and Share HDFM Examples, Link and Share Transmitter, Link&Share Panel
Introduction
Security Concerns
Telnet protocol is not secured but has been chosen for ease-of-use. There are many ways to get a secured connection, for example:
- Use a VPN (Virtual Private Network), and allow only connections from this VPN.
- Use SSH, with port forwarding technique, and allow only local connections.
Session example
When connexion is established the server sends a prompt message:
READY
It is now possible to type commands. First you have to login:
LOGIN admin,admin
The server will confirm that you are logged :
OK
You may then change, for example, the Backup mode Main Source:
BK.SRC[1]=Analog
The server will confirm that the command was executed :
OK
You may also request the second Backup Source:
BK.SRC[2]?
And the server will reply for example:
Digital
Tools
You can use Link&Share Transmitter to create and execute scripts.
You can use SOUND4 L&S Panel to create a panel which uses L&S.
Protocol
The protocol was designed to be easily and directly used by human user, via Telnet, or to be used by a program.
- Commands and Replies are always on individual lines.
- Commands are executed sequentially, and Replies are returned in the same Command order.
- Commands are not case sensitive : you may type
LOGIN
orLogIn
.
The server has a built-in online help, called with HELP
command. The Help page will be uncomplete when the user is not logged in, because Help page depends on the Process type.
You may request for more help on a particular topic, for example HELP IN
to request help on Source setup, or HELP BK.SRC
to get help on BK.SRC
function.
The Server will accept simplified commands when there is no ambiguity. For example:
Bk.Src[Main]=Ana
is equivalent to
Bk.Src[Main Source]=Analog
because there is only one possible value for the index and for the source name.
Remark: special chars (non-ANSI) must be coded with UTF8 standard.
Server Replies
First char of a line gives an information on the type of reply:
- A line starting with
*
means that the command failed. Rest of line gives more details - A line starting with
+
gives extra information. It continues the reply that can be split on several lines. - A line starting with
!
is an asynchronous notification, with no relation to last command. In this case the line contains the notification identifier followed by an operator (=
,+=
,-=
,...) and a value. - A line starting with
?
is a Server Request : the server is asking a question and is waiting for an answer. This case is rare, and happens for example forLOGIN
command when many Sound Processors are present and the target is unknown. - A line starting with another char is a direct reply to a command. The line usually starts with
OK
when it was a simple command. It may also be a value for a request command.
When connection is established the server sends a welcoming message followed by READY
.
It is common to send all commands at a time, after connection is established, and to close the connection without waiting for replies. The server will stack the commands and execute them in right order. If the connection is not closed, the replies will arrive in the same order after READY
.
Operators
Commands are in general made of the command name followed by an operator, except for basic commands.
?
operator
Request a variable value. The Server will simply reply with the value.
Example:
RDS.PS?
=
operator
Affectation of a value to a variable.
Example:
RDS.PS=Top Radio
+=
operator
Add a value to a variable. Only supported by a reduced command subset.
Example:
RDS.AF+=107.7
-=
operator
Remove a value to a variable. Only supported by a reduced command subset.
Exemple:
RDS.AF+=107.7
!
operator
This requests an asynchronous notification on a variable's value change. VUmeter type variables usually don't support this because they change too fast and may saturate TCP link.
Example:
PRESET.ONAIR!
The server will reply OK if command request was successful, and will then send asynchronously a line starting with ! every time the value change. Example: Asynchronous Server reply
!PRESET.ONAIR=My new preset
*
operator
Request to stop receiving asynchronous notifications
Example:
PRESET.ONAIR*
'
operator
Request the setting range of a variable.
Example:
BK.SRC'
Variable format
Variables may have many dimensions and/or many channels. For example, the variable for Backup Sources (BK.SRC)
contains 4 values.
Multidimensional variables are arrays. To reach an particular value, use [] signs around the index number, or use : sign separator between values across dimensions. First dimension is always numbered from 1 (and not from 0). It is sometimes possible to use names instead of numbers: see help on the considered variable for more details.
Example: Request the value of the second Backup Source
Bk.Src[2]?
Example: Direct affectation of the 4 values
Bk.Src=Analog:Digital:PCI:IP
For variables with many channels (left/right for example), the operator is () and separator is ; Example: Request the peak value of the 1 st analog output
Out.Ana_PkHold(1)?
Example: Same, but using the channel short name
Out.Ana_PkHold(L)?
Example: Request the peak value of the 1 st analog output
Out.Ana_PkHold?
Will return for example
-0.3;-0.1
Main commands
LOGIN
Used to log on Sound Processor. This command is required before server accept any other command.
If many Sound Processors are present on a single computer, you have to choose which target will be accessed by giving either the Processor Serial Number (preferred method), or the Processor name.
Syntax:
LOGIN user,password
LOGIN target,user,password
Users and passwords are the same as the one used and defined in the Sound4 Remote Control.
LOGOUT, EXIT, QUIT
Close the session and quits.
Remark: this command is not mandatory, as the connexion automatically closes when the TCP socket is closed.
HELP
Gives a detailed help on possible commands and variables.
To get more details, add a command or a group name.
Syntax: General help, lists the groups
HELP
Syntax: Help on commands for a particular group
HELP group
Syntax: Detailed help on particular command
HELP command
VER?
Returns the Sound4Server version.
Products specific documentations
For HD/FM product, see Link_and_Share_HDFM_Examples