annot-server/static/js/pianoroll.js
author cavaliet
Mon, 27 Oct 2014 17:22:48 +0100
changeset 72 99658249716c
parent 70 cbbdbbae7ead
child 74 bdcc964b3c01
permissions -rw-r--r--
Piano roll object instead of several containers
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 prHeight1 = 435;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     5
var prHeight2 = 645;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     6
var sceneHeight = prHeight1 + prHeight2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     7
var sceneBgColor = 0xFFFFFF;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
     8
var lineColor = 0x444444;
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
     9
var pixelsPerSecond1 = Math.floor(sceneWidth / 10); // nb of pixels per second
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    10
var manualFramerate = pixelsPerSecond1 / 4;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    11
var pixelsPerSecond2 = Math.floor(sceneWidth / 60); // nb of pixels per second
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    12
var lineInterval = 5000; // means line every 5 seconds
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    13
var nbLines = -1;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    14
var noteHeight = 110;
58
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    15
var noteColor = [0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991,
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    16
                 0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991, 
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    17
                 0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991, 
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    18
                 0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991, 
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    19
                 0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991, 
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    20
                 0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991];
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    21
// Vars
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    22
var noteDict = [];
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    23
// Timecode method
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    24
var timePageLoaded = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    25
var offsetMusic = false;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    26
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    27
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    28
//create an new instance of a pixi stage
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    29
var stage = new PIXI.Stage(sceneBgColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    30
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    31
//create a renderer instance.
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    32
var renderer = PIXI.autoDetectRenderer(sceneWidth, sceneHeight);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    33
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    34
//add the renderer view element to the DOM
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    35
document.getElementById("canvasContainer").appendChild(renderer.view);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    36
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    37
var uberContainer = new PIXI.DisplayObjectContainer();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    38
uberContainer.position.x = Math.floor(sceneWidth*9/10);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    39
uberContainer.position.y = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    40
stage.addChild(uberContainer);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    41
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    42
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    43
function PianoRoll(parentContainer, xInit, yInit, height, linesDown, pixelsPerSecond){
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    44
    
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    45
    this.container = new PIXI.DisplayObjectContainer();
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    46
    this.container.position.x = xInit;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    47
    this.container.position.y = yInit;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    48
    parentContainer.addChild(this.container);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    49
    
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    50
    this.linesDown = linesDown;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    51
    this.height = height;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    52
    this.pixelsPerSecond = pixelsPerSecond;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    53
    
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    54
    this.addNote = function(note, startTime, duration, velocity, canal){
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    55
        //console.log("coucou 1", note, timeFromZero, ts, velocity, pixelsPerSecond, container, prHeight);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    56
        var beginX = (offsetMusic + startTime) * this.pixelsPerSecond / 1000;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    57
        var width = duration * this.pixelsPerSecond / 1000;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    58
        // We draw the rectangle
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    59
        var graphics = new PIXI.Graphics();
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    60
        //console.log("beginX = ", beginX, "canal = ", canal, "color = ", noteColor[canal], "width = ", width, "note = ", note, "velocity = ", velocity);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    61
        graphics.beginFill(noteColor[canal], (velocity / 128));
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    62
        var y = (128-note) * this.height / 128; // (128-note) because y = 0 is for note = 128 and y = 128 for note = 0
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    63
        graphics.drawRect(beginX, Math.floor(y - (noteHeight/2) + ((this.height / 128)/2)), width, noteHeight);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    64
        graphics.endFill();
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    65
        this.container.addChild(graphics);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    66
    };
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    67
    
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    68
    this.addLine = function(lineNb){
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    69
        var graphics = new PIXI.Graphics();
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    70
        var x = -this.container.x;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    71
        graphics.beginFill(0xFFFF00);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    72
        graphics.lineStyle(1, lineColor);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    73
        var y = this.linesDown ? this.height - 20 : 0;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    74
        graphics.moveTo(x, y);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    75
        graphics.lineTo(x, y + 20);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    76
        graphics.endFill();
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    77
        this.container.addChild(graphics);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    78
        // Add text
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    79
        var totalSec = lineNb * lineInterval / 1000;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    80
        var hours = parseInt( totalSec / 3600 ) % 24;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    81
        var minutes = parseInt( totalSec / 60 ) % 60;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    82
        var seconds = totalSec % 60;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    83
        var timeStr = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    84
        var fontObj = { font: "10pt Arial", fill: "#444444" };
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    85
        var t = new PIXI.Text(timeStr, fontObj);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    86
        t.x = x + 2;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    87
        t.y = this.linesDown ? this.height - 15 : 2;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    88
        this.container.addChild(t);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    89
    }
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    90
    
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    91
    this.moveTo = function(diffTime){
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    92
        this.container.x = Math.floor(diffTime*this.pixelsPerSecond);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    93
    };
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    94
    
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    95
}
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    96
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    97
// Init containers
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    98
var container1 = new PianoRoll(uberContainer, 0, 0, prHeight1, true, pixelsPerSecond1);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
    99
var container2 = new PianoRoll(uberContainer, 0, prHeight1, prHeight2, false, pixelsPerSecond2);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   100
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   101
// Line between two containers
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   102
var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   103
graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   104
graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   105
graphics.moveTo(0, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   106
graphics.lineTo(sceneWidth, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   107
graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   108
stage.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   109
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   110
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   111
function replaceContainers(){
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   112
    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
   113
    //console.log("replace ! diff1 = ", container1.x - Math.floor(-diff*pixelsPerSecond1), ", diff 2 = ", container2.x - Math.floor(-diff*pixelsPerSecond2));
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   114
    container1.moveTo(-diff);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   115
    container2.moveTo(-diff);
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   116
    renderer.render(stage);
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   117
}
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   118
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   119
function addNotes(data){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   120
    if(!offsetMusic){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   121
        // 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
   122
        // in order to place in real time
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   123
        var now = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   124
        var timeBetweenNowAndStart = now - timePageLoaded;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   125
        offsetMusic = timeBetweenNowAndStart - data.content[1];
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   126
        //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
   127
    }
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   128
    var note = data.content[3];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   129
    var velocity = data.content[4];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   130
    if(velocity===0){
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   131
        if(typeof noteDict[data.content[2]][note]!=='undefined'){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   132
            // We close the note in container one
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   133
            //console.log("coucou 2", data);
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   134
            var duration = data.content[1] - noteDict[data.content[2]][note].ts;
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   135
            //addNoteInContainer(note, noteDict[data.content[2]][note].ts, duration, noteDict[data.content[2]][note].velocity, pixelsPerSecond1, container1, prHeight1, data.content[2]);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   136
            //         addNote(note, startTime,                          duration, velocity,                                 canal)
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   137
            container1.addNote(note, noteDict[data.content[2]][note].ts, duration, noteDict[data.content[2]][note].velocity, data.content[2]);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   138
            //addNoteInContainer(note, noteDict[data.content[2]][note].ts, duration, noteDict[data.content[2]][note].velocity, pixelsPerSecond2, container2, prHeight2, data.content[2]);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   139
            container2.addNote(note, noteDict[data.content[2]][note].ts, duration, noteDict[data.content[2]][note].velocity, data.content[2]);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   140
            // delete entry
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   141
            delete noteDict[data.content[2]][note];
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   142
        }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   143
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   144
    else{
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   145
        if(typeof noteDict[data.content[2]]==='undefined'){
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   146
            noteDict[data.content[2]] = {};
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   147
        }
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   148
        noteDict[data.content[2]][note] = {ts: data.content[1], velocity:velocity};
28
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
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   152
function addLine(){
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   153
    nbLines++;
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   154
    container1.addLine(nbLines);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   155
    container2.addLine(nbLines);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   156
}
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   157
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   158
// Socket management
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   159
var sock = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   160
var ellog = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   161
function log(m) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   162
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   163
        ellog.innerHTML += m + '\n';
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   164
        ellog.scrollTop = ellog.scrollHeight;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   165
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   166
}
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   167
window.onload = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   168
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   169
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   170
        ellog = document.getElementById('log');
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   171
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   172
    else{
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   173
        document.body.removeChild(document.getElementById('log'));
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   174
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   175
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   176
    var wsuri;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   177
    if (window.location.protocol === "file:") {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   178
       wsuri = "ws://127.0.0.1:8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   179
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   180
       wsuri = "ws://" + window.location.hostname + ":8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   181
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   182
    if ("WebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   183
       sock = new WebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   184
    } else if ("MozWebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   185
       sock = new MozWebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   186
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   187
       log("Browser does not support WebSocket!");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   188
       window.location = "http://autobahn.ws/unsupportedbrowser";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   189
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   190
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   191
    if (sock) {
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   192
       sock.onopen = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   193
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   194
               log("Connected to " + wsuri);
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
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   198
       sock.onclose = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   199
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   200
               log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   201
           }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   202
          sock = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   203
       }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   204
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   205
       sock.onmessage = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   206
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   207
               log("Got message: " + e.data);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   208
           }
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   209
           addNotes(JSON.parse(e.data));
28
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
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   214
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   215
// Init page and intervals
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   216
addLine();
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   217
var moveInterval = window.setInterval(replaceContainers, 1000/manualFramerate);
72
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   218
verticalLinesInterval = window.setInterval(addLine, lineInterval);
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   219
99658249716c Piano roll object instead of several containers
cavaliet
parents: 70
diff changeset
   220
// Little inteval to show time
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   221
var nbSec = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   222
var mySpan = document.getElementById("myspan");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   223
function updateTime(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   224
    nbSec++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   225
    var hours = parseInt( nbSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   226
    var minutes = parseInt( nbSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   227
    var seconds = nbSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   228
    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
   229
    mySpan.innerHTML = timeStr;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   230
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   231
var secondInterval = window.setInterval(updateTime, 1000);