-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
110 lines (91 loc) · 2.63 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
var Hook = require('hook.io').Hook;
var maestro = require('./lib/maestro')();
var Knob = require('./lib/knob');
var InnertialKnob = require('./lib/innertial_knob');
var Sound = require('sound/build/default/sound');
var sound1 = Sound.create(Sound.bufferifySync(__dirname + '/samples/dubstep.wav'));
var sound1Playing = false;
var sound2 = Sound.create(Sound.bufferifySync(__dirname + '/samples/dubstep2.wav'));
var sound2Playing = false;
var sample1 = Sound.create(Sound.bufferifySync(__dirname + '/samples/sample1.wav'));
var sample1Playing = false;
var freq = 100;
var envelopeFreq = 2;
var distortion = 0.5;
var MAX_KNOB_VALUE = 1023;
var MID_KNOB_VALUE = 512;
maestro.setWave('sine');
maestro.setFreq(freq);
maestro.setEnvelopeFreq(envelopeFreq);
maestroPlaying = false;
var KNOB_MAP = [];
KNOB_MAP[0] = Knob('SOUND2', this, function(val) {
if (val > MID_KNOB_VALUE) {
return true;
} else {
return false;
}
}, function(val) {
if (val && ! sound1Playing) {
sound2.play();
} else {
sound2Playing = false;
sound2.pause();
}
});
KNOB_MAP[1] = Knob('FREQ', maestro, function(val) { return val / 4.0; }, maestro.setFreq);
KNOB_MAP[2] = Knob('ENVELOPE FREQ', maestro, function(val) { return val / 100.0; }, maestro.setEnvelopeFreq)
KNOB_MAP[3] = Knob('DISTORTION VOLUME', maestro, function(val) { return val / 10.0; }, maestro.setDistortionVolume)
KNOB_MAP[4] = Knob('SAMPLE1', this, function(val) {
if (val > MID_KNOB_VALUE) {
return true;
} else {
return false;
}
}, function(val) {
if (val && ! sample1Playing) {
sample1.play();
} else {
sample1Playing = false;
sample1.pause();
}
});
KNOB_MAP[5] = Knob('SOUND1', this, function(val) {
if (val > MID_KNOB_VALUE) {
return true;
} else {
return false;
}
}, function(val) {
if (val && ! sample1Playing) {
sound1.play();
} else {
sound1Playing = false;
sound1.pause();
}
});
// KNOB_MAP[5] = Knob('PWM WIDTH', maestro, function(val) { return val / MAX_KNOB_VALUE }, maestro.setPwmFilterWidth)
var MAX = 1023;
function Hoooker (options) {
var self = this;
Hook.call(this, options);
this.on('hook::ready', function() {
// sound1.loop(1000).play();
setTimeout(function() {
// sound2.loop(1000).play();
maestro.start();
self.on('serial::knobs', function(data) {
Object.keys(data).forEach(function(key) {
var value = parseInt(data[key], 10);
var fun = KNOB_MAP[parseInt(key, 10)];
if (fun) {
fun(value);
}
});
});
}, 0);
});
};
require('util').inherits(Hoooker, Hook);
var hooker = new Hoooker();
hooker.start();