summaryrefslogtreecommitdiff
path: root/lib/room.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/room.js')
-rw-r--r--lib/room.js79
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;