--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/client/annotviz/app/js/doubleroll.js Tue Jan 20 18:37:51 2015 +0100
@@ -0,0 +1,189 @@
+/**
+* scripts/doubleroll.js
+*
+* This is the starting point for your application.
+* Take a look at http://browserify.org/ for more info
+*/
+
+/* global document: false */
+
+'use strict';
+
+
+var PIXI = require('pixi');
+var _ = require('lodash');
+var PianoRoll = require('./pianoroll.js');
+
+var defaultConfig = {
+ orientation: 'horizontal',
+ logger: undefined,
+ sceneWidth: 1920,
+ pianorolls : [
+ {
+ height: 435,
+ timeWidth: 10,
+ lineInterval: 5000,
+ noteHeight: undefined
+ },
+ {
+ height: 645,
+ timeWidth: 60,
+ lineInterval: 5000,
+ noteHeight: undefined
+ },
+ ],
+ framerate: 25,
+ offsetMusic: false,
+ sceneBgColor: 0xFFFFFF,
+ lineColor: 0x444444,
+ lineFillColor: 0xFFFF00,
+ noteColors: [0xB90000, 0x4BDD71, 0xAF931E, 0x1C28BA, 0x536991],
+ noteHeight: undefined,
+ zeroShift: 0.9,
+ timeWidth: 60,
+ lineInterval: 5000,
+// wsUri: undefined,
+// eventCode: undefined
+
+};
+
+function DoubleRoll(options) {
+
+ var _this = this;
+ var opts = _(options).defaults(defaultConfig).value();
+
+ var orientation = opts.orientation;
+ var isHorizontal = (orientation !== 'vertical');
+
+ this.logger = opts.logger;
+ this.lineColor = opts.lineColor;
+ this.lineFillColor = opts.lineFillColor;
+ this.framerate = opts.framerate;
+ this.offsetMusic = opts.offsetMusic;
+ this.noteColors = opts.noteColors;
+
+ var noteHeight = opts.noteHeight;
+ var sceneBgColor = opts.sceneBgColor;
+ var sceneHeight = opts.sceneHeight || _(opts.pianorolls).reduce(function(s,p) { return s + p.height; }, 0);
+ var timeWidth = opts.timeWidth;
+ var lineInterval = opts.lineInterval;
+ var offsetMusic = opts.offsetMusic;
+
+ var sceneWidth = opts.sceneWidth;
+ var stageView = opts.stageView;
+
+ var zeroShift = opts.zeroShift;
+
+ var ws = opts.ws;
+
+ var colorsReg = {};
+
+ this.container = new PIXI.DisplayObjectContainer();
+ this.container.x = Math.floor(sceneWidth*zeroShift);
+ this.container.y = 0;
+
+ stageView.registerComponent(this);
+
+ var pianorollList = [];
+
+ var pianorollOptions = {
+ parentContainer: this.container,
+ orientation: orientation,
+ xInit: 0,
+ width: sceneWidth,
+ noteColors: this.noteColors,
+ colorsReg: colorsReg,
+ lineColor: this.lineColor,
+ lineInterval: lineInterval,
+ offsetMusic: offsetMusic,
+ };
+
+ var yInit = 0;
+ var linesDown = true;
+ _(opts.pianorolls).forEach(function(prDef, i) {
+ var prNoteHeight = noteHeight || prDef.noteHeight || prDef.height / 128;
+ var prTimeWidth = prDef.timeWidth || timeWidth;
+ pianorollList.push(new PianoRoll(_({
+ yInit: yInit,
+ height: prDef.height,
+ linesDown: linesDown,
+ pixelsPerSecond: Math.floor(sceneWidth / prTimeWidth),
+ noteHeight: prNoteHeight,
+ lineInterval: prDef.lineInterval
+ }).defaults(pianorollOptions).value()));
+ yInit += prDef.height;
+ linesDown = !linesDown;
+
+ if(i<(opts.pianorolls.length-1)) {
+ var lineGraphics = new PIXI.Graphics()
+ .beginFill(_this.lineFillColor)
+ .lineStyle(1, _this.lineColor)
+ .moveTo(Math.floor(sceneWidth*zeroShift), yInit)
+ .lineTo(-sceneWidth - Math.floor(sceneWidth*zeroShift), yInit)
+ .endFill();
+ _this.container.addChild(lineGraphics);
+ }
+ });
+
+ if(!isHorizontal) {
+ this.container.rotation = Math.PI/2;
+ this.container.y = sceneHeight;
+ this.container.x = sceneWidth;
+ }
+
+
+ this.init = function() {
+
+ ws.message(function(data) {
+ _this.addNotes(data);
+ });
+
+ };
+
+
+ this.addNotes = function(data) {
+
+ pianorollList.forEach(function(c) {
+ c.addNoteRaw(data);
+ });
+ };
+
+ this.refresh = function() {
+ pianorollList.forEach(function(c) {
+ c.move();
+ });
+ };
+
+ // Init page and intervals
+ var startTs;
+
+ this.start = function() {
+
+ startTs = Date.now();
+ pianorollList.forEach(function(c) {
+ c.start();
+ });
+ };
+
+ this.stop = function() {
+
+ pianorollList.forEach(function(c) {
+ c.stop();
+ });
+ };
+
+
+ this.log = function(m) {
+ if(this.logger) {
+ this.logger.log(m);
+ }
+ };
+
+
+
+ return this;
+}
+
+module.exports = {
+ DoubleRoll: DoubleRoll
+};