Skip to content

Intelligent Audio for Automation systems

License

Notifications You must be signed in to change notification settings

nrkno/sofie-sisyfos-audio-controller

 
 

Repository files navigation

Sisyfos Audio Controller

Node CI

Audiomixer control build for intelligent automation.

You use the fader for the level, and PGM on/off for fade-in/out. TAKE NEXT crossfades from NEXT to PGM

It´s fast to see what faders are on-aie, and whether they are PGM level or Voiceover level

GUI with open channelstrip:

These are the functions on each channel:

These are the functions on the channelstrip:

(You open the channelstrip by clicking on the channel label) The features on the channelstrip depends on the Mixer Protocol.

Full Channelstrip:

(You open the channelstrip by clicking on the "Full Ch.Strip" in the normal channelstrip)

The Advanced channelstrip has all the features the seleced Mixer Protol supports. (Example: Midas M32)

If you need a MiniMonitorView for a client:

Run webpage with

localhost/?view=minimonitor

If you need a Microphone Tally View for a client:

Run webpage with

localhost/?view=mic-tally

Microphone Tally View

Routing of Faders to Channels

Routing of Faders to multiple channels or a single channel are possible. This way Sisyfos can control some or all channels on a mixer. And a single fader can be used for E.G. a 5.1 (on 6 mono faders)

Load/Save Routing

Routing setups can be stored in STORAGE. So it´s possible to have different Routings dependent of what setup the Audio mixer is using.

Run as Docker: (On linux)

docker pull tv2media/sisyfos-audio-controller:develop
docker volume create sisyfos-vol
sudo docker run --mount source=sisyfos-vol,target=/opt/sisyfos-audio-controller/storage --network="host" --restart always tv2media/sisyfos-audio-controller:develop

Run as Docker: (On windows)

docker pull tv2media/sisyfos-audio-controller:develop
docker volume create sisyfos-vol
docker run --mount source=sisyfos-vol,target=/opt/sisyfos-audio-controller/storage -p 1176:1176 -p 5255:5255 --restart always tv2media/sisyfos-audio-controller:develop

Install Local node host:

(Be aware that a server reload will quit server and you need an external source to restart)

git clone https://github.com/tv2media/sisyfos-audio-controller.git
cd sisyfos-audio-controller
yarn
yarn build
yarn start

Log levels:

When running Sisyfos you can define the log level by setting the environment variable LOG_LEVEL to one of the following log levels:

  • error (only errors)
  • warn (errors and warning)
  • info (standard info regarding connectiviy and data from Automation protocol etc. including errors and warnings)
  • debug (info level plus: data send and received from Audiomixer)
  • trace (debug level plus: data send and received from Automation protocol)

Serve client on a different path:

When running Sisyfos you can change the root path from the default of / to another value by setting the environment variable ROOT_PATH.

Open GUI in browser:

localhost:1176 (or whatever ip you use for Sisyfos Nodejs/Docker)

Important - To enable settings:

localhost:1176/?settings=1

To see the MiniMonitorView:

localhost:1176/?minimonitor=1

If you want to disable the VU meters:

localhost:1176/?vu=0

Settings:

Show PFL Controls:

As NEXT has been implemented, and PFL usually only work on on channel at a time, the PFL is only working correctly on 1:1 routed setups (And with the CasparCG protocol)

(Mixer presets are stored in MixerProtocolPresets.js)

Following preset name are possible:

  • CasparCG
    • use storage/default-casparcg.ccg as template and place you own file in storage folder.
    • base your casparcg.config by the casparcg.config file in the same folder
    • remember to activate OSC in the casparcg.config file to it points to Sisyfos
  • Midas Master
    • OSC protocol for Midas M32 and Behringer X32
    • Port 10023
    • Mixer preset loading (using .x32 files in storage folder)
    • Protocol supports:
      • Eq, Comp, Delay, Mix minus
  • Lawo Mc2
    • Ember Protocol
  • reaper
    • OSC protocol for control Reaper (reaper.fm)
  • Ardour Master
    • OSC protocol for Ardour (www.ardour.org)
    • Port 3819
    • The volume change in Ardour is on it´s channel faders.
    • Todo:
      • Meter calibration
  • SSL System T - Broadcast Mixer
    • SSL Automation Protocol for System T
    • Port 10001
    • Set Protocol Latency to around 120ms
  • Behringer xr master
    • OSC protocol for Behringer XR12,16,18
    • Port 10024
    • In this version the Behringer is slave of Producers-Audio-mixer, so faders on the behringer is turned down when channel is of.
  • DMXIS - Sisyfos control of DMX Lightcontroller
    • Default Port is 8000
    • Controls Fader On/Off with preset level from Sisyfos.
    • Easy implementation of state based lightcontrol from Automation.
    • the PROTOCOL DELAY setting should be raised to 50ms, as DMXIS is responding a little slowly.
  • midi
    • Generic MIDI - still preminilary
    • When using MIDI protocols, the PROTOCOL DELAY setting should be rised to at least 50ms
  • Yamaha QL1
    • Ip - MIDI based Protocol
    • Port 50000
    • Stable implementation of 2-ways Fader and Mute
  • Studer Vista 1-5-9 (untested)
    • mono, stereo, 51 channels fader level mute and Aux send from Sisyfos TO mixer
    • No 2 way support for now
  • Studer OnAir 3000 (untested)
    • channel 1 to 24 fader level from Sisyfos TO mixer
    • No 2 way support for now

