annot-server/static/js/pianoroll.js
author cavaliet
Tue, 21 Oct 2014 12:14:05 +0200
changeset 50 5ff6273e3626
parent 49 5c1702e8d2a4
child 54 31cea001a298
permissions -rw-r--r--
optimisation, again.
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
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   100
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   101
function moveContainer(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   102
    container1.x -= pixelsPerSecond1/manualFramerate;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   103
    container2.x -= pixelsPerSecond2/manualFramerate;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   104
    renderer.render(stage);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   105
}
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   106
function replaceContainers(){
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   107
    var diff = (Date.now() - timePageLoaded)/1000;// nb of seconds since page loaded
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   108
    //console.log("replace ! diff1 = ", container1.x - Math.floor(-diff*pixelsPerSecond1), ", diff 2 = ", container2.x - Math.floor(-diff*pixelsPerSecond2));
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   109
    container1.x = Math.floor(-diff*pixelsPerSecond1);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   110
    container2.x = Math.floor(-diff*pixelsPerSecond2);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   111
    renderer.render(stage);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   112
}
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   113
function moveContainerMore(){
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   114
    container1.x -= 50*(pixelsPerSecond1/manualFramerate);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   115
    container2.x -= 50*(pixelsPerSecond2/manualFramerate);
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   116
    renderer.render(stage);
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   117
}
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   118
function moveContainerRight(){
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   119
    container1.x += 50*(pixelsPerSecond1/manualFramerate);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   120
    container2.x += 50*(pixelsPerSecond2/manualFramerate);
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   121
    renderer.render(stage);
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   122
}
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   123
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   124
function addNoteInContainer(note, startTime, duration, velocity, pixelsPerSecond, container, prHeight){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   125
    //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
   126
    var beginX = (offsetMusic + startTime) * pixelsPerSecond / 1000;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   127
    var width = duration * pixelsPerSecond / 1000;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   128
    // We draw the rectangle
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   129
    var graphics = new PIXI.Graphics();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   130
    graphics.beginFill(noteColor, (velocity / 128));
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   131
    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
   132
    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
   133
    graphics.endFill();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   134
    container.addChild(graphics);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   135
}
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   136
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   137
function addNotes(data){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   138
    if(!offsetMusic){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   139
        // 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
   140
        // in order to place in real time
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   141
        var now = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   142
        var timeBetweenNowAndStart = now - timePageLoaded;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   143
        offsetMusic = timeBetweenNowAndStart - data.content[1];
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   144
        //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
   145
    }
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   146
    var note = data.content[3];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   147
    var velocity = data.content[4];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   148
    if(velocity===0){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   149
        if(note in noteDict){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   150
            // We close the note in container one
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   151
            //console.log("coucou 2", data);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   152
            var duration = data.content[1] - noteDict[note].ts;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   153
            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
   154
            addNoteInContainer(note, noteDict[note].ts, duration, noteDict[note].velocity, pixelsPerSecond2, container2, prHeight2);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   155
            // delete entry
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   156
            delete noteDict[note];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   157
        }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   158
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   159
    else{
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   160
        noteDict[note] = {ts: data.content[1], velocity:velocity};
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   161
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   162
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   163
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   164
// Socket management
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   165
var sock = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   166
var ellog = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   167
function log(m) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   168
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   169
        ellog.innerHTML += m + '\n';
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   170
        ellog.scrollTop = ellog.scrollHeight;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   171
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   172
}
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   173
window.onload = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   174
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   175
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   176
        ellog = document.getElementById('log');
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   177
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   178
    else{
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   179
        document.body.removeChild(document.getElementById('log'));
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   180
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   181
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   182
    var wsuri;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   183
    if (window.location.protocol === "file:") {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   184
       wsuri = "ws://127.0.0.1:8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   185
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   186
       wsuri = "ws://" + window.location.hostname + ":8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   187
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   188
    if ("WebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   189
       sock = new WebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   190
    } else if ("MozWebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   191
       sock = new MozWebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   192
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   193
       log("Browser does not support WebSocket!");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   194
       window.location = "http://autobahn.ws/unsupportedbrowser";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   195
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   196
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   197
    if (sock) {
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   198
       sock.onopen = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   199
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   200
               log("Connected to " + wsuri);
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
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   204
       sock.onclose = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   205
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   206
               log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   207
           }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   208
          sock = null;
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
       sock.onmessage = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   212
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   213
               log("Got message: " + e.data);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   214
           }
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   215
          addNotes(JSON.parse(e.data));
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   216
       }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   217
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   218
};
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   219
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   220
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   221
function addLine(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   222
    nbLines++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   223
    var graphics = new PIXI.Graphics();
50
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   224
    //var x = nbLines * (lineInterval/1000) * pixelsPerSecond1;
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   225
    var x = -container1.x;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   226
    //console.log("nbLines = ",nbLines, "x = ", x);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   227
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   228
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   229
    graphics.moveTo(x, prHeight1 - 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   230
    graphics.lineTo(x, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   231
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   232
    container1.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   233
    // Add text
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   234
    var totalSec = nbLines * lineInterval / 1000;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   235
    var hours = parseInt( totalSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   236
    var minutes = parseInt( totalSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   237
    var seconds = totalSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   238
    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
   239
    var fontObj = { font: "10pt Arial", fill: "#444444" };
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   240
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   241
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   242
    t.y = prHeight1 - 15;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   243
    container1.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   244
    // Second container
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   245
    graphics = new PIXI.Graphics();
50
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   246
    //x = nbLines * (lineInterval/1000) * pixelsPerSecond2;
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   247
    x = -container2.x;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   248
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   249
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   250
    graphics.moveTo(x, 0);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   251
    graphics.lineTo(x, 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   252
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   253
    container2.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   254
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   255
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   256
    t.y = 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   257
    container2.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   258
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   259
addLine();
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   260
var moveInterval = window.setInterval(replaceContainers, 1000/manualFramerate);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   261
// To be sure of synchronism, we replace the container with time calculting every minute
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   262
//var replaceInterval = window.setInterval(replaceContainers, 60*1000);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   263
var verticalLinesInterval = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   264
if(drawVerticalLines){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   265
    verticalLinesInterval = window.setInterval(addLine, lineInterval);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   266
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   267
var nbSec = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   268
var mySpan = document.getElementById("myspan");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   269
function updateTime(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   270
    nbSec++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   271
    var hours = parseInt( nbSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   272
    var minutes = parseInt( nbSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   273
    var seconds = nbSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   274
    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
   275
    mySpan.innerHTML = timeStr;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   276
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   277
var secondInterval = window.setInterval(updateTime, 1000);