parallaxis/parallaxis-server.js

180 lines
5.7 KiB
JavaScript
Executable File

var sio = require('socket.io')
, http = require('http')
, fs = require('fs')
, ch = require('chronometer')
, osc = require('node-osc');
var argu = process.argv.splice(2);
var port = argu[0]
var www = argu[1]
console.log(www, port)
// start oscgroups client in a screen
//var sys = require('sys')
//var exec = require('child_process').exec;
//exec("./oscgroupsclient_start.sh");
var express = require("express"),
app = express(),
//bodyParser = require('body-parser')
errorHandler = require('errorhandler'),
methodOverride = require('method-override'),
port = parseInt(process.env.PORT, 10) || port;
app.get("/", function (req, res) {
res.redirect("/index.html");
});
app.use(methodOverride());
//app.use(bodyParser());
app.use(express.static(__dirname + '/' + www));
app.use(errorHandler({
dumpExceptions: true,
showStack: true
}));
// Create a Node.js based http server on port 8080
var server = require('http').createServer(app).listen(port);
io = sio.listen(server)
, nicknames = {};
//io.set('log level', 1); // reduce logging
io.sockets.on('connection', function (socket) {
console.log("asdfsdf")
socket.on('play', function (speed) {
socket.broadcast.emit('play',speed);
socket.emit('play',speed)});
socket.on('reverse', function () {
socket.emit('reverse')
socket.broadcast.emit('reverse')});
socket.on('reset', function () {
socket.emit('reset')
socket.broadcast.emit('reset')});
socket.on('seek', function (seek) {
socket.emit('seek',seek);
socket.broadcast.emit('seek',seek);});
// GLOBAL PAUSE RESUME SEND/RECIEVE
socket.on('resumeAll', function () { socket.emit('resumeAll'); socket.broadcast.emit('resumeAll'); });
socket.on('pauseAll', function () { socket.emit('pauseAll'); socket.broadcast.emit('pauseAll'); });
// INDIVIDUAL PAUSE RESUME SEND/RECIEVE
socket.on('pauseA', function () {socket.emit('pauseA'); socket.broadcast.emit('pauseA');});
socket.on('resumeA', function () {socket.emit('resumeA'); socket.broadcast.emit('resumeA');});
socket.on('pauseB', function () {socket.emit('pauseB'); socket.broadcast.emit('pauseB');});
socket.on('resumeB', function () {socket.emit('resumeB'); socket.broadcast.emit('resumeB');});
socket.on('pauseC', function () {socket.emit('pauseC'); socket.broadcast.emit('pauseC');});
socket.on('resumeC', function () {socket.emit('resumeC'); socket.broadcast.emit('resumeC');});
socket.on('pauseD', function () {socket.emit('pauseD'); socket.broadcast.emit('pauseD');});
socket.on('resumeD', function () {socket.emit('resumeD'); socket.broadcast.emit('resumeD');});
chronstate = 0 ;
///// GLOBAL SPEED
socket.on('globalSpeed', function (x) { socket.emit('globalSpeed', x); socket.broadcast.emit('globalSpeed', x); });
//// INDIVIDUAL SPEEDS
socket.on('speeda', function (s) { socket.emit('speeda', s); socket.broadcast.emit('speeda', s); });
socket.on('speedb', function (s) { socket.emit('speedb', s); socket.broadcast.emit('speedb', s); });
socket.on('speedc', function (s) { socket.emit('speedc', s); socket.broadcast.emit('speedc', s); });
socket.on('speedd', function (s) { socket.emit('speedd', s); socket.broadcast.emit('speedd', s); });
///// SEEEEK
socket.on('seek', function (s) { socket.emit('seek', s); socket.broadcast.emit('seek', s); });
var oscclient = new osc.Client('localhost', 22244);
function ardourRec(){
oscclient.send('/ardour/goto_start');
oscclient.send('/ardour/access_action' ,"Transport/record-roll" );
}
function getNow(){
date = new Date()
starttime = new Date().getTime() / 1000
}
function chronCtrl (state,interval){
console.log("=========================== chronstate=" + state)
if (state==1){
chronstate = 1;
getNow();
//var date = new Date()
//var starttime = new Date().getTime() / 1000 ;
//var interval = 1020 - date.getMilliseconds();
xstopwatch = setInterval(function () {
var nowtime = new Date().getTime() / 1000;
now = nowtime-(starttime +10)
hours = parseInt( now / 3600 ) % 24;
minutes = parseInt( now / 60 ) % 60;
seconds = parseInt(now % 60);
milliseconds = Math.floor((now-seconds)*10)%60;
time = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds) + "."+milliseconds;
// console.log(time)
//socket.broadcast.emit('chronFromServer', time)
////////////////////
socket.emit('chronFromServer', time)
socket.broadcast.emit('chronFromServer', time)
oscclient.send('/nodescore/chron', time);
}, 100)
}
if (state==0) {
clearInterval(id);
}
}
socket.on('clearStopwatch', function() { clearInterval(id); })
socket.on('goStopwatch', function(){
console.log(chronstate); if (chronstate == 0) {
var id = chronCtrl(1,100);
ardourRec()
}
else { getNow();
ardourRec();
}
}
)
////////////////////////////
// scroll location comes fromm clients and gets passed via OSC back to client
// there will be a little rounttrip latency - lets see -
// this might be o good way to sync browser
// to external audio processing such as puredata sc3 etc.
///////////////////////////
socket.on('parta', function(left){ oscclient.send('/fx/delay', left,left*14); } )
//socket.on('partb', function(left){ oscclient.send('/partb', left); } )
//socket.on('partc', function(left){ oscclient.send('/partc', left); } )
//socket.on('partd', function(left){ oscclient.send('/partd', left); } )
socket.on('disconnect', function(client) {
console.log(socket.nickname + " is gone..." )
//zeroChron();
clearInterval(id);
clearInterval(xstopwatch);
});
var id
var xstopwatch
});