rc-web@49
|
1 ////////////////////////////////////////////
|
rc-web@49
|
2 // magic square sequencer
|
rc-web@49
|
3 ////////////////////////////////////////////
|
rc-web@49
|
4 // var score = require('./score');
|
rc-web@49
|
5 // var c = require('./chronometer');
|
rc-web@49
|
6 var nodescore = require('./nodescore');
|
rc-web@49
|
7 var sio = nodescore.sio
|
rc-web@49
|
8 var io = nodescore.io
|
rc-web@49
|
9
|
rc-web@49
|
10
|
rc-web@49
|
11 // var mm = score.mm
|
rc-web@49
|
12 var sequencerState = 0;
|
rc-web@49
|
13
|
rc-web@49
|
14
|
rc-web@49
|
15
|
rc-web@49
|
16 io.sockets.on('connection', function (socket) {
|
rc-web@49
|
17
|
rc-web@49
|
18 // var srcsqr = score.srcsqr
|
rc-web@49
|
19 var srcsqr = []
|
rc-web@49
|
20 srcsqr[0] = [22,21,24,25,06,07];
|
rc-web@49
|
21 srcsqr[1] = [20,23,27,26,05,04];
|
rc-web@49
|
22 srcsqr[2] = [03,00,17,16,35,34];
|
rc-web@49
|
23 srcsqr[3] = [01,02,19,18,33,32];
|
rc-web@49
|
24
|
rc-web@49
|
25 // var seqA = score.seqA
|
rc-web@49
|
26 // var seqB = score.seqB
|
rc-web@49
|
27 // var seqC = score.seqC
|
rc-web@49
|
28 // var seqD = score.seqD
|
rc-web@49
|
29
|
rc-web@49
|
30 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
|
31 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
|
32 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
|
33 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
|
34
|
rc-web@49
|
35
|
rc-web@49
|
36 var countdowntick = function(seq){
|
rc-web@49
|
37 // var tempoms = Math.floor(60000/seq.mm)
|
rc-web@49
|
38 var tempoms = Math.floor(60000/seq.mm)
|
rc-web@49
|
39 //console.log(tempoms)
|
rc-web@49
|
40 var timemultiplier=1
|
rc-web@49
|
41 var outcount = 4; var incount=4;
|
rc-web@49
|
42 var time = ((seq.durations[seq.counter]+1) *timemultiplier) + 30000 + (outcount*tempoms);
|
rc-web@49
|
43 var time = Math.floor(time)
|
rc-web@49
|
44 var ztime = time;
|
rc-web@49
|
45 var totaltime = Math.floor(time/tempoms)
|
rc-web@49
|
46 var unit = seq.units[seq.counter];
|
rc-web@49
|
47
|
rc-web@49
|
48 // initiate first page here
|
rc-web@49
|
49 socket.broadcast.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter);
|
rc-web@49
|
50 socket.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter);
|
rc-web@49
|
51
|
rc-web@49
|
52 function sequenCer() {
|
rc-web@49
|
53 // console.log(ztime)
|
rc-web@49
|
54 if (ztime >= 0 ){
|
rc-web@49
|
55
|
rc-web@49
|
56 // basic unit is still the second/1000ms - change this to tempoms? no i dont think so
|
rc-web@49
|
57 // count in and count out
|
rc-web@49
|
58 ////////////////////////////////////////////
|
rc-web@49
|
59
|
rc-web@49
|
60 var counter = Math.floor(ztime/tempoms)
|
rc-web@49
|
61 //console.log(counter)
|
rc-web@49
|
62 if (counter >= 0 ){
|
rc-web@49
|
63 socket.broadcast.emit('counterText', seq.voice, seq.counter, counter);
|
rc-web@49
|
64 socket.emit('counterText', seq.voice, seq.counter, counter);
|
rc-web@49
|
65
|
rc-web@49
|
66 if (counter <= outcount ) {
|
rc-web@49
|
67 socket.broadcast.emit('countinFromServer', seq.voice, counter, "","stop in: ", "red", "transparent");
|
rc-web@49
|
68 }
|
rc-web@49
|
69
|
rc-web@49
|
70 if (counter > (totaltime)-incount && counter <= totaltime ) {
|
rc-web@49
|
71 socket.broadcast.emit('countinFromServer', seq.voice, counter-(totaltime-incount), "","play in: ", "green","transparent");
|
rc-web@49
|
72 socket.emit('countinFromServer', seq.voice, counter-(totaltime-incount), "","play in: ", "green","transparent");
|
rc-web@49
|
73
|
rc-web@49
|
74 }
|
rc-web@49
|
75
|
rc-web@49
|
76 if (counter == (totaltime)-incount ) {
|
rc-web@49
|
77 socket.broadcast.emit('countinFromServer', seq.voice, "+", "","playing.. ", "green","transparent");
|
rc-web@49
|
78 socket.emit('countinFromServer', seq.voice, "+", "","playing.. ", "green","transparent");
|
rc-web@49
|
79 }
|
rc-web@49
|
80
|
rc-web@49
|
81 // remove displayed number with " " at end of both countin/out
|
rc-web@49
|
82
|
rc-web@49
|
83 if (counter == 0 ) {
|
rc-web@49
|
84 socket.broadcast.emit('countinFromServer', seq.voice, "", "","", "green","transparent");
|
rc-web@49
|
85 socket.broadcast.emit('counterText', seq.voice, seq.counter, "");
|
rc-web@49
|
86 socket.emit('counterText', seq.voice, seq.counter, "");
|
rc-web@49
|
87 }
|
rc-web@49
|
88 }
|
rc-web@49
|
89
|
rc-web@49
|
90 // on each beat do:
|
rc-web@49
|
91
|
rc-web@49
|
92 // push out the pulse to metronome
|
rc-web@49
|
93 seq.metrobeat = (seq.metrobeat+1)%seq.beatsinbar ;
|
rc-web@49
|
94 socket.broadcast.emit('metroPulse', tempoms, seq.voice,seq.metrobeat);
|
rc-web@49
|
95 socket.emit('metroPulse', tempoms, seq.voice,seq.metrobeat);
|
rc-web@49
|
96 }
|
rc-web@49
|
97
|
rc-web@49
|
98 // flip the page
|
rc-web@49
|
99 if (counter == 0){
|
rc-web@49
|
100
|
rc-web@49
|
101 seq.counter = (seq.counter + 1) % seq.durations.length
|
rc-web@49
|
102 socket.broadcast.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter);
|
rc-web@49
|
103 //delete tockTock;
|
rc-web@49
|
104 step(seq);
|
rc-web@49
|
105 }
|
rc-web@49
|
106
|
rc-web@49
|
107 // decrement the time
|
rc-web@49
|
108 ztime -= tempoms
|
rc-web@49
|
109 }
|
rc-web@49
|
110
|
rc-web@49
|
111 var pulse = setInterval(sequenCer, tempoms);
|
rc-web@49
|
112
|
rc-web@49
|
113 socket.on('stopSeq', function () {
|
rc-web@49
|
114 //donaldduck = mickeymouse + 7
|
rc-web@49
|
115 sequenCer.clearInterval
|
rc-web@49
|
116 console.log("sequencer stopping...")
|
rc-web@49
|
117 // grrr why wont this clearInterval work
|
rc-web@49
|
118 sequencerState = 0
|
rc-web@49
|
119 clearInterval(pulse)
|
rc-web@49
|
120 stopChr();
|
rc-web@49
|
121 });
|
rc-web@49
|
122
|
rc-web@49
|
123 };
|
rc-web@49
|
124
|
rc-web@49
|
125 step = function (seq) {
|
rc-web@49
|
126 //clearInterval(seq.boo);
|
rc-web@49
|
127 //clearInterval(countdowntick);
|
rc-web@49
|
128 countdowntick(seq)
|
rc-web@49
|
129 sequencerState=1;
|
rc-web@49
|
130 };
|
rc-web@49
|
131
|
rc-web@49
|
132 startMss = function () {
|
rc-web@49
|
133 step(seqA);step(seqB); step(seqC); step(seqD);
|
rc-web@49
|
134 ztime =-1;
|
rc-web@49
|
135 }
|
rc-web@49
|
136
|
rc-web@49
|
137 exports.startMss = startMss;
|
rc-web@49
|
138 });
|
rc-web@49
|
139
|
rc-web@49
|
140
|
rc-web@49
|
141
|