mirror of
https://github.com/stagehacks/Cue-View.git
synced 2026-08-05 22:03:41 +00:00
130 lines
3.7 KiB
JavaScript
130 lines
3.7 KiB
JavaScript
exports.defaultName = "X32 Mixer";
|
|
exports.connectionType = "UDPsocket";
|
|
exports.heartbeatInterval = 10000;
|
|
exports.searchOptions = {
|
|
type: "UDPsocket",
|
|
searchBuffer: Buffer.from([0x2f, 0x78, 0x69, 0x6e, 0x66, 0x6f]),
|
|
devicePort: 10023,
|
|
listenPort: 0,
|
|
validateResponse: function(msg, info){
|
|
return (msg.toString().indexOf("/xinfo")==0);
|
|
}
|
|
}
|
|
exports.defaultPort = 10023;
|
|
|
|
exports.ready = function(device){
|
|
|
|
device.data.channelFaders = new Array(32).fill(0);
|
|
device.data.channelFadersDB = new Array(32).fill(0);
|
|
device.data.channelMutes = new Array(32).fill(0);
|
|
device.data.channelNames = new Array(32).fill("end");
|
|
device.data.channelColors = new Array(32);
|
|
|
|
device.data.stereoFader = 0;
|
|
device.data.stereoFaderDB = 0;
|
|
device.data.stereoMute = 0;
|
|
|
|
device.send(Buffer.from("/xinfo"));
|
|
|
|
|
|
//device.send(Buffer.from("\x2f\x62\x61\x74\x63\x68\x73\x75\x62\x73\x63\x72\x69\x62\x65\x00\x2c\x73\x73\x69\x69\x69\x00\x00\x6d\x65\x74\x65\x72\x73\x2f\x30\x00\x00\x00\x00\x2f\x6d\x65\x74\x65\x72\x73\x2f\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"));
|
|
//device.send(Buffer.from("/batchsubscribe\x00,ssiii\x00\x00meters/0\x00\x00\x00\x00/meters/0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"));
|
|
|
|
//device.send(Buffer.from("/subscribe\x00,si\x00/-stat/solosw/01\x001"));
|
|
|
|
}
|
|
|
|
exports.data = function(device, buf){
|
|
this.deviceInfoUpdate(device, "status", "ok");
|
|
var msg = buf.toString().split('\u0000\u0000')
|
|
|
|
if(msg[0]=="/xinfo"){
|
|
this.deviceInfoUpdate(device, "defaultName", msg[4]);
|
|
device.data.name = msg[4];
|
|
device.data.ip = msg[2];
|
|
device.data.firmware = msg[7];
|
|
device.data.model = msg[5];
|
|
|
|
|
|
device.send(Buffer.from("/lr/mix/fader\u0000\u0000\u0000\u0000"));
|
|
device.send(Buffer.from("/lr/mix/on\u0000\u0000\u0000\u0000"));
|
|
|
|
for(var i=0; i<=32; i++){
|
|
device.send(Buffer.from("/ch/"+i.toString().padStart(2, "0")+"/config/name\u0000\u0000\u0000\u0000"));
|
|
}
|
|
device.draw();
|
|
|
|
|
|
}else if(msg[0]=="/meters/0"){
|
|
//console.log(msg)
|
|
}else if(msg[0].indexOf("/mix/fader")>=0){
|
|
var addr = parseAddress(msg[0]);
|
|
var channel = Number(addr[1]);
|
|
|
|
if(addr[0]=="ch"){
|
|
device.data.channelFaders[channel-1] = buf.readFloatBE(24);
|
|
device.data.channelFadersDB[channel-1] = convertToDBTheBehringerWay(buf.readFloatBE(24));
|
|
}else if(addr[0]=="lr"){
|
|
device.data.stereoFader = buf.readFloatBE(20);
|
|
device.data.stereoFaderDB = convertToDBTheBehringerWay(buf.readFloatBE(20));
|
|
}
|
|
|
|
device.draw();
|
|
|
|
}else if(msg[0].indexOf("/mix/on")>=0){
|
|
var addr = parseAddress(msg[0]);
|
|
var channel = Number(addr[1]);
|
|
|
|
if(addr[0]=="ch"){
|
|
device.data.channelMutes[channel-1] = buf[23];
|
|
}else if(addr[0]=="lr"){
|
|
device.data.stereoMute = buf[19];
|
|
}
|
|
device.draw();
|
|
device.send(Buffer.from("/ch/"+addr[1]+"/mix/fader\u0000\u0000\u0000\u0000"));
|
|
|
|
}else if(msg[0].indexOf("/config/name")>0){
|
|
var addr = parseAddress(msg[0]);
|
|
var channel = Number(addr[1]);
|
|
device.data.channelNames[channel-1] = msg[2];
|
|
device.draw();
|
|
device.send(Buffer.from("/ch/"+addr[1]+"/config/color\u0000\u0000\u0000\u0000"));
|
|
|
|
}else if(msg[0].indexOf("/config/color")>0){
|
|
var addr = parseAddress(msg[0]);
|
|
var channel = Number(addr[1]);
|
|
device.data.channelColors[channel-1] = buf.readInt8(27);
|
|
device.draw();
|
|
device.send(Buffer.from("/ch/"+addr[1]+"/mix/on\u0000\u0000\u0000\u0000"));
|
|
|
|
}else{
|
|
//console.log(msg)
|
|
}
|
|
//console.log(msg)
|
|
|
|
}
|
|
|
|
exports.heartbeat = function(device){
|
|
device.send(Buffer.from("/xremote"));
|
|
}
|
|
|
|
|
|
function parseAddress(msg){
|
|
var addr = msg.split("/");
|
|
addr.shift();
|
|
return addr;
|
|
}
|
|
|
|
function convertToDBTheBehringerWay(f){
|
|
if(f>=0.5){
|
|
return f*40-30;
|
|
}else if(f>=0.25){
|
|
return f*80-50;
|
|
}else if(f>=0.0625){
|
|
return f*160-70;
|
|
}else{
|
|
return f*480-90;
|
|
}
|
|
}
|
|
|