From 5bedab54f657416370a21cdff8298a628f2a3bd2 Mon Sep 17 00:00:00 2001 From: olzzon Date: Thu, 4 Jun 2020 13:18:26 +0200 Subject: [PATCH] chore: cleanup old "client"-"master" mode --- client/components/RoutingStorage.tsx | 28 + client/index.tsx | 3 + client/utils/SocketClientHandlers.ts | 4 + server/MainThreadHandler.ts | 18 +- server/constants/MixerProtocolInterface.ts | 2 +- server/constants/SOCKET_IO_DISPATCHERS.ts | 3 + server/constants/mixerProtocols/DmxIs.ts | 157 +++-- server/constants/mixerProtocols/LawoMC2.ts | 200 +++--- .../constants/mixerProtocols/LawoRelayVrx4.ts | 200 +++--- server/constants/mixerProtocols/LawoRuby.ts | 200 +++--- server/constants/mixerProtocols/SSLsystemT.ts | 202 +++++-- .../mixerProtocols/StuderOnAirEmber.ts | 420 ++++++------- .../mixerProtocols/StuderVistaEmber.ts | 2 +- .../constants/mixerProtocols/ardourMaster.ts | 229 ++++--- .../mixerProtocols/behringerXrMaster.ts | 571 +++++++++++++----- .../mixerProtocols/casparCGMaster.ts | 331 +++++----- .../constants/mixerProtocols/genericMidi.ts | 157 +++-- .../constants/mixerProtocols/midasMaster.ts | 541 +++++++++++------ .../constants/mixerProtocols/reaperMaster.ts | 323 ++++++---- server/constants/mixerProtocols/yamahaQLCL.ts | 209 ++++--- server/utils/MixerConnection.ts | 5 + server/utils/SettingsStorage.ts | 14 + .../mixerConnections/MidiMixerConnection.ts | 5 +- 23 files changed, 2354 insertions(+), 1470 deletions(-) diff --git a/client/components/RoutingStorage.tsx b/client/components/RoutingStorage.tsx index 1fc92521..a55f119a 100644 --- a/client/components/RoutingStorage.tsx +++ b/client/components/RoutingStorage.tsx @@ -10,6 +10,8 @@ import { SOCKET_SAVE_SNAPSHOT, SOCKET_GET_CCG_LIST, SOCKET_SAVE_CCG_FILE, + SOCKET_GET_MIXER_PRESET_LIST, + SOCKET_LOAD_MIXER_PRESET, } from '../../server/constants/SOCKET_IO_DISPATCHERS' interface IStorageProps { @@ -64,6 +66,7 @@ class Storage extends React.PureComponent { } this.handleClose() } + loadCcgFile(event: any) { if (window.confirm('Are you sure you will load a CasparCG setup?')) { console.log('Setting default CasparCG file') @@ -75,6 +78,17 @@ class Storage extends React.PureComponent { this.handleClose() } + loadMixerPreset(event: any) { + if (window.confirm('Are you sure you will load a full Mixer setup?')) { + console.log('Loading Mixer preset') + window.socketIoClient.emit( + SOCKET_LOAD_MIXER_PRESET, + event.target.textContent + ) + } + this.handleClose() + } + ListSnapshotFiles() { window.socketIoClient.emit(SOCKET_GET_SNAPSHOT_LIST) const listItems = window.snapshotFileList.map( @@ -103,6 +117,20 @@ class Storage extends React.PureComponent { return
    {listItems}
} + ListPresetFiles() { + window.socketIoClient.emit(SOCKET_GET_MIXER_PRESET_LIST) + const listItems = window.mixerPresetList.map( + (file: string, index: number) => { + return ( +
  • + {file} +
  • + ) + } + ) + return
      {listItems}
    + } + render() { return (
    diff --git a/client/index.tsx b/client/index.tsx index e8d4f390..75813282 100644 --- a/client/index.tsx +++ b/client/index.tsx @@ -11,6 +11,7 @@ import indexReducer from '../server/reducers/indexReducer' import { SOCKET_GET_SNAPSHOT_LIST, SOCKET_GET_CCG_LIST, + SOCKET_GET_MIXER_PRESET_LIST, } from '../server/constants/SOCKET_IO_DISPATCHERS' import { I18nextProvider } from 'react-i18next' @@ -25,6 +26,7 @@ declare global { socketIoClient: any snapshotFileList: string[] ccgFileList: string[] + mixerPresetList: string[] } } @@ -36,6 +38,7 @@ window.storeRedux = storeRedux window.socketIoClient = io() window.socketIoClient.emit(SOCKET_GET_SNAPSHOT_LIST) window.socketIoClient.emit(SOCKET_GET_CCG_LIST) +window.socketIoClient.emit(SOCKET_GET_MIXER_PRESET_LIST) console.log('Setting up SocketIO connection') socketClientHandlers() diff --git a/client/utils/SocketClientHandlers.ts b/client/utils/SocketClientHandlers.ts index 44121894..6ad6c65a 100644 --- a/client/utils/SocketClientHandlers.ts +++ b/client/utils/SocketClientHandlers.ts @@ -23,6 +23,7 @@ import { SOCKET_SET_VU_REDUCTION, SOCKET_SET_MIXER_ONLINE, SOCKET_SET_ALL_VU, + SOCKET_RETURN_MIXER_PRESET_LIST, } from '../../server/constants/SOCKET_IO_DISPATCHERS' export const socketClientHandlers = () => { @@ -144,4 +145,7 @@ export const socketClientHandlers = () => { .on(SOCKET_RETURN_CCG_LIST, (payload: any) => { window.ccgFileList = payload }) + .on(SOCKET_RETURN_MIXER_PRESET_LIST, (payload: any) => { + window.mixerPresetList = payload + }) } diff --git a/server/MainThreadHandler.ts b/server/MainThreadHandler.ts index da6aacea..d169b089 100644 --- a/server/MainThreadHandler.ts +++ b/server/MainThreadHandler.ts @@ -15,6 +15,7 @@ import { getSnapShotList, getCcgSettingsList, setCcgDefault, + getMixerPresetList, } from './utils/SettingsStorage' import { SOCKET_TOGGLE_PGM, @@ -50,6 +51,9 @@ import { SOCKET_SAVE_CCG_FILE, SOCKET_SET_DELAY_TIME, SOCKET_SHOW_IN_MINI_MONITOR, + SOCKET_GET_MIXER_PRESET_LIST, + SOCKET_RETURN_MIXER_PRESET_LIST, + SOCKET_LOAD_MIXER_PRESET, } from './constants/SOCKET_IO_DISPATCHERS' import { TOGGLE_PGM, @@ -162,14 +166,26 @@ export class MainThreadHandlers { ) }) .on(SOCKET_GET_CCG_LIST, () => { - logger.info('Get snapshot list', {}) + logger.info('Get CCG settings list', {}) socketServer.emit(SOCKET_RETURN_CCG_LIST, getCcgSettingsList()) }) + .on(SOCKET_GET_MIXER_PRESET_LIST, () => { + logger.info('Get Preset list', {}) + socketServer.emit( + SOCKET_RETURN_MIXER_PRESET_LIST, + getMixerPresetList() + ) + }) .on(SOCKET_SAVE_CCG_FILE, (payload: any) => { logger.info('Set default CCG File :' + String(payload), {}) setCcgDefault(payload) this.updateFullClientStore() }) + .on(SOCKET_LOAD_MIXER_PRESET, (payload: any) => { + logger.info('Set default CCG File :' + String(payload), {}) + mixerGenericConnection.loadMixerPreset(payload) + this.updateFullClientStore() + }) .on(SOCKET_SAVE_SETTINGS, (payload: any) => { logger.info('Save settings :' + String(payload), {}) saveSettings(payload) diff --git a/server/constants/MixerProtocolInterface.ts b/server/constants/MixerProtocolInterface.ts index 12b964cc..2232082f 100644 --- a/server/constants/MixerProtocolInterface.ts +++ b/server/constants/MixerProtocolInterface.ts @@ -1,7 +1,7 @@ export interface IMixerProtocolGeneric { protocol: string label: string - mode: string + presetFileExtension: string FADE_DISPATCH_RESOLUTION: number fader: { min: number diff --git a/server/constants/SOCKET_IO_DISPATCHERS.ts b/server/constants/SOCKET_IO_DISPATCHERS.ts index 0769fca1..b4031bbb 100644 --- a/server/constants/SOCKET_IO_DISPATCHERS.ts +++ b/server/constants/SOCKET_IO_DISPATCHERS.ts @@ -33,6 +33,9 @@ export const SOCKET_GET_SNAPSHOT_LIST = 'getSnapshotList' export const SOCKET_RETURN_SNAPSHOT_LIST = 'returnSnapshotList' export const SOCKET_GET_CCG_LIST = 'getCcgList' export const SOCKET_RETURN_CCG_LIST = 'returnCcgList' +export const SOCKET_GET_MIXER_PRESET_LIST = 'getMixerPresetList' +export const SOCKET_RETURN_MIXER_PRESET_LIST = 'returnMixerPresetList' +export const SOCKET_LOAD_MIXER_PRESET = 'loadMixerPreset' export const SOCKET_LOAD_SNAPSHOT = 'loadSnapshot' export const SOCKET_SAVE_SNAPSHOT = 'saveSnapshot' export const SOCKET_SAVE_CCG_FILE = 'saveCcgFile' diff --git a/server/constants/mixerProtocols/DmxIs.ts b/server/constants/mixerProtocols/DmxIs.ts index 285b3382..7df39beb 100644 --- a/server/constants/mixerProtocols/DmxIs.ts +++ b/server/constants/mixerProtocols/DmxIs.ts @@ -1,64 +1,93 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const DMXIS: IMixerProtocol = { - protocol: 'OSC', - label: 'DMXIS Light Controller Protocol', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 0, //Bypass ping when pingTime is zero - initializeCommands: [emptyMixerMessage()], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#3f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/dmxis/ch/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_VU: [emptyMixerMessage()], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [emptyMixerMessage()], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/dmxis/ch/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [{ mixerMessage: '/dmxis/ch/name/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - }], - fader: { - min: 0, - max: 1, - zero: 0.75, - step: 0.01, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - }, -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const DMXIS: IMixerProtocol = { + protocol: 'OSC', + label: 'DMXIS Light Controller Protocol', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 0, //Bypass ping when pingTime is zero + initializeCommands: [emptyMixerMessage()], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#3f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/dmxis/ch/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU: [emptyMixerMessage()], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [emptyMixerMessage()], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/dmxis/ch/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '/dmxis/ch/name/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 1, + zero: 0.75, + step: 0.01, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/LawoMC2.ts b/server/constants/mixerProtocols/LawoMC2.ts index 9e23e8dc..8645c756 100644 --- a/server/constants/mixerProtocols/LawoMC2.ts +++ b/server/constants/mixerProtocols/LawoMC2.ts @@ -1,96 +1,104 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const LawoMC2: IMixerProtocol = { - protocol: 'EMBER', - label: 'Lawo MC2 - NOT IMPLEMENTED', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 0, //Bypass ping when pingTime is zero - initializeCommands: [emptyMixerMessage()], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: 'Ruby.Sources.${channel}.Fader.Motor dB Value', - value: 0, - type: 'real', - min: -191, - max: 9, - zero: 0 - }], - CHANNEL_VU: [emptyMixerMessage()], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [{ - mixerMessage: '', - value: 0, - type: 'real', - min: -200, - max: 20, - zero: 0 - - }], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: 'Ruby.Sources.${channel}.Fader.Motor dB Value', - value: 0, - type: 'real', - min: -191, - max: 9, - zero: 0 - - }], - CHANNEL_NAME: [{ - mixerMessage: '', - value: 0, - type: 'real', - min: -200, - max: 20, - zero: 0 - - }], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - } - }], - fader: { - min: 0, - max: 200, - zero: 1300, - step: 10, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - } -} - +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const LawoMC2: IMixerProtocol = { + protocol: 'EMBER', + label: 'Lawo MC2 - NOT IMPLEMENTED', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 0, //Bypass ping when pingTime is zero + initializeCommands: [emptyMixerMessage()], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'Ruby.Sources.${channel}.Fader.Motor dB Value', + value: 0, + type: 'real', + min: -191, + max: 9, + zero: 0, + }, + ], + CHANNEL_VU: [emptyMixerMessage()], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [ + { + mixerMessage: '', + value: 0, + type: 'real', + min: -200, + max: 20, + zero: 0, + }, + ], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'Ruby.Sources.${channel}.Fader.Motor dB Value', + value: 0, + type: 'real', + min: -191, + max: 9, + zero: 0, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '', + value: 0, + type: 'real', + min: -200, + max: 20, + zero: 0, + }, + ], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 200, + zero: 1300, + step: 10, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/LawoRelayVrx4.ts b/server/constants/mixerProtocols/LawoRelayVrx4.ts index 50e67330..af6b16a1 100644 --- a/server/constants/mixerProtocols/LawoRelayVrx4.ts +++ b/server/constants/mixerProtocols/LawoRelayVrx4.ts @@ -1,96 +1,104 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const LawoRelayVrx4: IMixerProtocol = { - protocol: 'EMBER', - label: 'Lawo Relay VRX4 - client', - mode: "master", - FADE_DISPATCH_RESOLUTION: 15, - leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 0, //Bypass ping when pingTime is zero - initializeCommands: [emptyMixerMessage()], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: 'R3LAYVRX4/Ex/GUI/FaderSlot_{channel}/FaderPosition', - value: 0, - type: 'real', - min: 0, - max: 100, - zero: 75 - }], - CHANNEL_VU: [emptyMixerMessage()], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [{ - mixerMessage: '', - value: 0, - type: 'real', - min: -200, - max: 20, - zero: 0 - - }], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: 'R3LAYVRX4/Ex/GUI/FaderSlot_{channel}/FaderPosition', - value: 0, - type: 'real', - min: 0, - max: 100, - zero: 0 - - }], - CHANNEL_NAME: [{ - mixerMessage: '', - value: 0, - type: 'real', - min: -200, - max: 20, - zero: 0 - - }], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - } - }], - fader: { - min: 0, - max: 200, - zero: 1300, - step: 10, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - } -} - +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const LawoRelayVrx4: IMixerProtocol = { + protocol: 'EMBER', + label: 'Lawo Relay VRX4 - client', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 15, + leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 0, //Bypass ping when pingTime is zero + initializeCommands: [emptyMixerMessage()], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'R3LAYVRX4/Ex/GUI/FaderSlot_{channel}/FaderPosition', + value: 0, + type: 'real', + min: 0, + max: 100, + zero: 75, + }, + ], + CHANNEL_VU: [emptyMixerMessage()], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [ + { + mixerMessage: '', + value: 0, + type: 'real', + min: -200, + max: 20, + zero: 0, + }, + ], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'R3LAYVRX4/Ex/GUI/FaderSlot_{channel}/FaderPosition', + value: 0, + type: 'real', + min: 0, + max: 100, + zero: 0, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '', + value: 0, + type: 'real', + min: -200, + max: 20, + zero: 0, + }, + ], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 200, + zero: 1300, + step: 10, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/LawoRuby.ts b/server/constants/mixerProtocols/LawoRuby.ts index 96a0b024..db7f319e 100644 --- a/server/constants/mixerProtocols/LawoRuby.ts +++ b/server/constants/mixerProtocols/LawoRuby.ts @@ -1,96 +1,104 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const LawoRuby: IMixerProtocol = { - protocol: 'EMBER', - label: 'Lawo Ruby', - mode: "master", - FADE_DISPATCH_RESOLUTION: 15, - leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 0, //Bypass ping when pingTime is zero - initializeCommands: [emptyMixerMessage()], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: 'Ruby.Sources.${channel}.Fader.Motor dB Value', - value: 0, - type: 'real', - min: -191, - max: 9, - zero: 0 - }], - CHANNEL_VU: [emptyMixerMessage()], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [{ - mixerMessage: '', - value: 0, - type: 'real', - min: -200, - max: 20, - zero: 0 - - }], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: 'Ruby.Sources.${channel}.Fader.Motor dB Value', - value: 0, - type: 'real', - min: -191, - max: 9, - zero: 0 - - }], - CHANNEL_NAME: [{ - mixerMessage: '', - value: 0, - type: 'real', - min: -200, - max: 20, - zero: 0 - - }], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - } - }], - fader: { - min: 0, - max: 200, - zero: 1300, - step: 10, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - } -} - +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const LawoRuby: IMixerProtocol = { + protocol: 'EMBER', + label: 'Lawo Ruby', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 15, + leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 0, //Bypass ping when pingTime is zero + initializeCommands: [emptyMixerMessage()], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'Ruby.Sources.${channel}.Fader.Motor dB Value', + value: 0, + type: 'real', + min: -191, + max: 9, + zero: 0, + }, + ], + CHANNEL_VU: [emptyMixerMessage()], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [ + { + mixerMessage: '', + value: 0, + type: 'real', + min: -200, + max: 20, + zero: 0, + }, + ], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'Ruby.Sources.${channel}.Fader.Motor dB Value', + value: 0, + type: 'real', + min: -191, + max: 9, + zero: 0, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '', + value: 0, + type: 'real', + min: -200, + max: 20, + zero: 0, + }, + ], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 200, + zero: 1300, + step: 10, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/SSLsystemT.ts b/server/constants/mixerProtocols/SSLsystemT.ts index cad99ac7..5abc3148 100644 --- a/server/constants/mixerProtocols/SSLsystemT.ts +++ b/server/constants/mixerProtocols/SSLsystemT.ts @@ -1,64 +1,138 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const SSLSystemT: IMixerProtocol = { - protocol: 'SSL', - label: 'SSL System T', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 5000, - initializeCommands: [{ mixerMessage: "f1 04 00 00 00 {channel}", value: 0, type: '', min: 0, max: 1, zero: 0.75}], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [emptyMixerMessage()], // Handled by SSLMixerconnection - CHANNEL_VU: [emptyMixerMessage()], // Not implemented in SSL Automation protocol yet - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [emptyMixerMessage()], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [{ mixerMessage: "f1 04 00 01 00 {channel}", value: 0, type: '', min: 0, max: 1, zero: 0.75}], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: "f1 06 00 80 00 {channel} {level}", value: 0, type: '', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [emptyMixerMessage()], - PFL_ON: [{ mixerMessage: "f1 05 00 80 05 {channel} 01", value: 0, type: '', min: 0, max: 1, zero: 0.75}], - PFL_OFF: [{ mixerMessage: "f1 05 00 80 05 {channel} 00", value: 0, type: '', min: 0, max: 1, zero: 0.75}], - NEXT_SEND: [{ mixerMessage: "f1 06 00 80 00 {channel} {level}", value: 0, type: '', min: 0, max: 1, zero: 0.75}], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [{ mixerMessage: "f1 05 00 80 01 {channel} 00", value: 0, type: '', min: 0, max: 1, zero: 0.75}], - CHANNEL_MUTE_OFF: [{ mixerMessage: "f1 05 00 80 01 {channel} 01", value: 0, type: '', min: 0, max: 1, zero: 0.75}] - }, - }], - fader: { - min: 0, - max: 1, - zero: 0.75, - step: 0.01, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - }, -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const SSLSystemT: IMixerProtocol = { + protocol: 'SSL', + label: 'SSL System T', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 5000, + initializeCommands: [ + { + mixerMessage: 'f1 04 00 00 00 {channel}', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [emptyMixerMessage()], // Handled by SSLMixerconnection + CHANNEL_VU: [emptyMixerMessage()], // Not implemented in SSL Automation protocol yet + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [emptyMixerMessage()], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [ + { + mixerMessage: 'f1 04 00 01 00 {channel}', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: 'f1 06 00 80 00 {channel} {level}', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [emptyMixerMessage()], + PFL_ON: [ + { + mixerMessage: 'f1 05 00 80 05 {channel} 01', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL_OFF: [ + { + mixerMessage: 'f1 05 00 80 05 {channel} 00', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + NEXT_SEND: [ + { + mixerMessage: 'f1 06 00 80 00 {channel} {level}', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [ + { + mixerMessage: 'f1 05 00 80 01 {channel} 00', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_MUTE_OFF: [ + { + mixerMessage: 'f1 05 00 80 01 {channel} 01', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + }, + }, + ], + fader: { + min: 0, + max: 1, + zero: 0.75, + step: 0.01, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/StuderOnAirEmber.ts b/server/constants/mixerProtocols/StuderOnAirEmber.ts index 0b49ed15..413fe881 100644 --- a/server/constants/mixerProtocols/StuderOnAirEmber.ts +++ b/server/constants/mixerProtocols/StuderOnAirEmber.ts @@ -1,205 +1,215 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const StuderOnAirMaster: IMixerProtocol = { - protocol: 'STUDER', - label: 'Studer OnAir 3000', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 0, //Bypass ping when pingTime is zero - initializeCommands: [emptyMixerMessage()], - channelTypes: [{ - channelTypeName: 'MONO', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: 'System/Mixer/Channels/Inp Mono/Inp Mono #{channel}/Functions/Fader/Value', - value: 0, - type: 'real', - min: 0, - max: 1000, - zero: 0 - }], - CHANNEL_VU: [emptyMixerMessage()], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [{ - mixerMessage: 'System/Mixer/Channels/Inp Mono/Inp Mono #{channel}/Functions/Channel Attribute/User Label', - value: 0, - type: 'real', - min: -90, - max: 10, - zero: 0 - }], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - // Ch 1: Max level : - // 7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a1 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 03 e8 00 00 00 00 - // Ch 2: Min level : - /* -C1: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a1 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C2: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a2 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C4: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a4 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C5: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a5 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C9: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a9 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C10: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 aa 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - -C15: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 af 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - -C16: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b0 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C17: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b1 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C23: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b7 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - - -C24: -7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b8 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 - -C31: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 1f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 1f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 ee 00 00 00 00 - -C32: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 20 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 - -C32: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 21 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 21 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 00 00 00 00 00 00 - -testtool: -0000 00 d8 61 3f 19 1c 00 d8 61 47 56 eb 08 00 45 00 -0010 00 50 66 c6 40 00 80 06 12 88 c0 a8 00 05 c0 a8 -0020 00 04 e9 13 1d b0 cb 35 a7 04 eb f8 11 6c 50 18 -0030 20 12 41 e8 00 00 7f 8f ff fe d9 5c 80 30 80 a4 -0040 19 31 17 a1 15 31 13 bf 20 10 31 0e a6 0c 31 0a -0050 e1 08 31 06 63 04 02 02 03 20 00 00 00 00 - -0000 00 d8 61 3f 19 1c 00 d8 61 47 56 eb 08 00 45 00 -0010 00 50 67 04 40 00 80 06 12 4a c0 a8 00 05 c0 a8 -0020 00 04 ea 5e 1d b0 01 3d 11 88 f9 2a 39 99 50 18 -0030 20 14 6b 29 00 00 7f 8f ff fe d9 5c 80 30 80 a4 -0040 19 31 17 a1 15 31 13 bf 20 10 31 0e a6 0c 31 0a -0050 e1 08 31 06 63 04 02 02 02 a8 00 00 00 00 - -sisyfos: -0000 00 d8 61 3f 19 1c 50 9f 27 8b 82 d0 08 00 45 00 -0010 00 50 00 00 40 00 37 06 b8 32 bc b0 0e 19 c0 a8 -0020 00 04 c1 2c 1d b0 07 cf 83 42 4b a4 bf a2 50 18 -0030 10 00 45 39 00 00 7f 8f ff fe d9 5c 80 30 80 a4 -0040 19 31 17 a1 15 31 13 bf 26 10 31 0e a6 0c 31 0a -0050 e1 08 31 06 63 04 02 02 00 f3 00 00 00 00 - - -CH47: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 2f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 - - -CH 48: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 30 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 - -CH 71: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 47 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 - -CH 72: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 48 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 - -CH 95: -7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 5f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 - -CH 96:7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 60 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 - -*/ - - - - toMixer: { - CHANNEL_OUT_GAIN: [{ - mixerMessage: '7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 {channel} 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 {level} 00 00 00 00', // '7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a2 14 31 12 {channel} 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 {level} 00 00 00 00', - value: 0, - type: 'real', - min: 0, - max: 1000, - zero: 750 - - }, - { - mixerMessage: '7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf {channel} 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 {level} 00 00 00 00', - value: 0, - type: 'real', - min: 0, - max: 1000, - zero: 750 - - }], - CHANNEL_NAME: [{ - mixerMessage: 'System/Mixer/Channels/Inp Mono/Inp Mono #{channel}/Functions/Channel Attribute/User Label', - value: 0, - type: 'real', - min: -90, - max: 10, - zero: 0 - }], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - }], - fader: { - min: 0, - max: 1000, - zero: 750, - step: 1, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - } -} - +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const StuderOnAirMaster: IMixerProtocol = { + protocol: 'STUDER', + label: 'Studer OnAir 3000', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 0, //Bypass ping when pingTime is zero + initializeCommands: [emptyMixerMessage()], + channelTypes: [ + { + channelTypeName: 'MONO', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'System/Mixer/Channels/Inp Mono/Inp Mono #{channel}/Functions/Fader/Value', + value: 0, + type: 'real', + min: 0, + max: 1000, + zero: 0, + }, + ], + CHANNEL_VU: [emptyMixerMessage()], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [ + { + mixerMessage: + 'System/Mixer/Channels/Inp Mono/Inp Mono #{channel}/Functions/Channel Attribute/User Label', + value: 0, + type: 'real', + min: -90, + max: 10, + zero: 0, + }, + ], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + // Ch 1: Max level : + // 7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a1 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 03 e8 00 00 00 00 + // Ch 2: Min level : + /* +C1: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a1 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C2: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a2 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C4: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a4 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C5: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a5 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C9: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 a9 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C10: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 aa 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + +C15: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 af 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + +C16: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b0 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C17: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b1 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C23: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b7 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + + +C24: +7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 b8 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 01 4a 00 00 00 00 + +C31: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 1f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 1f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 ee 00 00 00 00 + +C32: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 20 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 + +C32: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 21 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 21 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 00 00 00 00 00 00 + +testtool: +0000 00 d8 61 3f 19 1c 00 d8 61 47 56 eb 08 00 45 00 +0010 00 50 66 c6 40 00 80 06 12 88 c0 a8 00 05 c0 a8 +0020 00 04 e9 13 1d b0 cb 35 a7 04 eb f8 11 6c 50 18 +0030 20 12 41 e8 00 00 7f 8f ff fe d9 5c 80 30 80 a4 +0040 19 31 17 a1 15 31 13 bf 20 10 31 0e a6 0c 31 0a +0050 e1 08 31 06 63 04 02 02 03 20 00 00 00 00 + +0000 00 d8 61 3f 19 1c 00 d8 61 47 56 eb 08 00 45 00 +0010 00 50 67 04 40 00 80 06 12 4a c0 a8 00 05 c0 a8 +0020 00 04 ea 5e 1d b0 01 3d 11 88 f9 2a 39 99 50 18 +0030 20 14 6b 29 00 00 7f 8f ff fe d9 5c 80 30 80 a4 +0040 19 31 17 a1 15 31 13 bf 20 10 31 0e a6 0c 31 0a +0050 e1 08 31 06 63 04 02 02 02 a8 00 00 00 00 + +sisyfos: +0000 00 d8 61 3f 19 1c 50 9f 27 8b 82 d0 08 00 45 00 +0010 00 50 00 00 40 00 37 06 b8 32 bc b0 0e 19 c0 a8 +0020 00 04 c1 2c 1d b0 07 cf 83 42 4b a4 bf a2 50 18 +0030 10 00 45 39 00 00 7f 8f ff fe d9 5c 80 30 80 a4 +0040 19 31 17 a1 15 31 13 bf 26 10 31 0e a6 0c 31 0a +0050 e1 08 31 06 63 04 02 02 00 f3 00 00 00 00 + + +CH47: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 2f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 + + +CH 48: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 30 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 + +CH 71: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 47 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 + +CH 72: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 48 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 + +CH 95: +7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 5f 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 + +CH 96:7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf 60 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 02 12 00 00 00 00 + +*/ + + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + '7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a1 14 31 12 {channel} 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 {level} 00 00 00 00', // '7f 8f ff fe d9 5c 80 30 80 a4 18 31 16 a2 14 31 12 {channel} 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 {level} 00 00 00 00', + value: 0, + type: 'real', + min: 0, + max: 1000, + zero: 750, + }, + { + mixerMessage: + '7f 8f ff fe d9 5c 80 30 80 a4 19 31 17 a1 15 31 13 bf {channel} 10 31 0e a6 0c 31 0a e1 08 31 06 63 04 02 02 {level} 00 00 00 00', + value: 0, + type: 'real', + min: 0, + max: 1000, + zero: 750, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: + 'System/Mixer/Channels/Inp Mono/Inp Mono #{channel}/Functions/Channel Attribute/User Label', + value: 0, + type: 'real', + min: -90, + max: 10, + zero: 0, + }, + ], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 1000, + zero: 750, + step: 1, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/StuderVistaEmber.ts b/server/constants/mixerProtocols/StuderVistaEmber.ts index 9ae54ed4..6e779cdf 100644 --- a/server/constants/mixerProtocols/StuderVistaEmber.ts +++ b/server/constants/mixerProtocols/StuderVistaEmber.ts @@ -3,7 +3,7 @@ import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' export const StuderVistaMaster: IMixerProtocol = { protocol: 'VISTA', label: 'Studer Vista 1-5-9', - mode: 'master', + presetFileExtension: 'master', FADE_DISPATCH_RESOLUTION: 5, leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. pingCommand: [ diff --git a/server/constants/mixerProtocols/ardourMaster.ts b/server/constants/mixerProtocols/ardourMaster.ts index f680f363..304d46d3 100644 --- a/server/constants/mixerProtocols/ardourMaster.ts +++ b/server/constants/mixerProtocols/ardourMaster.ts @@ -1,91 +1,138 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const ArdourMaster: IMixerProtocol = { - protocol: 'OSC', - label: 'Ardour DAW - Master Mode', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, - pingCommand: [ - { - mixerMessage: "/strip/list", - value: 0, - type: "i", - min: 0, - max: 1, - zero: 0.75 - } - ], - pingResponseCommand: [ - { - mixerMessage: "/strip/list", - value: 0, - type: "i", - min: 0, - max: 1, - zero: 0.75 - } - ], - pingTime: 9500, - initializeCommands: [ - { - mixerMessage: "/set_surface/feedback", - value: "135", - type: "i", - min: 0, - max: 1, - zero: 0.75 - } - ], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/strip/fader/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_VU: [{ mixerMessage: '/strip/meter/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [{ mixerMessage: '/strip/name/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/strip/fader/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [{ mixerMessage: '/strip/name/{channel}', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - } - }], - fader: { - min: 0, - max: 1, - zero: 0.75, - step: 0.01, - }, - meter: { - min: 0, - max: 1, - zero: 0.85, - test: 0.75, - }, -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const ArdourMaster: IMixerProtocol = { + protocol: 'OSC', + label: 'Ardour DAW - Master Mode', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, + pingCommand: [ + { + mixerMessage: '/strip/list', + value: 0, + type: 'i', + min: 0, + max: 1, + zero: 0.75, + }, + ], + pingResponseCommand: [ + { + mixerMessage: '/strip/list', + value: 0, + type: 'i', + min: 0, + max: 1, + zero: 0.75, + }, + ], + pingTime: 9500, + initializeCommands: [ + { + mixerMessage: '/set_surface/feedback', + value: '135', + type: 'i', + min: 0, + max: 1, + zero: 0.75, + }, + ], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/strip/fader/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU: [ + { + mixerMessage: '/strip/meter/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [ + { + mixerMessage: '/strip/name/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/strip/fader/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '/strip/name/{channel}', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 1, + zero: 0.75, + step: 0.01, + }, + meter: { + min: 0, + max: 1, + zero: 0.85, + test: 0.75, + }, +} diff --git a/server/constants/mixerProtocols/behringerXrMaster.ts b/server/constants/mixerProtocols/behringerXrMaster.ts index 8a83c82a..14874139 100644 --- a/server/constants/mixerProtocols/behringerXrMaster.ts +++ b/server/constants/mixerProtocols/behringerXrMaster.ts @@ -1,164 +1,407 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const BehringerXrMaster: IMixerProtocol = { - protocol: 'OSC', - label: 'Behringer XR-series / Midas MR-series', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: true, - pingCommand: [ - { - mixerMessage: "/xremote", value: 0, - type: "f", min: 0, max: 1, zero: 0.75 - }, - { - mixerMessage: "/meters", value: "/meters/1", - type: "s", min: 0, max: 1, zero: 0.75 - }, - { - mixerMessage: "/meters", value: "/meters/6", - type: "s", min: 0, max: 1, zero: 0.75 - } - ], - pingResponseCommand: [ - { - mixerMessage: "/xremote", value: 0, - type: "f", min: 0, max: 1, zero: 0.75 - }, - ], - pingTime: 9500, - initializeCommands: [ - { - mixerMessage: '/ch/{channel}/mix/fader', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/config/name', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/mix/{argument}/level', - value: "", - type: "aux", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/dyn/thr', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/dyn/ratio', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/delay/time', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/1/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/2/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/3/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/4/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - ], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/ch/{channel}/mix/fader', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_VU: [{ mixerMessage: '/meters/1', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_VU_REDUCTION: [{ mixerMessage: '/meters/6', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [{ mixerMessage: '/ch/{channel}/config/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [{ mixerMessage: '/ch/{channel}/dyn/thr', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - RATIO: [{ mixerMessage: '/ch/{channel}/dyn/ratio', value: 0, type: 'f', min: 0, max: 11, zero: 0}], - DELAY_TIME: [{ mixerMessage: '/ch/{channel}/delay/time', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LOW: [{ mixerMessage: '/ch/{channel}/eq/1/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LO_MID: [{ mixerMessage: '/ch/{channel}/eq/2/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - MID: [{ mixerMessage: '/ch/{channel}/eq/3/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - HIGH: [{ mixerMessage: '/ch/{channel}/eq/4/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - AUX_LEVEL: [{mixerMessage: '/ch/{channel}/mix/{argument}/level', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - CHANNEL_MUTE_ON: [{ mixerMessage: '/ch/{channel}/mix/on', value: 0, type: 'i', min: 0, max: 1, zero: 0}], - // Only MUTE_ON is used as receiver - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer : { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/ch/{channel}/mix/fader', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [{ mixerMessage: '/ch/{channel}/config/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [{ mixerMessage: '/ch/{channel}/dyn/thr', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - RATIO: [{ mixerMessage: '/ch/{channel}/dyn/ratio', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - DELAY_TIME: [{ mixerMessage: '/ch/{channel}/delay/time', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LOW: [{ mixerMessage: '/ch/{channel}/eq/1/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LO_MID: [{ mixerMessage: '/ch/{channel}/eq/2/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - MID: [{ mixerMessage: '/ch/{channel}/eq/3/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - HIGH: [{ mixerMessage: '/ch/{channel}/eq/4/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - AUX_LEVEL: [{mixerMessage: '/ch/{channel}/mix/{argument}/level', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - CHANNEL_MUTE_ON: [{ mixerMessage: '/ch/{channel}/mix/on', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - CHANNEL_MUTE_OFF: [{ mixerMessage: '/ch/{channel}/mix/on', value: 1, type: 'f', min: 0, max: 1, zero: 0}] - }, - }], - fader: { - min: 0, - max: 1, - zero: 0.75, - step: 0.01, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - } -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const BehringerXrMaster: IMixerProtocol = { + protocol: 'OSC', + label: 'Behringer XR-series / Midas MR-series', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: true, + pingCommand: [ + { + mixerMessage: '/xremote', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/meters', + value: '/meters/1', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/meters', + value: '/meters/6', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + ], + pingResponseCommand: [ + { + mixerMessage: '/xremote', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + pingTime: 9500, + initializeCommands: [ + { + mixerMessage: '/ch/{channel}/mix/fader', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/config/name', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/mix/{argument}/level', + value: '', + type: 'aux', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/dyn/thr', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/dyn/ratio', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/delay/time', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/1/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/2/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/3/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/4/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + ], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/ch/{channel}/mix/fader', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU: [ + { + mixerMessage: '/meters/1', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU_REDUCTION: [ + { + mixerMessage: '/meters/6', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '/ch/{channel}/config/name', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [ + { + mixerMessage: '/ch/{channel}/dyn/thr', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + RATIO: [ + { + mixerMessage: '/ch/{channel}/dyn/ratio', + value: 0, + type: 'f', + min: 0, + max: 11, + zero: 0, + }, + ], + DELAY_TIME: [ + { + mixerMessage: '/ch/{channel}/delay/time', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LOW: [ + { + mixerMessage: '/ch/{channel}/eq/1/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LO_MID: [ + { + mixerMessage: '/ch/{channel}/eq/2/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + MID: [ + { + mixerMessage: '/ch/{channel}/eq/3/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + HIGH: [ + { + mixerMessage: '/ch/{channel}/eq/4/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + AUX_LEVEL: [ + { + mixerMessage: '/ch/{channel}/mix/{argument}/level', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + CHANNEL_MUTE_ON: [ + { + mixerMessage: '/ch/{channel}/mix/on', + value: 0, + type: 'i', + min: 0, + max: 1, + zero: 0, + }, + ], + // Only MUTE_ON is used as receiver + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/ch/{channel}/mix/fader', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '/ch/{channel}/config/name', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [ + { + mixerMessage: '/ch/{channel}/dyn/thr', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + RATIO: [ + { + mixerMessage: '/ch/{channel}/dyn/ratio', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + DELAY_TIME: [ + { + mixerMessage: '/ch/{channel}/delay/time', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LOW: [ + { + mixerMessage: '/ch/{channel}/eq/1/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LO_MID: [ + { + mixerMessage: '/ch/{channel}/eq/2/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + MID: [ + { + mixerMessage: '/ch/{channel}/eq/3/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + HIGH: [ + { + mixerMessage: '/ch/{channel}/eq/4/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + AUX_LEVEL: [ + { + mixerMessage: '/ch/{channel}/mix/{argument}/level', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + CHANNEL_MUTE_ON: [ + { + mixerMessage: '/ch/{channel}/mix/on', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + CHANNEL_MUTE_OFF: [ + { + mixerMessage: '/ch/{channel}/mix/on', + value: 1, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + }, + }, + ], + fader: { + min: 0, + max: 1, + zero: 0.75, + step: 0.01, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/casparCGMaster.ts b/server/constants/mixerProtocols/casparCGMaster.ts index 4c9bf554..ae78992d 100644 --- a/server/constants/mixerProtocols/casparCGMaster.ts +++ b/server/constants/mixerProtocols/casparCGMaster.ts @@ -1,181 +1,192 @@ -import { ICasparCGMixerGeometry, ICasparCGMixerGeometryFile, emptyMixerMessage } from '../MixerProtocolInterface'; +import { + ICasparCGMixerGeometry, + ICasparCGMixerGeometryFile, + emptyMixerMessage, +} from '../MixerProtocolInterface' // TODO: This is just template data to avoid error if not loading // default.caspar.ccg from storage folder // should be simplified when storage is tested on new installations. let geometry: ICasparCGMixerGeometryFile = { - "label": "Sofie CasparCG Example", - "fromMixer": { - "CHANNEL_VU": [ - ["/channel/1/stage/layer/51/audio/1/pFS", "/channel/1/stage/layer/51/audio/2/pFS"], - ["/channel/1/stage/layer/52/audio/1/pFS", "/channel/1/stage/layer/52/audio/2/pFS"], - ["/channel/1/stage/layer/53/audio/1/pFS", "/channel/1/stage/layer/53/audio/2/pFS"], - ["/channel/1/stage/layer/54/audio/1/pFS", "/channel/1/stage/layer/54/audio/2/pFS"], - ["/channel/1/stage/layer/55/audio/1/pFS", "/channel/1/stage/layer/55/audio/2/pFS"], - ["/channel/1/stage/layer/56/audio/1/pFS", "/channel/1/stage/layer/56/audio/2/pFS"] - ] - }, - "toMixer": { - "PFL_AUX_FADER_LEVEL": [ - [ - { "channel": 2, "layer": 51 } - ], - [ - { "channel": 2, "layer": 52 } - ], - [ - { "channel": 2, "layer": 53 } - ], - [ - { "channel": 2, "layer": 54 } - ], - [ - { "channel": 2, "layer": 55 } - ], - [ - { "channel": 2, "layer": 56 } - ] - ], - "NEXT_AUX_FADER_LEVEL": [ - [ - { "channel": 2, "layer": 51 } - ], - [ - { "channel": 2, "layer": 52 } - ], - [ - { "channel": 2, "layer": 53 } - ], - [ - { "channel": 2, "layer": 54 } - ], - [ - { "channel": 2, "layer": 55 } - ], - [ - { "channel": 2, "layer": 56 } - ] - ], - "PGM_CHANNEL_FADER_LEVEL": [ - [ - { "channel": 1, "layer": 51 }, - { "channel": 3, "layer": 51 } - ], - [ - { "channel": 1, "layer": 52 }, - { "channel": 3, "layer": 52 } - ], - [ - { "channel": 1, "layer": 53 }, - { "channel": 3, "layer": 53 } - ], - [ - { "channel": 1, "layer": 54 }, - { "channel": 3, "layer": 54 } - ], - [ - { "channel": 1, "layer": 55 }, - { "channel": 3, "layer": 55 } - ], - [ - { "channel": 1, "layer": 56 }, - { "channel": 3, "layer": 56 } - ] - ] - }, - "channelLabels": [ - "RM1", - "RM2", - "RM3", - "RM4", - "RM5", - "MP1" - ], - "sourceOptions": { - "sources": [ - { "channel": 2, "layer": 51, "producer": "", "file": "" }, - { "channel": 2, "layer": 52, "producer": "", "file": "" }, - { "channel": 2, "layer": 53, "producer": "", "file": "" }, - { "channel": 2, "layer": 54, "producer": "", "file": "" }, - { "channel": 2, "layer": 55, "producer": "", "file": "" }, - { "channel": 2, "layer": 56, "producer": "", "file": "" } - ], - "options": { - "CHANNEL_LAYOUT": { - "1L-2R": "8ch2", - "1L-1R": "4ch-dleft", - "2L-2R": "4ch-dright" - } - } - } + label: 'Sofie CasparCG Example', + fromMixer: { + CHANNEL_VU: [ + [ + '/channel/1/stage/layer/51/audio/1/pFS', + '/channel/1/stage/layer/51/audio/2/pFS', + ], + [ + '/channel/1/stage/layer/52/audio/1/pFS', + '/channel/1/stage/layer/52/audio/2/pFS', + ], + [ + '/channel/1/stage/layer/53/audio/1/pFS', + '/channel/1/stage/layer/53/audio/2/pFS', + ], + [ + '/channel/1/stage/layer/54/audio/1/pFS', + '/channel/1/stage/layer/54/audio/2/pFS', + ], + [ + '/channel/1/stage/layer/55/audio/1/pFS', + '/channel/1/stage/layer/55/audio/2/pFS', + ], + [ + '/channel/1/stage/layer/56/audio/1/pFS', + '/channel/1/stage/layer/56/audio/2/pFS', + ], + ], + }, + toMixer: { + PFL_AUX_FADER_LEVEL: [ + [{ channel: 2, layer: 51 }], + [{ channel: 2, layer: 52 }], + [{ channel: 2, layer: 53 }], + [{ channel: 2, layer: 54 }], + [{ channel: 2, layer: 55 }], + [{ channel: 2, layer: 56 }], + ], + NEXT_AUX_FADER_LEVEL: [ + [{ channel: 2, layer: 51 }], + [{ channel: 2, layer: 52 }], + [{ channel: 2, layer: 53 }], + [{ channel: 2, layer: 54 }], + [{ channel: 2, layer: 55 }], + [{ channel: 2, layer: 56 }], + ], + PGM_CHANNEL_FADER_LEVEL: [ + [ + { channel: 1, layer: 51 }, + { channel: 3, layer: 51 }, + ], + [ + { channel: 1, layer: 52 }, + { channel: 3, layer: 52 }, + ], + [ + { channel: 1, layer: 53 }, + { channel: 3, layer: 53 }, + ], + [ + { channel: 1, layer: 54 }, + { channel: 3, layer: 54 }, + ], + [ + { channel: 1, layer: 55 }, + { channel: 3, layer: 55 }, + ], + [ + { channel: 1, layer: 56 }, + { channel: 3, layer: 56 }, + ], + ], + }, + channelLabels: ['RM1', 'RM2', 'RM3', 'RM4', 'RM5', 'MP1'], + sourceOptions: { + sources: [ + { channel: 2, layer: 51, producer: '', file: '' }, + { channel: 2, layer: 52, producer: '', file: '' }, + { channel: 2, layer: 53, producer: '', file: '' }, + { channel: 2, layer: 54, producer: '', file: '' }, + { channel: 2, layer: 55, producer: '', file: '' }, + { channel: 2, layer: 56, producer: '', file: '' }, + ], + options: { + CHANNEL_LAYOUT: { + '1L-2R': '8ch2', + '1L-1R': '4ch-dleft', + '2L-2R': '4ch-dright', + }, + }, + }, } let CasparCGMasterObject: ICasparCGMixerGeometry = { - protocol: 'CasparCG', - label: `CasparCG Audio Mixer`, - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - studio: "studio0", - leadingZeros: false, - pingTime: 0, - fromMixer: geometry.fromMixer, - toMixer: geometry.toMixer, - channelLabels: geometry.channelLabels, - sourceOptions: geometry.sourceOptions, - fader: { - min: 0, - max: 1.5, - zero: 1, - step: 0.001, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - }, - //CHANNELTYES ARE NOT IMPLEMENTED. - //THIS IS JUST TO AVOID ERRORS AS - //channelTypes are moved to IMixerProtocolGeneric - channelTypes: [{ + protocol: 'CasparCG', + label: `CasparCG Audio Mixer`, + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + studio: 'studio0', + leadingZeros: false, + pingTime: 0, + fromMixer: geometry.fromMixer, + toMixer: geometry.toMixer, + channelLabels: geometry.channelLabels, + sourceOptions: geometry.sourceOptions, + fader: { + min: 0, + max: 1.5, + zero: 1, + step: 0.001, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, + //CHANNELTYES ARE NOT IMPLEMENTED. + //THIS IS JUST TO AVOID ERRORS AS + //channelTypes are moved to IMixerProtocolGeneric + channelTypes: [ + { channelTypeName: 'CH', channelTypeColor: '#2f2f2f', fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: 'none', value: 0, type: 'f', min: 0, max: 1.5, zero: 1}], - CHANNEL_VU: [emptyMixerMessage()], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_OUT_GAIN: [ + { + mixerMessage: 'none', + value: 0, + type: 'f', + min: 0, + max: 1.5, + zero: 1, + }, + ], + CHANNEL_VU: [emptyMixerMessage()], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], CHANNEL_NAME: [emptyMixerMessage()], PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], }, toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: 'none', value: 0, type: 'f', min: 0, max: 1.5, zero: 1}], + CHANNEL_OUT_GAIN: [ + { + mixerMessage: 'none', + value: 0, + type: 'f', + min: 0, + max: 1.5, + zero: 1, + }, + ], CHANNEL_NAME: [emptyMixerMessage()], PFL_ON: [emptyMixerMessage()], PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], }, - }] - } + }, + ], +} export const CasparCGMaster = CasparCGMasterObject diff --git a/server/constants/mixerProtocols/genericMidi.ts b/server/constants/mixerProtocols/genericMidi.ts index 7525135f..0f1dbda6 100644 --- a/server/constants/mixerProtocols/genericMidi.ts +++ b/server/constants/mixerProtocols/genericMidi.ts @@ -1,64 +1,93 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const GenericMidi: IMixerProtocol = { - protocol: 'MIDI', - label: 'Generic Midi', - mode: "client", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 0, - initializeCommands: [emptyMixerMessage()], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: "0", value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], //PgmChange 0 - ignores this command - CHANNEL_VU: [{ mixerMessage: "0", value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], //PgmChange 0 - ignores this command - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [emptyMixerMessage()], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: "38", value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [emptyMixerMessage()], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - }], - fader: { - min: 0, - max: 127, - zero: 100, - step: 1, - }, - meter: { - min: 0, - max: 127, - zero: 100, - test: 80, - }, -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const GenericMidi: IMixerProtocol = { + protocol: 'MIDI', + label: 'Generic Midi', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 0, + initializeCommands: [emptyMixerMessage()], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '0', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], //PgmChange 0 - ignores this command + CHANNEL_VU: [ + { + mixerMessage: '0', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], //PgmChange 0 - ignores this command + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [emptyMixerMessage()], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '38', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [emptyMixerMessage()], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 127, + zero: 100, + step: 1, + }, + meter: { + min: 0, + max: 127, + zero: 100, + test: 80, + }, +} diff --git a/server/constants/mixerProtocols/midasMaster.ts b/server/constants/mixerProtocols/midasMaster.ts index a6ccdb30..b9796cbe 100644 --- a/server/constants/mixerProtocols/midasMaster.ts +++ b/server/constants/mixerProtocols/midasMaster.ts @@ -1,169 +1,372 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const MidasMaster: IMixerProtocol = { - protocol: 'OSC', - label: 'Midas M32 / Behringer X32 Master Mode', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: true, - pingCommand: [ - { - mixerMessage: "/xremote", - value: 0, - type: "f", - min: 0, - max: 1, zero: 0.75 - }, - { - mixerMessage: "/meters", - value: "/meters/1", - type: "s", - min: 0, - max: 1, zero: 0.75 - } - ], - pingResponseCommand: [ - { - mixerMessage: "/xremote", - value: 0, - type: "f", - min: 0, - max: 1, zero: 0.75 - } - ], - pingTime: 9500, - initializeCommands: [ - { - mixerMessage: '/ch/{channel}/mix/fader', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/config/name', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/mix/{argument}/level', - value: "", - type: "aux", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/dyn/thr', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/dyn/ratio', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/delay/time', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/1/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/2/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/3/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - { - mixerMessage: '/ch/{channel}/eq/4/g', - value: "", - type: "s", - min: 0, - max: 1, - zero: 0.75 - }, - ], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/ch/{channel}/mix/fader', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_VU: [{ mixerMessage: '/meters/1', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [emptyMixerMessage()], //[{ mixerMessage: '/ch/{channel}/config/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [{ mixerMessage: '/ch/{channel}/dyn/thr', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - RATIO: [{ mixerMessage: '/ch/{channel}/dyn/ratio', value: 0, type: 'f', min: 0, max: 11, zero: 0}], - DELAY_TIME: [{ mixerMessage: '/ch/{channel}/delay/time', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LOW: [{ mixerMessage: '/ch/{channel}/eq/1/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LO_MID: [{ mixerMessage: '/ch/{channel}/eq/2/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - MID: [{ mixerMessage: '/ch/{channel}/eq/3/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - HIGH: [{ mixerMessage: '/ch/{channel}/eq/4/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - AUX_LEVEL: [{mixerMessage: '/ch/{channel}/mix/{argument}/level', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - CHANNEL_MUTE_ON: [{ mixerMessage: '/ch/{channel}/mix/on', value: 0, type: 'i', min: 0, max: 1, zero: 0}], - // Only MUTE_ON is used as receiver - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/ch/{channel}/mix/fader', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [emptyMixerMessage()], //[{ mixerMessage: '/ch/{channel}/config/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [{ mixerMessage: '/ch/{channel}/dyn/thr', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - RATIO: [{ mixerMessage: '/ch/{channel}/dyn/ratio', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - DELAY_TIME: [{ mixerMessage: '/ch/{channel}/delay/time', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LOW: [{ mixerMessage: '/ch/{channel}/eq/1/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - LO_MID: [{ mixerMessage: '/ch/{channel}/eq/2/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - MID: [{ mixerMessage: '/ch/{channel}/eq/3/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - HIGH: [{ mixerMessage: '/ch/{channel}/eq/4/g', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - AUX_LEVEL: [{mixerMessage: '/ch/{channel}/mix/{argument}/level', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - CHANNEL_MUTE_ON: [{ mixerMessage: '/ch/{channel}/mix/on', value: 0, type: 'f', min: 0, max: 1, zero: 0}], - CHANNEL_MUTE_OFF: [{ mixerMessage: '/ch/{channel}/mix/on', value: 1, type: 'f', min: 0, max: 1, zero: 0}] - }, - }], - fader: { - min: 0, - max: 1, - zero: 0.75, - step: 0.01, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - }, -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const MidasMaster: IMixerProtocol = { + protocol: 'OSC', + label: 'Midas M32 / Behringer X32 Master Mode', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: true, + pingCommand: [ + { + mixerMessage: '/xremote', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/meters', + value: '/meters/1', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + ], + pingResponseCommand: [ + { + mixerMessage: '/xremote', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + pingTime: 9500, + initializeCommands: [ + { + mixerMessage: '/ch/{channel}/mix/fader', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/config/name', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/mix/{argument}/level', + value: '', + type: 'aux', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/dyn/thr', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/dyn/ratio', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/delay/time', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/1/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/2/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/3/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/ch/{channel}/eq/4/g', + value: '', + type: 's', + min: 0, + max: 1, + zero: 0.75, + }, + ], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/ch/{channel}/mix/fader', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU: [ + { + mixerMessage: '/meters/1', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [emptyMixerMessage()], //[{ mixerMessage: '/ch/{channel}/config/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [ + { + mixerMessage: '/ch/{channel}/dyn/thr', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + RATIO: [ + { + mixerMessage: '/ch/{channel}/dyn/ratio', + value: 0, + type: 'f', + min: 0, + max: 11, + zero: 0, + }, + ], + DELAY_TIME: [ + { + mixerMessage: '/ch/{channel}/delay/time', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LOW: [ + { + mixerMessage: '/ch/{channel}/eq/1/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LO_MID: [ + { + mixerMessage: '/ch/{channel}/eq/2/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + MID: [ + { + mixerMessage: '/ch/{channel}/eq/3/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + HIGH: [ + { + mixerMessage: '/ch/{channel}/eq/4/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + AUX_LEVEL: [ + { + mixerMessage: '/ch/{channel}/mix/{argument}/level', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + CHANNEL_MUTE_ON: [ + { + mixerMessage: '/ch/{channel}/mix/on', + value: 0, + type: 'i', + min: 0, + max: 1, + zero: 0, + }, + ], + // Only MUTE_ON is used as receiver + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/ch/{channel}/mix/fader', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [emptyMixerMessage()], //[{ mixerMessage: '/ch/{channel}/config/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [ + { + mixerMessage: '/ch/{channel}/dyn/thr', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + RATIO: [ + { + mixerMessage: '/ch/{channel}/dyn/ratio', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + DELAY_TIME: [ + { + mixerMessage: '/ch/{channel}/delay/time', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LOW: [ + { + mixerMessage: '/ch/{channel}/eq/1/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + LO_MID: [ + { + mixerMessage: '/ch/{channel}/eq/2/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + MID: [ + { + mixerMessage: '/ch/{channel}/eq/3/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + HIGH: [ + { + mixerMessage: '/ch/{channel}/eq/4/g', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + AUX_LEVEL: [ + { + mixerMessage: '/ch/{channel}/mix/{argument}/level', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + CHANNEL_MUTE_ON: [ + { + mixerMessage: '/ch/{channel}/mix/on', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + CHANNEL_MUTE_OFF: [ + { + mixerMessage: '/ch/{channel}/mix/on', + value: 1, + type: 'f', + min: 0, + max: 1, + zero: 0, + }, + ], + }, + }, + ], + fader: { + min: 0, + max: 1, + zero: 0.75, + step: 0.01, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/reaperMaster.ts b/server/constants/mixerProtocols/reaperMaster.ts index 3ca32a07..beb9a51e 100644 --- a/server/constants/mixerProtocols/reaperMaster.ts +++ b/server/constants/mixerProtocols/reaperMaster.ts @@ -1,120 +1,203 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const ReaperMaster: IMixerProtocol = { - protocol: 'OSC', - label: 'Reaper DAW Master mode(reaper.fm)', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 0, //Set to value to get MixerOnline status - initializeCommands: [emptyMixerMessage()], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/track/{channel}/volume', value: 0, type: 'f', min: 0, max: 1, zero: 0.75 }], - CHANNEL_VU: [{ mixerMessage: '/track/{channel}/vu', value: 0, type: 'f', min: 0, max: 1, zero: 0.75 }], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [{ mixerMessage: '/track/{channel}/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/track/{channel}/volume', value: 0, type: 'f', min: 0, max: 1, zero: 0.75 }], - CHANNEL_NAME: [{ mixerMessage: '/track/{channel}/name', value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], - PFL_ON: [{ - mixerMessage: "/track/{channel}/solo", - value: 1, - type: "i", - min: 0, - max: 1, - zero: 0.75 - }], - PFL_OFF: [{ - mixerMessage: "/track/{channel}/solo", - value: 0, - type: "i", - min: 0, - max: 1, - zero: 0.75 - }], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - }, - { - channelTypeName: 'MASTER', - channelTypeColor: '#0f0f3f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/master/volume', value: 0, type: 'f', min: 0, max: 1, zero: 0.75 }], - CHANNEL_VU: [ - { mixerMessage: '/master/vu/L', value: 0, type: 'f', min: 0, max: 1, zero: 0.75 }, - { mixerMessage: '/master/vu/R', value: 0, type: 'f', min: 0, max: 1, zero: 0.75 } - ], - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [emptyMixerMessage()], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: '/master/volume', value: 0, type: 'f', min: 0, max: 1, zero: 0.75 }], - CHANNEL_NAME: [emptyMixerMessage()], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [emptyMixerMessage()], - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - }], - fader: { - min: 0, - max: 1, - zero: 0.75, - step: 0.01, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - }, -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const ReaperMaster: IMixerProtocol = { + protocol: 'OSC', + label: 'Reaper DAW Master mode(reaper.fm)', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, //some OSC protocols needs channels to be 01, 02 etc. + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 0, //Set to value to get MixerOnline status + initializeCommands: [emptyMixerMessage()], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/track/{channel}/volume', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU: [ + { + mixerMessage: '/track/{channel}/vu', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [ + { + mixerMessage: '/track/{channel}/name', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/track/{channel}/volume', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [ + { + mixerMessage: '/track/{channel}/name', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL_ON: [ + { + mixerMessage: '/track/{channel}/solo', + value: 1, + type: 'i', + min: 0, + max: 1, + zero: 0.75, + }, + ], + PFL_OFF: [ + { + mixerMessage: '/track/{channel}/solo', + value: 0, + type: 'i', + min: 0, + max: 1, + zero: 0.75, + }, + ], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + { + channelTypeName: 'MASTER', + channelTypeColor: '#0f0f3f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/master/volume', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU: [ + { + mixerMessage: '/master/vu/L', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + { + mixerMessage: '/master/vu/R', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [emptyMixerMessage()], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: '/master/volume', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [emptyMixerMessage()], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [emptyMixerMessage()], + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + }, + ], + fader: { + min: 0, + max: 1, + zero: 0.75, + step: 0.01, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/constants/mixerProtocols/yamahaQLCL.ts b/server/constants/mixerProtocols/yamahaQLCL.ts index 47436632..49427847 100644 --- a/server/constants/mixerProtocols/yamahaQLCL.ts +++ b/server/constants/mixerProtocols/yamahaQLCL.ts @@ -1,74 +1,135 @@ -import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface'; - -export const YamahaQLCL: IMixerProtocol = { - protocol: 'QLCL', - label: 'Yamaha QL/CL', - mode: "master", - FADE_DISPATCH_RESOLUTION: 5, - leadingZeros: false, - pingCommand: [emptyMixerMessage()], - pingResponseCommand: [emptyMixerMessage()], - pingTime: 10000, - initializeCommands: [ - { - mixerMessage: 'f0 43 30 3e 19 01 00 37 00 00 {channel} f7', - value: 0, - type: '', - min: 0, - max: 1, - zero: 0.75 - } - ], - channelTypes: [{ - channelTypeName: 'CH', - channelTypeColor: '#2f2f2f', - fromMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: 'f0 43 10 3e 19 01 00 37 00 00 {channel} 00 00 00 {level} f7', value: 0, type: '', min: 0, max: 1, zero: 0.75}], //PgmChange 0 - ignores this command - CHANNEL_VU: [{ mixerMessage: "0", value: 0, type: 'f', min: 0, max: 1, zero: 0.75}], //PgmChange 0 - ignores this command - CHANNEL_VU_REDUCTION: [emptyMixerMessage()], - CHANNEL_NAME: [emptyMixerMessage()], - PFL: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [{ mixerMessage: 'f0 43 10 3e 19 01 00 35 00 00 {channel} 00 00 00 00 00 f7', value: 0, type: '', min: 0, max: 1, zero: 0.75}], - // Only MUTE_ON is used as receiver - CHANNEL_MUTE_OFF: [emptyMixerMessage()] - }, - toMixer: { - CHANNEL_OUT_GAIN: [{ mixerMessage: 'f0 43 10 3e 19 01 00 37 00 00 {channel} 00 00 00 {level} f7', value: 0, type: '', min: 0, max: 1, zero: 0.75}], - CHANNEL_NAME: [emptyMixerMessage()], - PFL_ON: [emptyMixerMessage()], - PFL_OFF: [emptyMixerMessage()], - NEXT_SEND: [emptyMixerMessage()], - THRESHOLD: [emptyMixerMessage()], - RATIO: [emptyMixerMessage()], - DELAY_TIME: [emptyMixerMessage()], - LOW: [emptyMixerMessage()], - LO_MID: [emptyMixerMessage()], - MID: [emptyMixerMessage()], - HIGH: [emptyMixerMessage()], - AUX_LEVEL: [emptyMixerMessage()], - CHANNEL_MUTE_ON: [{ mixerMessage: 'f0 43 10 3e 19 01 00 35 00 00 {channel} 00 00 00 00 00 f7', value: 0, type: '', min: 0, max: 1, zero: 0.75}], - CHANNEL_MUTE_OFF: [{ mixerMessage: 'f0 43 10 3e 19 01 00 35 00 00 {channel} 00 00 00 00 01 f7', value: 0, type: '', min: 0, max: 1, zero: 0.75}] - }, - }], - fader: { - min: 0, - max: 1, - zero: 0.75, - step: 0.01, - }, - meter: { - min: 0, - max: 1, - zero: 0.75, - test: 0.6, - }, -} +import { IMixerProtocol, emptyMixerMessage } from '../MixerProtocolInterface' + +export const YamahaQLCL: IMixerProtocol = { + protocol: 'QLCL', + label: 'Yamaha QL/CL', + presetFileExtension: '', + FADE_DISPATCH_RESOLUTION: 5, + leadingZeros: false, + pingCommand: [emptyMixerMessage()], + pingResponseCommand: [emptyMixerMessage()], + pingTime: 10000, + initializeCommands: [ + { + mixerMessage: 'f0 43 30 3e 19 01 00 37 00 00 {channel} f7', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + channelTypes: [ + { + channelTypeName: 'CH', + channelTypeColor: '#2f2f2f', + fromMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'f0 43 10 3e 19 01 00 37 00 00 {channel} 00 00 00 {level} f7', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], //PgmChange 0 - ignores this command + CHANNEL_VU: [ + { + mixerMessage: '0', + value: 0, + type: 'f', + min: 0, + max: 1, + zero: 0.75, + }, + ], //PgmChange 0 - ignores this command + CHANNEL_VU_REDUCTION: [emptyMixerMessage()], + CHANNEL_NAME: [emptyMixerMessage()], + PFL: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [ + { + mixerMessage: + 'f0 43 10 3e 19 01 00 35 00 00 {channel} 00 00 00 00 00 f7', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + // Only MUTE_ON is used as receiver + CHANNEL_MUTE_OFF: [emptyMixerMessage()], + }, + toMixer: { + CHANNEL_OUT_GAIN: [ + { + mixerMessage: + 'f0 43 10 3e 19 01 00 37 00 00 {channel} 00 00 00 {level} f7', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_NAME: [emptyMixerMessage()], + PFL_ON: [emptyMixerMessage()], + PFL_OFF: [emptyMixerMessage()], + NEXT_SEND: [emptyMixerMessage()], + THRESHOLD: [emptyMixerMessage()], + RATIO: [emptyMixerMessage()], + DELAY_TIME: [emptyMixerMessage()], + LOW: [emptyMixerMessage()], + LO_MID: [emptyMixerMessage()], + MID: [emptyMixerMessage()], + HIGH: [emptyMixerMessage()], + AUX_LEVEL: [emptyMixerMessage()], + CHANNEL_MUTE_ON: [ + { + mixerMessage: + 'f0 43 10 3e 19 01 00 35 00 00 {channel} 00 00 00 00 00 f7', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + CHANNEL_MUTE_OFF: [ + { + mixerMessage: + 'f0 43 10 3e 19 01 00 35 00 00 {channel} 00 00 00 00 01 f7', + value: 0, + type: '', + min: 0, + max: 1, + zero: 0.75, + }, + ], + }, + }, + ], + fader: { + min: 0, + max: 1, + zero: 0.75, + step: 0.01, + }, + meter: { + min: 0, + max: 1, + zero: 0.75, + test: 0.6, + }, +} diff --git a/server/utils/MixerConnection.ts b/server/utils/MixerConnection.ts index 3196b04c..8f6d803e 100644 --- a/server/utils/MixerConnection.ts +++ b/server/utils/MixerConnection.ts @@ -19,6 +19,7 @@ import { CasparCGConnection } from './mixerConnections/CasparCGConnection' import { IChannel } from '../reducers/channelsReducer' import { SET_OUTPUT_LEVEL, FADE_ACTIVE } from '../reducers/channelActions' import { SET_FADER_LEVEL } from '../reducers/faderActions' +import { logger } from './logger' // FADE_INOUT_SPEED defines the resolution of the fade in ms // The lower the more CPU @@ -82,6 +83,10 @@ export class MixerGenericConnection { this.fadeActiveTimer = new Array(state.channels[0].channel.length) } + loadMixerPreset(presetName: string) { + logger.info('Loading Preset :' + presetName) + } + checkForAutoResetThreshold(channel: number) { if ( state.faders[0].fader[channel].faderLevel <= diff --git a/server/utils/SettingsStorage.ts b/server/utils/SettingsStorage.ts index 44f6465d..e40c8ca8 100644 --- a/server/utils/SettingsStorage.ts +++ b/server/utils/SettingsStorage.ts @@ -127,6 +127,20 @@ export const getSnapShotList = () => { return files } +export const getMixerPresetList = (fileExtension: string) => { + const files = fs + .readdirSync(path.resolve('storage')) + .filter((file: string) => { + if ( + file.includes('.' + fileExtension) && + file !== 'default.' + fileExtension + ) { + return true + } + }) + return files +} + export const getCcgSettingsList = () => { const files = fs .readdirSync(path.resolve('storage')) diff --git a/server/utils/mixerConnections/MidiMixerConnection.ts b/server/utils/mixerConnections/MidiMixerConnection.ts index c51dd521..a2f5cc7e 100644 --- a/server/utils/mixerConnections/MidiMixerConnection.ts +++ b/server/utils/mixerConnections/MidiMixerConnection.ts @@ -104,10 +104,7 @@ export class MidiMixerConnection { state.faders[0].fader[faderChannel - 1].faderLevel ) } - if ( - state.faders[0].fader[faderChannel - 1].pgmOn && - this.mixerProtocol.mode === 'master' - ) { + if (state.faders[0].fader[faderChannel - 1].pgmOn) { state.channels[0].channel.map( (channel: any, index: number) => { if (channel.assignedFader === faderChannel - 1) {