From e5fd8a97b5e0b623f1c8bf7ae2a1465fe7069538 Mon Sep 17 00:00:00 2001 From: olzzon Date: Wed, 27 May 2020 21:50:03 +0200 Subject: [PATCH] fix: Midas - Behringer X32 - emit all meter values in one blob --- client/utils/SocketClientHandlers.ts | 19 ++++ server/constants/SOCKET_IO_DISPATCHERS.ts | 1 + .../mixerConnections/productSpecific/midas.ts | 91 +++++++++---------- 3 files changed, 63 insertions(+), 48 deletions(-) diff --git a/client/utils/SocketClientHandlers.ts b/client/utils/SocketClientHandlers.ts index d85a1f3d..44121894 100644 --- a/client/utils/SocketClientHandlers.ts +++ b/client/utils/SocketClientHandlers.ts @@ -22,6 +22,7 @@ import { SOCKET_RETURN_CCG_LIST, SOCKET_SET_VU_REDUCTION, SOCKET_SET_MIXER_ONLINE, + SOCKET_SET_ALL_VU, } from '../../server/constants/SOCKET_IO_DISPATCHERS' export const socketClientHandlers = () => { @@ -105,6 +106,24 @@ export const socketClientHandlers = () => { state: payload.state, }) }) + .on(SOCKET_SET_ALL_VU, (payload: any) => { + payload.vuMeters.forEach((meterLevel: number, index: number) => { + window.storeRedux.dispatch({ + type: SET_VU_LEVEL, + channel: index, + level: meterLevel, + }) + }) + payload.vuReductionMeters.forEach( + (meterLevel: number, index: number) => { + window.storeRedux.dispatch({ + type: SET_VU_REDUCTION_LEVEL, + channel: index, + level: meterLevel, + }) + } + ) + }) .on(SOCKET_SET_VU, (payload: any) => { window.storeRedux.dispatch({ type: SET_VU_LEVEL, diff --git a/server/constants/SOCKET_IO_DISPATCHERS.ts b/server/constants/SOCKET_IO_DISPATCHERS.ts index c6da4344..0769fca1 100644 --- a/server/constants/SOCKET_IO_DISPATCHERS.ts +++ b/server/constants/SOCKET_IO_DISPATCHERS.ts @@ -27,6 +27,7 @@ export const SOCKET_CLEAR_PST = 'clearPst' export const SOCKET_SAVE_SETTINGS = 'saveSettings' export const SOCKET_RESTART_SERVER = 'restartServer' export const SOCKET_SET_VU = 'setVu' +export const SOCKET_SET_ALL_VU = 'setAllVu' export const SOCKET_SET_VU_REDUCTION = 'setVuReduction' export const SOCKET_GET_SNAPSHOT_LIST = 'getSnapshotList' export const SOCKET_RETURN_SNAPSHOT_LIST = 'returnSnapshotList' diff --git a/server/utils/mixerConnections/productSpecific/midas.ts b/server/utils/mixerConnections/productSpecific/midas.ts index 7e9e4780..b515e59d 100644 --- a/server/utils/mixerConnections/productSpecific/midas.ts +++ b/server/utils/mixerConnections/productSpecific/midas.ts @@ -1,48 +1,43 @@ -import { store, state } from '../../../reducers/store' -import { socketServer } from '../../../expressHandler' - -import { SET_VU_REDUCTION_LEVEL, SET_VU_LEVEL } from '../../../reducers/faderActions' -import { SOCKET_SET_VU, SOCKET_SET_VU_REDUCTION } from '../../../constants/SOCKET_IO_DISPATCHERS'; - -export const midasMeter = (message: any) => { - - const DATA_OFFSET = 4; - let uint8bytes = Uint8Array.from(message[0]); - let dataview = new DataView(uint8bytes.buffer); - let vuMeters = [] - let level: number - let reductionLevel: number - let numberOfChannels = state.settings[0].numberOfChannelsInType[0]; - - for (let i=0; i < numberOfChannels; i++) { - level = dataview.getFloat32(4*i+DATA_OFFSET , true) - reductionLevel = dataview.getFloat32(4*(i+64)+DATA_OFFSET , true) - - vuMeters.push({vuVal : level}) - store.dispatch({ - type:SET_VU_LEVEL, - channel: i, - level: level - }) - socketServer.emit( - SOCKET_SET_VU, - { - faderIndex: state.channels[0].channel[i].assignedFader, - level: level - } - ) - store.dispatch({ - type:SET_VU_REDUCTION_LEVEL, - channel: i, - level: reductionLevel - }) - socketServer.emit( - SOCKET_SET_VU_REDUCTION, - { - faderIndex: state.channels[0].channel[i].assignedFader, - level: reductionLevel - } - ) - } -} - +import { store, state } from '../../../reducers/store' +import { socketServer } from '../../../expressHandler' + +import { + SET_VU_REDUCTION_LEVEL, + SET_VU_LEVEL, +} from '../../../reducers/faderActions' +import { SOCKET_SET_ALL_VU } from '../../../constants/SOCKET_IO_DISPATCHERS' + +export const midasMeter = (message: any) => { + const DATA_OFFSET = 4 + let uint8bytes = Uint8Array.from(message[0]) + let dataview = new DataView(uint8bytes.buffer) + let vuMeters = [] + let vuReductionMeters = [] + let level: number + let reductionLevel: number + let numberOfChannels = state.settings[0].numberOfChannelsInType[0] + + for (let i = 0; i < numberOfChannels; i++) { + level = dataview.getFloat32(4 * i + DATA_OFFSET, true) + reductionLevel = dataview.getFloat32(4 * (i + 64) + DATA_OFFSET, true) + + vuMeters.push(level) + store.dispatch({ + type: SET_VU_LEVEL, + channel: i, + level: level, + }) + + vuReductionMeters.push(reductionLevel) + + store.dispatch({ + type: SET_VU_REDUCTION_LEVEL, + channel: i, + level: reductionLevel, + }) + } + socketServer.emit(SOCKET_SET_ALL_VU, { + vuMeters: vuMeters, + vuReductionMeters: vuReductionMeters, + }) +}