diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/room.js | 79 |
1 files changed, 47 insertions, 32 deletions
diff --git a/lib/room.js b/lib/room.js index 62e2e16..0aed7eb 100644 --- a/lib/room.js +++ b/lib/room.js @@ -18,37 +18,44 @@ function sanitizeJSON (json) { } } -function Grid(){ +function Param(state){ var base = this; - var tempo = 125; - var pattern = [ - [1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0], - [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], - [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], - [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], - [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], - [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], - [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], - [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0] - ]; - function init(){ - bind(); - } - function bind(){ - } - base.getState = function(){ - return { - 'pattern': pattern, - 'tempo': tempo - } + base.state = state || {}; + base.get = function(){ + return base.state; } - base.setNote = function(data){ - if (data.channel < pattern.length && data.step < pattern[data.channel].length) { - var state = data.state == 1 ? 1 : 0; - pattern[data.channel][data.step] = state; + base.set = function(param){ + if (data.key in state) { + base.state[data.key] = data.value; + return true; } + return false; } - init(); +} +function Grid(){ + this.param = new Param({ + 'tempo': 125, + 'pattern': [ + [1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0], + [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], + [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], + [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], + [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], + [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], + [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0], + [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0] + ] + }); +} +function Grain(){ + this.param = new Param({ + 'sample': 'Clap.wav', + 'attack': 0, // grain envelope (attack) + 'sustain': 0, // grain envelope (hold) + 'step': 100, // % of envelope size used to find next grain + 'rate': 100, // % of envelope size used to emit next grain + // other things in fruity were step LFO, rate LFO, panning.. + }); } function Connection (socket) { @@ -62,8 +69,8 @@ function Connection (socket) { socket.on('event-mouse', mouse); socket.on('event-chat', chat); - socket.on('event-note', note); - socket.on('event-tempo', tempo); + listen('event-grid', grid); + listen('event-grain', grain); socket.on('disconnect', disconnect); } @@ -71,12 +78,22 @@ function Connection (socket) { socket.broadcast.emit("event-join", json); socket.emit("event-grid", grid.getState()); } + function listen(msg, obj){ + socket.on(msg, function (json){ + var data = sanitizeJSON(json); + if (data && 'key' in data && 'value' in data && obj.param.set(data)) {; + socket.broadcast.emit(msg, data); + } + }); + } + function mouse(json){ socket.broadcast.emit("event-mouse", json); } function chat(json){ socket.broadcast.emit("event-chat", json); } + function note(json){ var data = sanitizeJSON(json); if (data) { @@ -84,9 +101,6 @@ function Connection (socket) { socket.broadcast.emit("event-note", data); } } - function tempo(json){ - socket.broadcast.emit("event-tempo", json); - } function disconnect(json){ base = null; } @@ -94,6 +108,7 @@ function Connection (socket) { } var grid = new Grid (); +var grain = new Grain (); exports.connect = function(io, socket) { IO = IO || io; |
