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