rc-web@49: //////////////////////////////////////////// rc-web@49: // magic square sequencer rc-web@49: //////////////////////////////////////////// rc-web@49: // var score = require('./score'); rc-web@49: // var c = require('./chronometer'); rc-web@49: var nodescore = require('./nodescore'); rc-web@49: var sio = nodescore.sio rc-web@49: var io = nodescore.io rc-web@49: rc-web@49: rc-web@49: // var mm = score.mm rc-web@49: var sequencerState = 0; rc-web@49: rc-web@49: rc-web@49: rc-web@49: io.sockets.on('connection', function (socket) { rc-web@49: rc-web@49: // var srcsqr = score.srcsqr rc-web@49: var srcsqr = [] rc-web@49: srcsqr[0] = [22,21,24,25,06,07]; rc-web@49: srcsqr[1] = [20,23,27,26,05,04]; rc-web@49: srcsqr[2] = [03,00,17,16,35,34]; rc-web@49: srcsqr[3] = [01,02,19,18,33,32]; rc-web@49: rc-web@49: // var seqA = score.seqA rc-web@49: // var seqB = score.seqB rc-web@49: // var seqC = score.seqC rc-web@49: // var seqD = score.seqD rc-web@49: rc-web@49: var seqA = { metrobeat:0, voice:1, name: "A", counter: 0, mm: 60, beatsinbar: 4, durations: srcsqr[0], units: [1,2,3,1,2,4]}; rc-web@54: var seqB = { metrobeat:0, voice:2, name: "B", counter: 0, mm: 90, beatsinbar: 4, durations: srcsqr[1], units: [3,2,1,1,2,3]}; rc-web@49: var seqC = { metrobeat:0, voice:3, name: "C", counter: 0, mm: 90, beatsinbar: 4, durations: srcsqr[2], units: [4,5,6,5,4,2]}; rc-web@54: var seqD = { metrobeat:0, voice:4, name: "D", counter: 0, mm: 45, beatsinbar: 4, durations: srcsqr[3], units: [2,3,4,2,3,1]}; rc-web@49: rc-web@49: rc-web@49: var countdowntick = function(seq){ rc-web@49: // var tempoms = Math.floor(60000/seq.mm) rc-web@49: var tempoms = Math.floor(60000/seq.mm) rc-web@49: //console.log(tempoms) rc-web@49: var timemultiplier=1 rc-web@49: var outcount = 4; var incount=4; rc-web@49: var time = ((seq.durations[seq.counter]+1) *timemultiplier) + 30000 + (outcount*tempoms); rc-web@49: var time = Math.floor(time) rc-web@49: var ztime = time; rc-web@49: var totaltime = Math.floor(time/tempoms) rc-web@49: var unit = seq.units[seq.counter]; rc-web@49: rc-web@49: // initiate first page here rc-web@49: socket.broadcast.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter); rc-web@49: socket.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter); rc-web@49: rc-web@49: function sequenCer() { rc-web@49: // console.log(ztime) rc-web@49: if (ztime >= 0 ){ rc-web@49: rc-web@49: // basic unit is still the second/1000ms - change this to tempoms? no i dont think so rc-web@49: // count in and count out rc-web@49: //////////////////////////////////////////// rc-web@49: rc-web@49: var counter = Math.floor(ztime/tempoms) rc-web@49: //console.log(counter) rc-web@49: if (counter >= 0 ){ rc-web@49: socket.broadcast.emit('counterText', seq.voice, seq.counter, counter); rc-web@49: socket.emit('counterText', seq.voice, seq.counter, counter); rc-web@49: rc-web@49: if (counter <= outcount ) { rc-web@49: socket.broadcast.emit('countinFromServer', seq.voice, counter, "","stop in: ", "red", "transparent"); rc-web@49: } rc-web@49: rc-web@49: if (counter > (totaltime)-incount && counter <= totaltime ) { rc-web@49: socket.broadcast.emit('countinFromServer', seq.voice, counter-(totaltime-incount), "","play in: ", "green","transparent"); rc-web@49: socket.emit('countinFromServer', seq.voice, counter-(totaltime-incount), "","play in: ", "green","transparent"); rc-web@49: rc-web@49: } rc-web@49: rc-web@49: if (counter == (totaltime)-incount ) { rc-web@49: socket.broadcast.emit('countinFromServer', seq.voice, "+", "","playing.. ", "green","transparent"); rc-web@49: socket.emit('countinFromServer', seq.voice, "+", "","playing.. ", "green","transparent"); rc-web@49: } rc-web@49: rc-web@49: // remove displayed number with " " at end of both countin/out rc-web@49: rc-web@49: if (counter == 0 ) { rc-web@49: socket.broadcast.emit('countinFromServer', seq.voice, "", "","", "green","transparent"); rc-web@49: socket.broadcast.emit('counterText', seq.voice, seq.counter, ""); rc-web@49: socket.emit('counterText', seq.voice, seq.counter, ""); rc-web@49: } rc-web@49: } rc-web@49: rc-web@49: // on each beat do: rc-web@49: rc-web@49: // push out the pulse to metronome rc-web@49: seq.metrobeat = (seq.metrobeat+1)%seq.beatsinbar ; rc-web@49: socket.broadcast.emit('metroPulse', tempoms, seq.voice,seq.metrobeat); rc-web@49: socket.emit('metroPulse', tempoms, seq.voice,seq.metrobeat); rc-web@49: } rc-web@49: rc-web@49: // flip the page rc-web@49: if (counter == 0){ rc-web@49: rc-web@49: seq.counter = (seq.counter + 1) % seq.durations.length rc-web@49: socket.broadcast.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter); rc-web@49: //delete tockTock; rc-web@49: step(seq); rc-web@49: } rc-web@49: rc-web@49: // decrement the time rc-web@49: ztime -= tempoms rc-web@49: } rc-web@49: rc-web@49: var pulse = setInterval(sequenCer, tempoms); rc-web@49: rc-web@49: socket.on('stopSeq', function () { rc-web@49: //donaldduck = mickeymouse + 7 rc-web@49: sequenCer.clearInterval rc-web@49: console.log("sequencer stopping...") rc-web@49: // grrr why wont this clearInterval work rc-web@49: sequencerState = 0 rc-web@49: clearInterval(pulse) rc-web@49: stopChr(); rc-web@49: }); rc-web@49: rc-web@49: }; rc-web@49: rc-web@49: step = function (seq) { rc-web@49: //clearInterval(seq.boo); rc-web@49: //clearInterval(countdowntick); rc-web@49: countdowntick(seq) rc-web@49: sequencerState=1; rc-web@49: }; rc-web@49: rc-web@49: startMss = function () { rc-web@49: step(seqA);step(seqB); step(seqC); step(seqD); rc-web@49: ztime =-1; rc-web@49: } rc-web@49: rc-web@49: exports.startMss = startMss; rc-web@49: }); rc-web@49: rc-web@49: rc-web@49: