2023-10-03 06:53:25 -04:00
|
|
|
if (!("controller" in window)) {
|
|
|
|
let socket;
|
|
|
|
|
|
|
|
let volumeMeterLeft;
|
|
|
|
let volumeMeterRight;
|
|
|
|
|
|
|
|
function connect(url) {
|
|
|
|
if (socket) {
|
|
|
|
socket.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
socket = new WebSocket(url);
|
|
|
|
|
|
|
|
socket.onmessage = function (event) {
|
|
|
|
var data = JSON.parse(event.data);
|
|
|
|
|
|
|
|
switch (data.event) {
|
|
|
|
case "device-list":
|
|
|
|
if (data.data.devices.length > 0) {
|
|
|
|
socket.send(JSON.stringify({
|
|
|
|
"event": "open-device",
|
|
|
|
"data": {
|
|
|
|
"name": data.data.devices[0]
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case "signal":
|
|
|
|
onSignal(event, data.data.name, data.data.value);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
socket.onopen = function () {
|
|
|
|
socket.send(JSON.stringify({
|
|
|
|
"event": "load-driver",
|
|
|
|
"data": {
|
|
|
|
"name": "linux-rawmidi"
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
socket.send(JSON.stringify({
|
|
|
|
"event": "load-mappings",
|
|
|
|
"data": {
|
|
|
|
"name": "numark-mixtrackplatinum"
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
socket.send(JSON.stringify({
|
|
|
|
"event": "list-devices"
|
|
|
|
}));
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function sendControl(name, value = 0x00) {
|
|
|
|
socket.send(JSON.stringify({
|
|
|
|
"event": "control",
|
|
|
|
"data": {
|
|
|
|
"name": name,
|
|
|
|
"value": value
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
window.controller = {
|
|
|
|
"load": function (deckIndex) {
|
|
|
|
sendControl("deck" + String(deckIndex) + ".load");
|
|
|
|
},
|
|
|
|
"play_pause": function (deckIndex) {
|
|
|
|
sendControl("deck" + String(deckIndex) + ".play_pause");
|
|
|
|
},
|
2023-10-15 19:48:02 -04:00
|
|
|
"sync": function (deckIndex) {
|
|
|
|
sendControl("deck" + String(deckIndex) + ".sync");
|
|
|
|
},
|
2023-10-03 06:53:25 -04:00
|
|
|
"volume": function (deckIndex, value) {
|
|
|
|
sendControl("deck" + String(deckIndex) + ".volume", value);
|
|
|
|
},
|
2023-10-15 19:48:02 -04:00
|
|
|
"eq": function (deckIndex, freq, value) {
|
|
|
|
sendControl("deck" + String(deckIndex) + ".eq_" + freq, value);
|
|
|
|
},
|
2023-10-03 06:53:25 -04:00
|
|
|
"speed": function (deckIndex, value) {
|
|
|
|
sendControl("deck" + String(deckIndex) + ".speed", value);
|
|
|
|
},
|
|
|
|
"pad": function (deckIndex, padIndex) {
|
|
|
|
sendControl("deck" + String(deckIndex) + ".pad" + String(padIndex));
|
|
|
|
},
|
|
|
|
"crossfade": function (value) {
|
|
|
|
sendControl("master.crossfade", value);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var onSignal = function (event, name, value = 0x00) {
|
|
|
|
switch (name) {
|
|
|
|
case "master.volume.left":
|
|
|
|
volumeMeterLeft.style.height = String(Math.round((value / 80) * 100)) + "%";
|
|
|
|
break;
|
|
|
|
case "master.volume.right":
|
|
|
|
volumeMeterRight.style.height = String(Math.round((value / 80) * 100)) + "%";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
window.onload = function (event) {
|
|
|
|
volumeMeterLeft = document.querySelector("#volume-meter-left");
|
|
|
|
volumeMeterRight = document.querySelector("#volume-meter-right");
|
|
|
|
|
|
|
|
connect("ws://" + window.location.host + "/socket");
|
|
|
|
};
|
|
|
|
}
|