Initial release
This commit is contained in:
105
view/assets/scripts/main.js
Normal file
105
view/assets/scripts/main.js
Normal file
@ -0,0 +1,105 @@
|
||||
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");
|
||||
},
|
||||
"volume": function (deckIndex, value) {
|
||||
sendControl("deck" + String(deckIndex) + ".volume", value);
|
||||
},
|
||||
"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");
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user