Skaarhoj panels:

Skaarhoj in RAW panel mode is supported for rotary buttons including labels.

  • HWC#1-xx = fader level on Sisyfos
  • HWC#81-89 = enabled Monitor sends for Aux mix% on fader 1
  • HWC#91-99 = enabled Monitor sends for Aux mix% on fader 2
  • HWC#101-109 = enabled Monitor sends for Aux mix% on fader 3

The monitor sends are the same as those on the Channel Strip.

Automation Support:

It´s possible to control Sisyfos from an automationsystem, for it to act as middleware.

Set state:

To set the state send these OSC commands from you Automation to Sisyfos Port: 5255:

Set channel to PGM (optional: indiviaul fadetime):

(the integer defines: 0 - Off, 1 - Pgm On, 2 - Voice Over) (if second is missing it will take default fade value) /ch/1/mix/pgm - integer: { 0, 1 or 2 } - float { fadetime in ms }

Set channel to PST:

/ch/1/mix/pst - integer: { 0, 1 or 2 } (the integer defines: 0 - Off, 1 - Pgm On, 2 - Voice Over)

Mute channel:

/ch/1/mute - integer: { 0, 1 } (the integer defines: 0 - Mute off, 1 - Mute On)

Set channel faderlevel:

(the first defines the fader level) (if second is missing it will take default fade value) /ch/1/mix/faderlevel - float {between 0 and 1} - float { fadetime in ms }

Set channel label:

/ch/1/label - string {name of channel}

Set channel state:

/setchannel/{value1} set the channel state of all settings exposed to automation parsing a json, with this type:

export interface AutomationChannelAPI {
    faderLevel?: number
    pgmOn?: boolean
    voOn?: boolean
    pstOn?: boolean
    showChannel?: boolean
    muteOn?: boolean
    inputGain?: number
    inputSelector?: number
    label: string
}

Inject Command: (currently not implemented)

Pass a command directly from Automation to Audiomixer /inject

Crossfade between PGM and PST:

/take

Set snap 1-xx to PST:

/snap/1

Fade all channels to black (mute)

/fadetoblack

Clear all pst buttons

/clearpst

Hide or show channel strips on GUI:

/ch/{value1}/visible - integer { 0 or 1 }

Get state:

Get full state of all channels:

/state/full - returns a json string with an array of channels with:

export interface AutomationChannelAPI {
    faderLevel: number
    pgmOn: boolean
    voOn: boolean
    pstOn: boolean
    showChannel: boolean
    muteOn: boolean
    inputGain: number
    inputSelector: number
    label: string
}

Get all state of one fader:

/ch/1/state - returns a json in same format as the full state but only for the channel specified in the path

Get state channel PGM:

/ch/1/pgm/state - returns pgm state integer { 0 or 1 }

get state channel PST:

/ch/1/pst/state - returns pgm state integer { 0 or 1 }

Get state channel faderlevel:

/ch/1/faderlevel/state - float {between 0 and 1}

get state channel Mute:

/ch/1/mute/state - returns mute state integer { 0 or 1 }

get state InputGain:

/ch/1/inputgain/state - returns inputgain state float {between 0 and 1}

get state InputSelector:

/ch/1/inputselector/state - returns inputselector state integer { 0 or 1 }

Check connectivity

/ping/{value} In response to a ping, sisyfos will reply with /pong and the provided value OR 'offline' if Audiomixer is not connected

Localization:

Localization can be found in: /client/i18n.ts

If we end up with a huge amount of translations we move the translations to seperate files, but for now we keep it simple.

About

Intelligent Audio for Automation systems

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • TypeScript 93.2%
  • CSS 6.1%
  • Other 0.7%