Skip to content

Commit

Permalink
feat: Studer fader level return - level values alligned to/from Sisyfos
Browse files Browse the repository at this point in the history
  • Loading branch information
olzzon authored and olzzon committed May 10, 2020
1 parent f73a981 commit 68781b1
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 70 deletions.
9 changes: 9 additions & 0 deletions server/constants/mixerProtocols/StuderVistaEmber.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ export const StuderVistaMaster: IMixerProtocol = {
max: 10,
zero: 0,
},
{
mixerMessage:
'7f 8f ff fe d9 5c 80 30 80 a1 25 31 23 a1 21 31 1f a1 1d 31 1b a1 19 31 17 a1 15 31 13 a1 11 31 0f a2 0d 00 00 00 00 ',
value: 0,
type: 'real',
min: -90,
max: 10,
zero: 0,
},
],
pingResponseCommand: [emptyMixerMessage()],
pingTime: 6000, //Bypass ping when pingTime is zero
Expand Down
157 changes: 87 additions & 70 deletions server/utils/mixerConnections/StuderVistaMixerConnection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,73 +80,75 @@ export class StuderVistaMixerConnection {
.CHANNEL_OUT_GAIN[0].mixerMessage
)
) {
let { channel, value, argument } = this.convertEmberCommand(
let {
channel,
value,
argument,
commandValid,
} = this.convertEmberCommand(
message,
this.mixerProtocol.channelTypes[0].fromMixer
.CHANNEL_OUT_GAIN[0].mixerMessage
)
if (channel >= 0) {
let assignedFaderIndex =
state.channels[0].channel[channel - 1].assignedFader

if (!state.channels[0].channel[channel - 1].fadeActive) {
if (
value ||
1 > state.settings[0].autoResetLevel / 100
) {
store.dispatch({
type: SET_FADER_LEVEL,
channel: assignedFaderIndex,
level: value,
})
state.channels[0].channel.forEach((item, index) => {
if (item.assignedFader === assignedFaderIndex) {
store.dispatch({
type: SET_OUTPUT_LEVEL,
channel: index,
level: value,
})
}
})
if (
!state.faders[0].fader[assignedFaderIndex].pgmOn
) {
if (value || 1 > this.mixerProtocol.fader.min) {
store.dispatch({
type: TOGGLE_PGM,
channel: assignedFaderIndex,
})
}
if (!commandValid) {
return
}

let assignedFaderIndex =
state.channels[0].channel[channel - 1].assignedFader

if (!state.channels[0].channel[channel - 1].fadeActive) {
if (value || 1 > state.settings[0].autoResetLevel / 100) {
store.dispatch({
type: SET_FADER_LEVEL,
channel: assignedFaderIndex,
level: value,
})
state.channels[0].channel.forEach((item, index) => {
if (item.assignedFader === assignedFaderIndex) {
store.dispatch({
type: SET_OUTPUT_LEVEL,
channel: index,
level: value,
})
}
})
if (!state.faders[0].fader[assignedFaderIndex].pgmOn) {
if (value || 1 > this.mixerProtocol.fader.min) {
store.dispatch({
type: TOGGLE_PGM,
channel: assignedFaderIndex,
})
}
} else if (
state.faders[0].fader[assignedFaderIndex].pgmOn ||
state.faders[0].fader[assignedFaderIndex].voOn
) {
store.dispatch({
type: SET_FADER_LEVEL,
channel: assignedFaderIndex,
level: value,
})
state.channels[0].channel.forEach((item, index) => {
if (item.assignedFader === assignedFaderIndex) {
store.dispatch({
type: SET_OUTPUT_LEVEL,
channel: index,
level: value,
})
}
})
}
global.mainThreadHandler.updatePartialStore(
assignedFaderIndex
} else if (
state.faders[0].fader[assignedFaderIndex].pgmOn ||
state.faders[0].fader[assignedFaderIndex].voOn
) {
store.dispatch({
type: SET_FADER_LEVEL,
channel: assignedFaderIndex,
level: value,
})
state.channels[0].channel.forEach((item, index) => {
if (item.assignedFader === assignedFaderIndex) {
store.dispatch({
type: SET_OUTPUT_LEVEL,
channel: index,
level: value,
})
}
})
}
global.mainThreadHandler.updatePartialStore(
assignedFaderIndex
)

if (remoteConnections) {
remoteConnections.updateRemoteFaderState(
assignedFaderIndex,
channel
)

if (remoteConnections) {
remoteConnections.updateRemoteFaderState(
assignedFaderIndex,
channel
)
}
}
}
} else if (
Expand All @@ -156,7 +158,12 @@ export class StuderVistaMixerConnection {
.CHANNEL_MUTE_ON[0].mixerMessage
)
) {
let { channel, value, argument } = this.convertEmberCommand(
let {
channel,
value,
argument,
commandValid,
} = this.convertEmberCommand(
message,
this.mixerProtocol.channelTypes[0].fromMixer
.CHANNEL_MUTE_ON[0].mixerMessage
Expand Down Expand Up @@ -217,14 +224,19 @@ export class StuderVistaMixerConnection {
convertEmberCommand(
message: string,
protocolMessage: string
): { channel: number; value: number; argument: string } {
): {
channel: number
value: number
argument: string
commandValid: boolean
} {
let messageArray = message.split('31 ')
let protocolArray = protocolMessage.split(' ')

let channel: number = 0
let value: number = 0
let argument: string = ''

let commandValid: boolean = true
// Extract Channel type: (mono, st, 5.1)

// Extract Channel number:
Expand All @@ -235,7 +247,11 @@ export class StuderVistaMixerConnection {
}
})
// Extract value:
let hexString = messageArray[messageArray.length - 1] //.replace('63','30')
let hexString = messageArray[messageArray.length - 1]
if (hexString.length < 14) {
// Workaround - Sometimes Studer sends a fader without valid value
commandValid = false
}
let hexVal = hexString.split(' ').slice(3)
hexVal = hexVal.slice(0, parseInt(hexVal[1], 16) + 2)
let BERreader = new BER.Reader(
Expand All @@ -246,13 +262,14 @@ export class StuderVistaMixerConnection {
)
)
value = BERreader.readReal()
value = 0.9 + value / Math.log(10) / 40 // 40 * Math.log((1.14 * value) / 0.88)
value = Math.exp(value / 40) / 1.2954 // 40 * Math.log((1.14 * value) / 0.88)
console.log('Channel :', channel, 'Value :', value)

//console.log(hexString)
return {
channel: channel,
value: value,
argument: '',
commandValid: commandValid,
}
}

Expand All @@ -269,7 +286,7 @@ export class StuderVistaMixerConnection {
pingMixerCommand() {
this.mixerProtocol.pingCommand.map((command) => {
let hexArray = command.mixerMessage.split(' ')
let buf = new Buffer(
let buf = Buffer.from(
hexArray.map((val: string) => {
return parseInt(val, 16)
})
Expand Down Expand Up @@ -375,7 +392,7 @@ export class StuderVistaMixerConnection {

updateOutLevel(channelIndex: number) {
let outputlevel = state.channels[0].channel[channelIndex].outputLevel
let level = 40 * Math.log((1.14 * outputlevel) / 0.88)
let level = 40 * Math.log(1.295 * outputlevel)
if (level < -90) {
level = -90
}
Expand All @@ -385,7 +402,7 @@ export class StuderVistaMixerConnection {
}

updateFadeIOLevel(channelIndex: number, outputLevel: number) {
let level = 40 * Math.log((1.14 * outputLevel) / 0.88)
let level = 40 * Math.log(1.295 * outputLevel)
if (level < -90) {
level = -90
}
Expand Down Expand Up @@ -464,7 +481,7 @@ export class StuderVistaMixerConnection {
('0' + auxByte[0].toString(16)).slice(-2)
)

level = 40 * Math.log((1.14 * level) / 0.88)
level = 40 * Math.log(1.295 * level)
if (level < -80) {
level = -90
}
Expand Down

0 comments on commit 68781b1

Please sign in to comment.