annot-server/static/js/pianoroll.js
author cavaliet
Mon, 20 Oct 2014 18:02:31 +0200
changeset 48 a7abfcfd7959
parent 46 7cff1f0a6882
child 49 5c1702e8d2a4
permissions -rw-r--r--
real time with piano roll and new category management
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     1
// Config vars
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     2
var logger = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     3
var sceneWidth = 1920;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     4
//var sceneHeight = 128 * 4; // multiple of 128 because of 128 levels in midi signals ->  better look
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     5
var prHeight1 = 435;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     6
var prHeight2 = 645;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     7
var sceneHeight = prHeight1 + prHeight2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     8
var sceneBgColor = 0xFFFFFF;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     9
var lineColor = 0x444444;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    10
//var manualFramerate = 24;
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
    11
var pixelsPerSecond1 = Math.floor(sceneWidth / 10); // nb of pixels per second
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    12
var manualFramerate = pixelsPerSecond1 / 4;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    13
var pixelsPerSecond2 = Math.floor(sceneWidth / 60); // nb of pixels per second
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    14
var lineInterval = 5000; // means line every 5 seconds
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    15
var nbLines = -1;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    16
var noteHeight = 110;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    17
var noteColor = 0xB74141;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    18
//var speed = 1; // container -x position at each frame. Speed = 1 ~ 100px for 2 seconds
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    19
//var zeroTime = new Date("2014-10-06T12:16:43.000000Z").getTime();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    20
var noteDict = {};
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    21
var pianoNotes = [1,0,1,0,1,1,0,1,0,1,0,1];//Do, Do#, Ré, Ré#, Mi, Fa, Fa#, Sol, Sol#, La, La#, Si
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    22
// Visual config
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    23
var drawPianoNotes = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    24
var drawHorizontalLines = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    25
var drawVerticalLines = true;
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    26
// Timecode method
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    27
var timePageLoaded = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    28
var offsetMusic = false;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    29
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    30
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    31
//create an new instance of a pixi stage
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    32
var stage = new PIXI.Stage(sceneBgColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    33
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    34
//create a renderer instance.
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    35
var renderer = PIXI.autoDetectRenderer(sceneWidth, sceneHeight);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    36
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    37
//add the renderer view element to the DOM
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    38
document.getElementById("canvasContainer").appendChild(renderer.view);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    39
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    40
//requestAnimFrame( animate );
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    41
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    42
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    43
//Draw 127 lines
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    44
var delta = sceneHeight / 128;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    45
if(drawHorizontalLines){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    46
    for(var i=1;i<128;i++){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    47
        var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    48
        graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    49
        graphics.lineStyle(1, 0xAAAAAA);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    50
        var y = delta * i;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    51
        graphics.moveTo(0, y);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    52
        graphics.lineTo(sceneWidth, y);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    53
        graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    54
        stage.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    55
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    56
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    57
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    58
//Draw piano notes on the left
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    59
if(drawPianoNotes){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    60
    for(var i=0;i<128;i++){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    61
        var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    62
        var color = pianoNotes[i%12]==1 ? 0xFFFFFF : 0x000000;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    63
        if(i==60){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    64
            color = 0xFFD700;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    65
        }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    66
        graphics.beginFill(color);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    67
        graphics.lineStyle(1, 0xAAAAAA);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    68
        var y = sceneHeight - delta * (i+1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    69
        graphics.drawRect(0, y, 20, delta);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    70
        graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    71
        stage.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    72
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    73
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    74
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    75
var uberContainer = new PIXI.DisplayObjectContainer();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    76
uberContainer.position.x = Math.floor(sceneWidth*9/10);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    77
uberContainer.position.y = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    78
stage.addChild(uberContainer);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    79
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    80
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    81
var container1 = new PIXI.DisplayObjectContainer();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    82
container1.position.x = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    83
container1.position.y = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    84
uberContainer.addChild(container1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    85
var container2 = new PIXI.DisplayObjectContainer();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    86
container2.position.x = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    87
container2.position.y = prHeight1;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    88
uberContainer.addChild(container2);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    89
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    90
// Line between two containers
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    91
var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    92
graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    93
graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    94
var y = delta * i;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    95
graphics.moveTo(0, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    96
graphics.lineTo(sceneWidth, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    97
graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    98
stage.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    99
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   100
function moveContainer() {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   101
    container1.x -= pixelsPerSecond1/manualFramerate;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   102
    container2.x -= pixelsPerSecond2/manualFramerate;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   103
    renderer.render(stage);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   104
}
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   105
function moveContainerMore() {
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   106
    container1.x -= 50*(pixelsPerSecond1/manualFramerate);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   107
    container2.x -= 50*(pixelsPerSecond2/manualFramerate);
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   108
    renderer.render(stage);
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   109
}
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   110
function moveContainerRight() {
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   111
    container1.x += 50*(pixelsPerSecond1/manualFramerate);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   112
    container2.x += 50*(pixelsPerSecond2/manualFramerate);
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   113
    renderer.render(stage);
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   114
}
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   115
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   116
function addNoteInContainer(note, startTime, duration, velocity, pixelsPerSecond, container, prHeight){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   117
    //console.log("coucou 1", note, timeFromZero, ts, velocity, pixelsPerSecond, container, prHeight);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   118
    var beginX = (offsetMusic + startTime) * pixelsPerSecond / 1000;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   119
    var width = duration * pixelsPerSecond / 1000;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   120
    // We draw the rectangle
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   121
    var graphics = new PIXI.Graphics();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   122
    graphics.beginFill(noteColor, (velocity / 128));
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   123
    var y = (128-note) * prHeight / 128; // (128-note) because y = 0 is for note = 128 and y = 128 for note = 0
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   124
    graphics.drawRect(beginX, Math.floor(y - (noteHeight/2) + ((prHeight / 128)/2)), width, noteHeight);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   125
    graphics.endFill();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   126
    container.addChild(graphics);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   127
}
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   128
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   129
function addNotes(data){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   130
    if(!offsetMusic){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   131
        // get difference between the current note timecode and my zero to set the difference between the canvas's zero and the music's zero
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   132
        // in order to place in real time
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   133
        var now = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   134
        var timeBetweenNowAndStart = now - timePageLoaded;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   135
        offsetMusic = timeBetweenNowAndStart - data.content[1];
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   136
        //console.log("start: ", timePageLoaded, ", now: ", now, ", timeBetweenNowAndStart = ", timeBetweenNowAndStart, ", offsetMusic = ", offsetMusic);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   137
    }
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   138
    var note = data.content[3];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   139
    var velocity = data.content[4];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   140
    if(velocity===0){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   141
        if(note in noteDict){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   142
            // We close the note in container one
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   143
            //console.log("coucou 2", data);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   144
            var duration = data.content[1] - noteDict[note].ts;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   145
            addNoteInContainer(note, noteDict[note].ts, duration, noteDict[note].velocity, pixelsPerSecond1, container1, prHeight1);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   146
            addNoteInContainer(note, noteDict[note].ts, duration, noteDict[note].velocity, pixelsPerSecond2, container2, prHeight2);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   147
            // delete entry
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   148
            delete noteDict[note];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   149
        }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   150
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   151
    else{
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   152
        noteDict[note] = {ts: data.content[1], velocity:velocity};
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   153
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   154
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   155
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   156
// Socket management
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   157
var sock = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   158
var ellog = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   159
function log(m) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   160
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   161
        ellog.innerHTML += m + '\n';
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   162
        ellog.scrollTop = ellog.scrollHeight;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   163
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   164
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   165
window.onload = function() {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   166
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   167
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   168
        ellog = document.getElementById('log');
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   169
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   170
    else{
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   171
        document.body.removeChild(document.getElementById('log'));
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   172
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   173
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   174
    var wsuri;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   175
    if (window.location.protocol === "file:") {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   176
       wsuri = "ws://127.0.0.1:8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   177
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   178
       wsuri = "ws://" + window.location.hostname + ":8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   179
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   180
    if ("WebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   181
       sock = new WebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   182
    } else if ("MozWebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   183
       sock = new MozWebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   184
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   185
       log("Browser does not support WebSocket!");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   186
       window.location = "http://autobahn.ws/unsupportedbrowser";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   187
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   188
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   189
    if (sock) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   190
       sock.onopen = function() {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   191
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   192
               log("Connected to " + wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   193
           }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   194
       }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   195
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   196
       sock.onclose = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   197
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   198
               log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   199
           }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   200
          sock = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   201
       }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   202
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   203
       sock.onmessage = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   204
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   205
               log("Got message: " + e.data);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   206
           }
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   207
          addNotes(JSON.parse(e.data));
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   208
       }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   209
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   210
};
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   211
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   212
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   213
function addLine(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   214
    nbLines++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   215
    var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   216
    var x = nbLines * (lineInterval/1000) * pixelsPerSecond1;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   217
    //console.log("nbLines = ",nbLines, "x = ", x);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   218
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   219
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   220
    graphics.moveTo(x, prHeight1 - 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   221
    graphics.lineTo(x, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   222
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   223
    container1.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   224
    // Add text
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   225
    var totalSec = nbLines * lineInterval / 1000;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   226
    var hours = parseInt( totalSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   227
    var minutes = parseInt( totalSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   228
    var seconds = totalSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   229
    var timeStr = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   230
    var fontObj = { font: "10pt Arial", fill: "#444444" };
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   231
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   232
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   233
    t.y = prHeight1 - 15;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   234
    container1.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   235
    // Second container
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   236
    graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   237
    x = nbLines * (lineInterval/1000) * pixelsPerSecond2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   238
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   239
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   240
    graphics.moveTo(x, 0);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   241
    graphics.lineTo(x, 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   242
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   243
    container2.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   244
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   245
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   246
    t.y = 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   247
    container2.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   248
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   249
addLine();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   250
var moveInterval = window.setInterval(moveContainer, 1000/manualFramerate);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   251
var verticalLinesInterval = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   252
if(drawVerticalLines){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   253
    verticalLinesInterval = window.setInterval(addLine, lineInterval);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   254
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   255
var nbSec = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   256
var mySpan = document.getElementById("myspan");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   257
function updateTime(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   258
    nbSec++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   259
    var hours = parseInt( nbSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   260
    var minutes = parseInt( nbSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   261
    var seconds = nbSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   262
    var timeStr = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   263
    mySpan.innerHTML = timeStr;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   264
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   265
var secondInterval = window.setInterval(updateTime, 1000);