This article describes the SAS remote control interface in mAirList.
The SAS protocol, also known as RAS protocol or Diamond protocol, is a digital remote control protocol supported by various mixing consoles manufactured by Lawo, Studer and others. Depending on the exact model, TCP or the serial port is used for communication.
The SAS protocol is known to be supported by the following consoles:
Note: The Studer OnAir 500 does not support the SAS protocol!
If you plan to use a serial port connection, first open the standalone config app, go to Misc. → Serial Ports, and set the port parameters according to the documentation of your console. Most models should use 38400/8N1.
The actual configuration of the SAS interfaces is done on the Remote Control page of the standalone config app or Control Panel. Click Add, then add a new remote of either SAS (serial port) or SAS (TCP/IP).
On the Connection tab, either select the serial port (for serial connection), or enter the IP address or host, and the TCP port, usually 18512 (for TCP connection).
On the Players tab, you define the fader start binding between the mAirList players and the channels on the console:
For each player, enter the source name of the console channel that corresponds to the channel of the respective player. Leave the field empty to disable the binding.
When you check Automatic PFL switch, mAirList will start the player in PFL mode when you press the PFL key on the console, or switch the channel to PFL on the console when you start PFL in the player with the mouse (or any other remote control mechanism).
The option Use PAUSE/STOP will pause a player first when the fader is closed and no other player is active. Internally, it will use the remote control command PLAYER x-y PAUSE/STOP
instead of just PLAYER x-y STOP
.
On the Cartwall tab, enter the name of the source channel on your console that corresponds to the cartwall playback and PFL device.
The cartwall will then follow the status of the fader: Cartwall goes to ON mode when fader is turned on, and to PFL mode when the channel is set to PFL on the console.
This also works in the other direction: When you set the cartwall to ON with a mouse (or any other remote control), the fader will be turned on on your console.
On the Voice Tracking page, enter the names of the audio sources used for voice tracking:
The fader start for Player A and Player B will start/stop the respective player in the Voice Tracking dialog. The fader start for the Microphone channel will start and stop recording.
mAirList will also record the audio levels for Player A and Player B as you move the faders, and turn them into volume envelopes in the recorded mix.
The SAS protocol requires that you “assign” all sources that you plan to work with, in particular when working with actions or scripts (see below).
If you plan to perform operations any other sources than those assigned to a player or the cartwall, enter their names here.
On the GPI tab, you can assign remote control commands to any GPI (general purpose input) of your console, one for “GPI goes on” and one for “GPO goes off”:
The GPIs - or GPOs, from the point of view of the console - are typically labelled GPO.OAC in the configuration of your console.
On the Monitor tab you can see all SAS messages received by and sent to the console.
The Monitor is only available when you configure the remote control through the Control Panel (from within a running mAirList instance).
The SAS remote control offers a couple of actions that can e.g. be used from events, or as “Actions on start” or “Actions on stop” in the properties of any playlist item. You will find them in the SAS section of the Add menu in the action list editor.
Most of the actions are self-explaining. For those affecting a channel/source, you must enter the source name. If that channel/source is not assigned to any player or the cartwall, don't forget to register it on the Other Sources tab in the SAS configuration before using it in an action.
The SAS module provides a number of callback functions to be used in background scripts. The first one is a generic one that is called for any SAS packet received:
// Called when a command is received from an SAS remote procedure OnSASCommand(Remote: ISASRemote; Command: byte; Data: string); begin end;
The other functions are “high-level” functions that are called after decoding the particular packet:
// Called when an SAS GPI goes ON procedure OnSASGPIOn(Remote: ISASRemote; GPI: byte); begin end;
// Called when an SAS GPI goes OFF procedure OnSASGPIOff(Remote: ISASRemote; GPI: byte); begin end;
// Called when an SAS sources goes PFL ON procedure OnSASPFLOn(Remote: ISASRemote; SourceName: string); begin end;
// Called when an SAS sources goes PFL OFF procedure OnSASPFLOff(Remote: ISASRemote; SourceName: string); begin end;
To interact with the console over the SAS protocol, you must first get a reference to an ISASRemote
interface using the following function:
function SASRemote(iIndex: integer): ISASRemote;
Remotes are 0-based, so SASRemote(0)
will access the first SAS remote registered in the system.
The ISASRemote
interface provides a couple of methods used to send SAS packets to the console. The first method is used to send a raw command:
procedure SendCommand(iCommand: byte; iData: RawByteString);
Then there are a couple of high-level functions (they will use SendCommand
internally):
procedure SetFaderInputGain(iSourceName: string; iLevel: ShortInt); procedure SetFaderLevel(iSourceName: string; iLevel: ShortInt; iFadeTime: word); procedure SetPrelisten1On(iSourceName: string); procedure SetPrelisten1Off(iSourceName: string); procedure SetGPI(iNumber, iValue: byte); procedure SetFaderStart(iSourceName: string; iStatus: byte);
It is also possible to retrieve the fader status and fader level for a particular source. As this is an asynchronous operation, you must first use a “fetch” function, then wait for a bit (e.g. 100 milliseconds using sleep(100)
), and then retrieve the result via the “get” function:
procedure FetchFaderStatus(iSourceName: string); function GetFaderStatus(iSourceName: string): byte; procedure FetchFaderLevel(iSourceName: string); function GetFaderLevel(iSourceName: string): ShortInt;