annot-server/static/js/pianoroll.js
author ymh <ymh.work@gmail.com>
Sat, 25 Oct 2014 05:41:51 +0200
changeset 65 175826fb5b42
parent 58 726ee64f18a9
child 70 cbbdbbae7ead
permissions -rw-r--r--
Added tag V00.01 for changeset 2f5d0e9fe7b5
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;
58
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    17
var noteColor = [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, 
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    21
                 0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991, 
726ee64f18a9 new cat, new colors, links to embed...
cavaliet
parents: 54
diff changeset
    22
                 0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991];
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    23
//var speed = 1; // container -x position at each frame. Speed = 1 ~ 100px for 2 seconds
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    24
//var zeroTime = new Date("2014-10-06T12:16:43.000000Z").getTime();
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
    25
var noteDict = [{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}];
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    26
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
    27
// Visual config
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    28
var drawPianoNotes = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    29
var drawHorizontalLines = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    30
var drawVerticalLines = true;
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    31
// Timecode method
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    32
var timePageLoaded = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
    33
var offsetMusic = false;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    34
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    35
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    36
//create an new instance of a pixi stage
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    37
var stage = new PIXI.Stage(sceneBgColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    38
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    39
//create a renderer instance.
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    40
var renderer = PIXI.autoDetectRenderer(sceneWidth, sceneHeight);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    41
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    42
//add the renderer view element to the DOM
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    43
document.getElementById("canvasContainer").appendChild(renderer.view);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    44
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    45
//requestAnimFrame( animate );
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    46
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    47
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    48
//Draw 127 lines
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    49
var delta = sceneHeight / 128;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    50
if(drawHorizontalLines){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    51
    for(var i=1;i<128;i++){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    52
        var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    53
        graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    54
        graphics.lineStyle(1, 0xAAAAAA);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    55
        var y = delta * i;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    56
        graphics.moveTo(0, y);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    57
        graphics.lineTo(sceneWidth, y);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    58
        graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    59
        stage.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    60
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    61
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    62
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    63
//Draw piano notes on the left
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    64
if(drawPianoNotes){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    65
    for(var i=0;i<128;i++){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    66
        var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    67
        var color = pianoNotes[i%12]==1 ? 0xFFFFFF : 0x000000;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    68
        if(i==60){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    69
            color = 0xFFD700;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    70
        }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    71
        graphics.beginFill(color);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    72
        graphics.lineStyle(1, 0xAAAAAA);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    73
        var y = sceneHeight - delta * (i+1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    74
        graphics.drawRect(0, y, 20, delta);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    75
        graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    76
        stage.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    77
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    78
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    79
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    80
var uberContainer = new PIXI.DisplayObjectContainer();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    81
uberContainer.position.x = Math.floor(sceneWidth*9/10);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    82
uberContainer.position.y = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    83
stage.addChild(uberContainer);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    84
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    85
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    86
var container1 = new PIXI.DisplayObjectContainer();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    87
container1.position.x = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    88
container1.position.y = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    89
uberContainer.addChild(container1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    90
var container2 = new PIXI.DisplayObjectContainer();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    91
container2.position.x = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    92
container2.position.y = prHeight1;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    93
uberContainer.addChild(container2);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    94
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    95
// Line between two containers
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    96
var graphics = new PIXI.Graphics();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    97
graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    98
graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
    99
var y = delta * i;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   100
graphics.moveTo(0, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   101
graphics.lineTo(sceneWidth, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   102
graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   103
stage.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   104
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   105
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   106
function moveContainer(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   107
    container1.x -= pixelsPerSecond1/manualFramerate;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   108
    container2.x -= pixelsPerSecond2/manualFramerate;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   109
    renderer.render(stage);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   110
}
49
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));
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   114
    container1.x = Math.floor(-diff*pixelsPerSecond1);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   115
    container2.x = Math.floor(-diff*pixelsPerSecond2);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   116
    renderer.render(stage);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   117
}
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   118
function moveContainerMore(){
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
}
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   123
function moveContainerRight(){
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   124
    container1.x += 50*(pixelsPerSecond1/manualFramerate);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   125
    container2.x += 50*(pixelsPerSecond2/manualFramerate);
46
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   126
    renderer.render(stage);
7cff1f0a6882 some debug
cavaliet
parents: 28
diff changeset
   127
}
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   128
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   129
function addNoteInContainer(note, startTime, duration, velocity, pixelsPerSecond, container, prHeight, canal){
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   130
    //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
   131
    var beginX = (offsetMusic + startTime) * pixelsPerSecond / 1000;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   132
    var width = duration * pixelsPerSecond / 1000;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   133
    // We draw the rectangle
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   134
    var graphics = new PIXI.Graphics();
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   135
    graphics.beginFill(noteColor[canal], (velocity / 128));
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   136
    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
   137
    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
   138
    graphics.endFill();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   139
    container.addChild(graphics);
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   140
}
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   141
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   142
function addNotes(data){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   143
    if(!offsetMusic){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   144
        // 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
   145
        // in order to place in real time
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   146
        var now = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   147
        var timeBetweenNowAndStart = now - timePageLoaded;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   148
        offsetMusic = timeBetweenNowAndStart - data.content[1];
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   149
        //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
   150
    }
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   151
    var note = data.content[3];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   152
    var velocity = data.content[4];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   153
    if(velocity===0){
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   154
        if(typeof noteDict[data.content[2]][note]!=='undefined'){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   155
            // We close the note in container one
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   156
            //console.log("coucou 2", data);
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   157
            var duration = data.content[1] - noteDict[data.content[2]][note].ts;
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   158
            addNoteInContainer(note, noteDict[data.content[2]][note].ts, duration, noteDict[data.content[2]][note].velocity, pixelsPerSecond1, container1, prHeight1, data.content[2]);
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   159
            addNoteInContainer(note, noteDict[data.content[2]][note].ts, duration, noteDict[data.content[2]][note].velocity, pixelsPerSecond2, container2, prHeight2, data.content[2]);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   160
            // delete entry
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   161
            delete noteDict[data.content[2]][note];
28
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
    else{
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   165
        if(typeof noteDict[data.content[2]]==='undefined'){
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   166
            noteDict[data.content[2]] = {};
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   167
        }
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   168
        noteDict[data.content[2]][note] = {ts: data.content[1], velocity:velocity};
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   169
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   170
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   171
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   172
// Socket management
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   173
var sock = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   174
var ellog = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   175
function log(m) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   176
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   177
        ellog.innerHTML += m + '\n';
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   178
        ellog.scrollTop = ellog.scrollHeight;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   179
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   180
}
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   181
window.onload = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   182
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   183
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   184
        ellog = document.getElementById('log');
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   185
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   186
    else{
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   187
        document.body.removeChild(document.getElementById('log'));
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   188
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   189
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   190
    var wsuri;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   191
    if (window.location.protocol === "file:") {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   192
       wsuri = "ws://127.0.0.1:8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   193
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   194
       wsuri = "ws://" + window.location.hostname + ":8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   195
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   196
    if ("WebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   197
       sock = new WebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   198
    } else if ("MozWebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   199
       sock = new MozWebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   200
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   201
       log("Browser does not support WebSocket!");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   202
       window.location = "http://autobahn.ws/unsupportedbrowser";
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
    if (sock) {
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   206
       sock.onopen = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   207
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   208
               log("Connected to " + wsuri);
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
       sock.onclose = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   213
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   214
               log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   215
           }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   216
          sock = null;
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
       sock.onmessage = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   220
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   221
               log("Got message: " + e.data);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   222
           }
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   223
          addNotes(JSON.parse(e.data));
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   224
       }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   225
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   226
};
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   227
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   228
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   229
function addLine(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   230
    nbLines++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   231
    var graphics = new PIXI.Graphics();
50
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   232
    //var x = nbLines * (lineInterval/1000) * pixelsPerSecond1;
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   233
    var x = -container1.x;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   234
    //console.log("nbLines = ",nbLines, "x = ", x);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   235
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   236
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   237
    graphics.moveTo(x, prHeight1 - 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   238
    graphics.lineTo(x, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   239
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   240
    container1.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   241
    // Add text
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   242
    var totalSec = nbLines * lineInterval / 1000;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   243
    var hours = parseInt( totalSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   244
    var minutes = parseInt( totalSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   245
    var seconds = totalSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   246
    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
   247
    var fontObj = { font: "10pt Arial", fill: "#444444" };
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   248
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   249
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   250
    t.y = prHeight1 - 15;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   251
    container1.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   252
    // Second container
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   253
    graphics = new PIXI.Graphics();
50
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   254
    //x = nbLines * (lineInterval/1000) * pixelsPerSecond2;
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   255
    x = -container2.x;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   256
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   257
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   258
    graphics.moveTo(x, 0);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   259
    graphics.lineTo(x, 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   260
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   261
    container2.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   262
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   263
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   264
    t.y = 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   265
    container2.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   266
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   267
addLine();
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   268
var moveInterval = window.setInterval(replaceContainers, 1000/manualFramerate);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   269
// 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
   270
//var replaceInterval = window.setInterval(replaceContainers, 60*1000);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   271
var verticalLinesInterval = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   272
if(drawVerticalLines){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   273
    verticalLinesInterval = window.setInterval(addLine, lineInterval);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   274
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   275
var nbSec = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   276
var mySpan = document.getElementById("myspan");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   277
function updateTime(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   278
    nbSec++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   279
    var hours = parseInt( nbSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   280
    var minutes = parseInt( nbSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   281
    var seconds = nbSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   282
    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
   283
    mySpan.innerHTML = timeStr;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   284
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   285
var secondInterval = window.setInterval(updateTime, 1000);