annot-server/static/js/pianoroll.js
author cavaliet
Sat, 25 Oct 2014 13:33:08 +0200
changeset 70 cbbdbbae7ead
parent 58 726ee64f18a9
child 72 99658249716c
permissions -rw-r--r--
new cats, 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;
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();
70
cbbdbbae7ead new cats, again
cavaliet
parents: 58
diff changeset
   135
    //console.log("beginX = ", beginX, "canal = ", canal, "color = ", noteColor[canal], "width = ", width, "note = ", note, "velocity = ", velocity);
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   136
    graphics.beginFill(noteColor[canal], (velocity / 128));
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   137
    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
   138
    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
   139
    graphics.endFill();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   140
    container.addChild(graphics);
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
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   143
function addNotes(data){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   144
    if(!offsetMusic){
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   145
        // 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
   146
        // in order to place in real time
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   147
        var now = Date.now();
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   148
        var timeBetweenNowAndStart = now - timePageLoaded;
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   149
        offsetMusic = timeBetweenNowAndStart - data.content[1];
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   150
        //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
   151
    }
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   152
    var note = data.content[3];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   153
    var velocity = data.content[4];
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   154
    if(velocity===0){
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   155
        if(typeof noteDict[data.content[2]][note]!=='undefined'){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   156
            // We close the note in container one
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   157
            //console.log("coucou 2", data);
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   158
            var duration = data.content[1] - noteDict[data.content[2]][note].ts;
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   159
            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
   160
            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
   161
            // delete entry
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   162
            delete noteDict[data.content[2]][note];
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   163
        }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   164
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   165
    else{
54
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   166
        if(typeof noteDict[data.content[2]]==='undefined'){
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   167
            noteDict[data.content[2]] = {};
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   168
        }
31cea001a298 various channels
cavaliet
parents: 50
diff changeset
   169
        noteDict[data.content[2]][note] = {ts: data.content[1], velocity:velocity};
28
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
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   173
// Socket management
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   174
var sock = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   175
var ellog = null;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   176
function log(m) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   177
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   178
        ellog.innerHTML += m + '\n';
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   179
        ellog.scrollTop = ellog.scrollHeight;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   180
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   181
}
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   182
window.onload = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   183
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   184
    if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   185
        ellog = document.getElementById('log');
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   186
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   187
    else{
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   188
        document.body.removeChild(document.getElementById('log'));
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
    var wsuri;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   192
    if (window.location.protocol === "file:") {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   193
       wsuri = "ws://127.0.0.1:8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   194
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   195
       wsuri = "ws://" + window.location.hostname + ":8090/broadcast";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   196
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   197
    if ("WebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   198
       sock = new WebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   199
    } else if ("MozWebSocket" in window) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   200
       sock = new MozWebSocket(wsuri);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   201
    } else {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   202
       log("Browser does not support WebSocket!");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   203
       window.location = "http://autobahn.ws/unsupportedbrowser";
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   204
    }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   205
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   206
    if (sock) {
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   207
       sock.onopen = function(){
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   208
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   209
               log("Connected to " + wsuri);
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
       sock.onclose = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   214
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   215
               log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   216
           }
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   217
          sock = null;
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
       sock.onmessage = function(e) {
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   221
           if(logger){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   222
               log("Got message: " + e.data);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   223
           }
48
a7abfcfd7959 real time with piano roll and new category management
cavaliet
parents: 46
diff changeset
   224
          addNotes(JSON.parse(e.data));
28
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
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   230
function addLine(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   231
    nbLines++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   232
    var graphics = new PIXI.Graphics();
50
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   233
    //var x = nbLines * (lineInterval/1000) * pixelsPerSecond1;
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   234
    var x = -container1.x;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   235
    //console.log("nbLines = ",nbLines, "x = ", x);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   236
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   237
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   238
    graphics.moveTo(x, prHeight1 - 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   239
    graphics.lineTo(x, prHeight1);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   240
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   241
    container1.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   242
    // Add text
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   243
    var totalSec = nbLines * lineInterval / 1000;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   244
    var hours = parseInt( totalSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   245
    var minutes = parseInt( totalSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   246
    var seconds = totalSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   247
    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
   248
    var fontObj = { font: "10pt Arial", fill: "#444444" };
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   249
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   250
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   251
    t.y = prHeight1 - 15;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   252
    container1.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   253
    // Second container
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   254
    graphics = new PIXI.Graphics();
50
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   255
    //x = nbLines * (lineInterval/1000) * pixelsPerSecond2;
5ff6273e3626 optimisation, again.
cavaliet
parents: 49
diff changeset
   256
    x = -container2.x;
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   257
    graphics.beginFill(0xFFFF00);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   258
    graphics.lineStyle(1, lineColor);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   259
    graphics.moveTo(x, 0);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   260
    graphics.lineTo(x, 20);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   261
    graphics.endFill();
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   262
    container2.addChild(graphics);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   263
    var t = new PIXI.Text(timeStr, fontObj);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   264
    t.x = x + 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   265
    t.y = 2;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   266
    container2.addChild(t);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   267
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   268
addLine();
49
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   269
var moveInterval = window.setInterval(replaceContainers, 1000/manualFramerate);
5c1702e8d2a4 move with time and not framerate iteration
cavaliet
parents: 48
diff changeset
   270
// 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
   271
//var replaceInterval = window.setInterval(replaceContainers, 60*1000);
28
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   272
var verticalLinesInterval = false;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   273
if(drawVerticalLines){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   274
    verticalLinesInterval = window.setInterval(addLine, lineInterval);
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   275
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   276
var nbSec = 0;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   277
var mySpan = document.getElementById("myspan");
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   278
function updateTime(){
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   279
    nbSec++;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   280
    var hours = parseInt( nbSec / 3600 ) % 24;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   281
    var minutes = parseInt( nbSec / 60 ) % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   282
    var seconds = nbSec % 60;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   283
    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
   284
    mySpan.innerHTML = timeStr;
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   285
}
6025b8470d18 pianoroll in webapp
cavaliet
parents:
diff changeset
   286
var secondInterval = window.setInterval(updateTime, 1000);